aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/cmake/tf_core_framework.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/contrib/cmake/tf_core_framework.cmake')
-rw-r--r--tensorflow/contrib/cmake/tf_core_framework.cmake165
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
+)