/tensorflow/contrib/cmake/tf_core_framework.cmake

https://gitlab.com/hrishikeshvganu/tensorflow · CMake · 165 lines · 113 code · 20 blank · 32 comment · 1 complexity · c6dc8e2afbcca42e8b9860b34c962d79 MD5 · raw file

  1. ########################################################
  2. # RELATIVE_PROTOBUF_GENERATE_CPP function
  3. ########################################################
  4. # A variant of PROTOBUF_GENERATE_CPP that keeps the directory hierarchy.
  5. # ROOT_DIR must be absolute, and proto paths must be relative to ROOT_DIR.
  6. function(RELATIVE_PROTOBUF_GENERATE_CPP SRCS HDRS ROOT_DIR)
  7. if(NOT ARGN)
  8. message(SEND_ERROR "Error: RELATIVE_PROTOBUF_GENERATE_CPP() called without any proto files")
  9. return()
  10. endif()
  11. set(${SRCS})
  12. set(${HDRS})
  13. foreach(FIL ${ARGN})
  14. set(ABS_FIL ${ROOT_DIR}/${FIL})
  15. get_filename_component(FIL_WE ${FIL} NAME_WE)
  16. get_filename_component(FIL_DIR ${ABS_FIL} PATH)
  17. file(RELATIVE_PATH REL_DIR ${ROOT_DIR} ${FIL_DIR})
  18. list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.cc")
  19. list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.h")
  20. add_custom_command(
  21. OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.cc"
  22. "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.h"
  23. COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
  24. ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} -I ${ROOT_DIR} ${ABS_FIL}
  25. DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_EXECUTABLE}
  26. COMMENT "Running C++ protocol buffer compiler on ${FIL}"
  27. VERBATIM )
  28. endforeach()
  29. set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
  30. set(${SRCS} ${${SRCS}} PARENT_SCOPE)
  31. set(${HDRS} ${${HDRS}} PARENT_SCOPE)
  32. endfunction()
  33. ########################################################
  34. # tf_protos_cc library
  35. ########################################################
  36. # Build proto library
  37. include(FindProtobuf)
  38. find_package(Protobuf REQUIRED)
  39. include_directories(${PROTOBUF_INCLUDE_DIRS})
  40. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  41. file(GLOB_RECURSE tf_protos_cc_srcs RELATIVE ${tensorflow_source_dir}
  42. "${tensorflow_source_dir}/tensorflow/*.proto"
  43. )
  44. RELATIVE_PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS
  45. ${tensorflow_source_dir} ${tf_protos_cc_srcs}
  46. )
  47. add_library(tf_protos_cc ${PROTO_SRCS} ${PROTO_HDRS})
  48. target_include_directories(tf_protos_cc PUBLIC
  49. ${CMAKE_CURRENT_BINARY_DIR}
  50. )
  51. target_link_libraries(tf_protos_cc PUBLIC
  52. ${PROTOBUF_LIBRARIES}
  53. )
  54. ########################################################
  55. # tf_core_lib library
  56. ########################################################
  57. file(GLOB_RECURSE tf_core_lib_srcs
  58. "${tensorflow_source_dir}/tensorflow/core/lib/*.h"
  59. "${tensorflow_source_dir}/tensorflow/core/lib/*.cc"
  60. "${tensorflow_source_dir}/tensorflow/core/platform/*.h"
  61. "${tensorflow_source_dir}/tensorflow/core/platform/*.cc"
  62. "${tensorflow_source_dir}/tensorflow/core/public/*.h"
  63. )
  64. file(GLOB_RECURSE tf_core_lib_test_srcs
  65. "${tensorflow_source_dir}/tensorflow/core/lib/*test*.h"
  66. "${tensorflow_source_dir}/tensorflow/core/lib/*test*.cc"
  67. "${tensorflow_source_dir}/tensorflow/core/platform/*test*.h"
  68. "${tensorflow_source_dir}/tensorflow/core/platform/*test*.cc"
  69. "${tensorflow_source_dir}/tensorflow/core/public/*test*.h"
  70. )
  71. list(REMOVE_ITEM tf_core_lib_srcs ${tf_core_lib_test_srcs})
  72. add_library(tf_core_lib OBJECT ${tf_core_lib_srcs})
  73. target_include_directories(tf_core_lib PUBLIC
  74. ${tensorflow_source_dir}
  75. ${jpeg_INCLUDE_DIR}
  76. ${png_INCLUDE_DIR}
  77. )
  78. #target_link_libraries(tf_core_lib
  79. # ${CMAKE_THREAD_LIBS_INIT}
  80. # ${PROTOBUF_LIBRARIES}
  81. # tf_protos_cc
  82. #)
  83. target_compile_options(tf_core_lib PRIVATE
  84. -fno-exceptions
  85. -DEIGEN_AVOID_STL_ARRAY
  86. )
  87. # C++11
  88. target_compile_features(tf_core_lib PRIVATE
  89. cxx_rvalue_references
  90. )
  91. add_dependencies(tf_core_lib
  92. jpeg_copy_headers_to_destination
  93. png_copy_headers_to_destination
  94. re2_copy_headers_to_destination
  95. eigen
  96. tf_protos_cc
  97. )
  98. ########################################################
  99. # tf_core_framework library
  100. ########################################################
  101. file(GLOB_RECURSE tf_core_framework_srcs
  102. "${tensorflow_source_dir}/tensorflow/core/framework/*.h"
  103. "${tensorflow_source_dir}/tensorflow/core/framework/*.cc"
  104. "${tensorflow_source_dir}/tensorflow/core/util/*.h"
  105. "${tensorflow_source_dir}/tensorflow/core/util/*.cc"
  106. "${tensorflow_source_dir}/public/*.h"
  107. )
  108. file(GLOB_RECURSE tf_core_framework_test_srcs
  109. "${tensorflow_source_dir}/tensorflow/core/framework/*test*.h"
  110. "${tensorflow_source_dir}/tensorflow/core/framework/*test*.cc"
  111. "${tensorflow_source_dir}/tensorflow/core/framework/*testutil.h"
  112. "${tensorflow_source_dir}/tensorflow/core/framework/*testutil.cc"
  113. "${tensorflow_source_dir}/tensorflow/core/framework/*main.cc"
  114. "${tensorflow_source_dir}/tensorflow/core/util/*test*.h"
  115. "${tensorflow_source_dir}/tensorflow/core/util/*test*.cc"
  116. "${tensorflow_source_dir}/tensorflow/core/util/*main.cc"
  117. )
  118. list(REMOVE_ITEM tf_core_framework_srcs ${tf_core_framework_test_srcs})
  119. add_library(tf_core_framework OBJECT ${tf_core_framework_srcs})
  120. target_include_directories(tf_core_framework PUBLIC
  121. ${tensorflow_source_dir}
  122. ${eigen_INCLUDE_DIRS}
  123. ${re2_INCLUDES}
  124. )
  125. #target_link_libraries(tf_core_framework
  126. # ${CMAKE_THREAD_LIBS_INIT}
  127. # ${PROTOBUF_LIBRARIES}
  128. # #${re2_STATIC_LIBRARIES}
  129. # re2_lib
  130. # ${jpeg_STATIC_LIBRARIES}
  131. # ${png_STATIC_LIBRARIES}
  132. # tf_protos_cc
  133. # tf_core_lib
  134. #)
  135. add_dependencies(tf_core_framework
  136. tf_core_lib
  137. )
  138. target_compile_options(tf_core_framework PRIVATE
  139. -fno-exceptions
  140. -DEIGEN_AVOID_STL_ARRAY
  141. )
  142. # C++11
  143. target_compile_features(tf_core_framework PRIVATE
  144. cxx_rvalue_references
  145. )