diff options
Diffstat (limited to 'tensorflow/contrib/cmake/tf_core_framework.cmake')
-rw-r--r-- | tensorflow/contrib/cmake/tf_core_framework.cmake | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/tensorflow/contrib/cmake/tf_core_framework.cmake b/tensorflow/contrib/cmake/tf_core_framework.cmake new file mode 100644 index 0000000000..989a176fd0 --- /dev/null +++ b/tensorflow/contrib/cmake/tf_core_framework.cmake @@ -0,0 +1,165 @@ +######################################################## +# RELATIVE_PROTOBUF_GENERATE_CPP function +######################################################## +# A variant of PROTOBUF_GENERATE_CPP that keeps the directory hierarchy. +# ROOT_DIR must be absolute, and proto paths must be relative to ROOT_DIR. +function(RELATIVE_PROTOBUF_GENERATE_CPP SRCS HDRS ROOT_DIR) + if(NOT ARGN) + message(SEND_ERROR "Error: RELATIVE_PROTOBUF_GENERATE_CPP() called without any proto files") + return() + endif() + + set(${SRCS}) + set(${HDRS}) + foreach(FIL ${ARGN}) + set(ABS_FIL ${ROOT_DIR}/${FIL}) + get_filename_component(FIL_WE ${FIL} NAME_WE) + get_filename_component(FIL_DIR ${ABS_FIL} PATH) + file(RELATIVE_PATH REL_DIR ${ROOT_DIR} ${FIL_DIR}) + + list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.cc") + list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.h") + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.cc" + "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.h" + COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} + ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} -I ${ROOT_DIR} ${ABS_FIL} + DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_EXECUTABLE} + COMMENT "Running C++ protocol buffer compiler on ${FIL}" + VERBATIM ) + endforeach() + + set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) + set(${SRCS} ${${SRCS}} PARENT_SCOPE) + set(${HDRS} ${${HDRS}} PARENT_SCOPE) +endfunction() + + +######################################################## +# tf_protos_cc library +######################################################## + +# Build proto library +include(FindProtobuf) +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +file(GLOB_RECURSE tf_protos_cc_srcs RELATIVE ${tensorflow_source_dir} + "${tensorflow_source_dir}/tensorflow/*.proto" +) +RELATIVE_PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS + ${tensorflow_source_dir} ${tf_protos_cc_srcs} +) + +add_library(tf_protos_cc ${PROTO_SRCS} ${PROTO_HDRS}) +target_include_directories(tf_protos_cc PUBLIC + ${CMAKE_CURRENT_BINARY_DIR} +) +target_link_libraries(tf_protos_cc PUBLIC + ${PROTOBUF_LIBRARIES} +) + + +######################################################## +# tf_core_lib library +######################################################## +file(GLOB_RECURSE tf_core_lib_srcs + "${tensorflow_source_dir}/tensorflow/core/lib/*.h" + "${tensorflow_source_dir}/tensorflow/core/lib/*.cc" + "${tensorflow_source_dir}/tensorflow/core/platform/*.h" + "${tensorflow_source_dir}/tensorflow/core/platform/*.cc" + "${tensorflow_source_dir}/tensorflow/core/public/*.h" +) + +file(GLOB_RECURSE tf_core_lib_test_srcs + "${tensorflow_source_dir}/tensorflow/core/lib/*test*.h" + "${tensorflow_source_dir}/tensorflow/core/lib/*test*.cc" + "${tensorflow_source_dir}/tensorflow/core/platform/*test*.h" + "${tensorflow_source_dir}/tensorflow/core/platform/*test*.cc" + "${tensorflow_source_dir}/tensorflow/core/public/*test*.h" +) + +list(REMOVE_ITEM tf_core_lib_srcs ${tf_core_lib_test_srcs}) + +add_library(tf_core_lib OBJECT ${tf_core_lib_srcs}) +target_include_directories(tf_core_lib PUBLIC + ${tensorflow_source_dir} + ${jpeg_INCLUDE_DIR} + ${png_INCLUDE_DIR} +) +#target_link_libraries(tf_core_lib +# ${CMAKE_THREAD_LIBS_INIT} +# ${PROTOBUF_LIBRARIES} +# tf_protos_cc +#) +target_compile_options(tf_core_lib PRIVATE + -fno-exceptions + -DEIGEN_AVOID_STL_ARRAY +) + +# C++11 +target_compile_features(tf_core_lib PRIVATE + cxx_rvalue_references +) + +add_dependencies(tf_core_lib + jpeg_copy_headers_to_destination + png_copy_headers_to_destination + re2_copy_headers_to_destination + eigen + tf_protos_cc +) + + +######################################################## +# tf_core_framework library +######################################################## +file(GLOB_RECURSE tf_core_framework_srcs + "${tensorflow_source_dir}/tensorflow/core/framework/*.h" + "${tensorflow_source_dir}/tensorflow/core/framework/*.cc" + "${tensorflow_source_dir}/tensorflow/core/util/*.h" + "${tensorflow_source_dir}/tensorflow/core/util/*.cc" + "${tensorflow_source_dir}/public/*.h" +) + +file(GLOB_RECURSE tf_core_framework_test_srcs + "${tensorflow_source_dir}/tensorflow/core/framework/*test*.h" + "${tensorflow_source_dir}/tensorflow/core/framework/*test*.cc" + "${tensorflow_source_dir}/tensorflow/core/framework/*testutil.h" + "${tensorflow_source_dir}/tensorflow/core/framework/*testutil.cc" + "${tensorflow_source_dir}/tensorflow/core/framework/*main.cc" + "${tensorflow_source_dir}/tensorflow/core/util/*test*.h" + "${tensorflow_source_dir}/tensorflow/core/util/*test*.cc" + "${tensorflow_source_dir}/tensorflow/core/util/*main.cc" +) + +list(REMOVE_ITEM tf_core_framework_srcs ${tf_core_framework_test_srcs}) + +add_library(tf_core_framework OBJECT ${tf_core_framework_srcs}) +target_include_directories(tf_core_framework PUBLIC + ${tensorflow_source_dir} + ${eigen_INCLUDE_DIRS} + ${re2_INCLUDES} +) +#target_link_libraries(tf_core_framework +# ${CMAKE_THREAD_LIBS_INIT} +# ${PROTOBUF_LIBRARIES} +# #${re2_STATIC_LIBRARIES} +# re2_lib +# ${jpeg_STATIC_LIBRARIES} +# ${png_STATIC_LIBRARIES} +# tf_protos_cc +# tf_core_lib +#) +add_dependencies(tf_core_framework + tf_core_lib +) +target_compile_options(tf_core_framework PRIVATE + -fno-exceptions + -DEIGEN_AVOID_STL_ARRAY +) +# C++11 +target_compile_features(tf_core_framework PRIVATE + cxx_rvalue_references +) |