-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
166 lines (150 loc) · 5.86 KB
/
CMakeLists.txt
File metadata and controls
166 lines (150 loc) · 5.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
cmake_minimum_required(VERSION 3.5.1)
project(tensorflow_wrapper)
include(ExternalProject)
if(NOT TENSORFLOW_TAG)
set(TENSORFLOW_TAG "v1.11.0")
endif()
# Copy build execution files
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/build_tensorflow.sh ${CMAKE_CURRENT_BINARY_DIR}/build_tensorflow.sh COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/jetson.patch ${CMAKE_CURRENT_BINARY_DIR}/jetson.patch COPYONLY)
ExternalProject_Add(
tensorflow
GIT_REPOSITORY http://github.com/tensorflow/tensorflow.git
GIT_TAG "${TENSORFLOW_TAG}"
TMP_DIR "/tmp"
STAMP_DIR "tensorflow-stamp"
DOWNLOAD_DIR "tensorflow"
SOURCE_DIR "tensorflow"
BUILD_IN_SOURCE 1
UPDATE_COMMAND ""
CONFIGURE_COMMAND make -f tensorflow/contrib/makefile/Makefile clean
COMMAND tensorflow/contrib/makefile/download_dependencies.sh
COMMAND tensorflow/contrib/makefile/compile_nsync.sh
BUILD_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build_tensorflow.sh
INSTALL_COMMAND ""
)
# create and setup the interface library for tensorflow
add_library(${PROJECT_NAME} INTERFACE)
add_dependencies(${PROJECT_NAME} tensorflow)
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERFACE_COMPILE_OPTIONS "-std=c++11;-D_GLIBCXX_USE_CXX11_ABI=0"
)
find_package(Protobuf REQUIRED)
find_package(Eigen3 REQUIRED)
# set the library include directories
set(TF_DEP_DOWNLOADS tensorflow/tensorflow/contrib/makefile/downloads)
set(TF_DEP_INSTALL tensorflow/tensorflow/contrib/makefile/gen)
target_include_directories(${PROJECT_NAME} INTERFACE
${Protobuf_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/tensorflow
${CMAKE_CURRENT_BINARY_DIR}/tensorflow/bazel-genfiles
)
set(TF_LIB_DIR ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/bazel-bin/tensorflow)
target_link_libraries(${PROJECT_NAME} INTERFACE
${TF_LIB_DIR}/libtensorflow_cc.so
${TF_LIB_DIR}/libtensorflow_framework.so
${Protobuf_LIBRARIES}
${EIGEN3_LIBS}
)
if(${${PROJECT_NAME}_build_examples})
add_subdirectory(example)
endif()
# setup package install
set(INCLUDE_DEST "include/${PROJECT_NAME}")
set(LIB_DEST "lib")
set(EXPORT_DEST "lib/${PROJECT_NAME}")
set(BIN_DEST "bin")
add_library(${PROJECT_NAME}_EXPORT INTERFACE)
set_target_properties(${PROJECT_NAME}_EXPORT PROPERTIES
INTERFACE_COMPILE_OPTIONS "-std=c++11"
EXPORT_NAME ${PROJECT_NAME}
)
target_include_directories(${PROJECT_NAME}_EXPORT INTERFACE
${CMAKE_INSTALL_PREFIX}/${INCLUDE_DEST}/third_party/eigen3
${CMAKE_INSTALL_PREFIX}/${INCLUDE_DEST}/third_party
${Protobuf_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
${CMAKE_INSTALL_PREFIX}/${INCLUDE_DEST}
)
target_link_libraries(${PROJECT_NAME}_EXPORT INTERFACE
${CMAKE_INSTALL_PREFIX}/${LIB_DEST}/libtensorflow_cc.so
${CMAKE_INSTALL_PREFIX}/${LIB_DEST}/libtensorflow_framework.so
${Protobuf_LIBRARIES}
${EIGEN3_LIBS}
)
# install all header files
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/tensorflow/cc
DESTINATION ${INCLUDE_DEST}/tensorflow
FILES_MATCHING PATTERN "*.h"
)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/tensorflow/core
DESTINATION ${INCLUDE_DEST}/tensorflow
FILES_MATCHING PATTERN "*.h"
)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/bazel-genfiles/tensorflow
DESTINATION ${INCLUDE_DEST}
FILES_MATCHING PATTERN "*.h"
)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/bazel-genfiles/external
DESTINATION ${INCLUDE_DEST}
FILES_MATCHING PATTERN "*.h"
)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/third_party
DESTINATION ${INCLUDE_DEST}
FILES_MATCHING PATTERN "*"
PATTERN "Makefile*" EXCLUDE
PATTERN "*unittest*" EXCLUDE
PATTERN "*.o" EXCLUDE
PATTERN "*.so" EXCLUDE
PATTERN "*.so.*" EXCLUDE
PATTERN "*.a" EXCLUDE
PATTERN "*.tbz" EXCLUDE
PATTERN "*.tgz" EXCLUDE
PATTERN "*.tar" EXCLUDE
PATTERN "*.tar.*" EXCLUDE
PATTERN "*.zip" EXCLUDE
)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/tensorflow/contrib/makefile/downloads/absl/absl
DESTINATION ${INCLUDE_DEST}
FILES_MATCHING PATTERN "*.h"
)
# (Note that we cannot simply include all *.h or *.hpp files, since e.g., eigen
# does not use file extensions for header files.)
install(
DIRECTORY ${EIGEN3_INCLUDE_DIR}
DESTINATION ${INCLUDE_DEST}/third_party
FILES_MATCHING PATTERN "*"
PATTERN "Makefile*" EXCLUDE
PATTERN "*unittest*" EXCLUDE
PATTERN "*.o" EXCLUDE
PATTERN "*.so" EXCLUDE
PATTERN "*.so.*" EXCLUDE
PATTERN "*.a" EXCLUDE
PATTERN "*.tbz" EXCLUDE
PATTERN "*.tgz" EXCLUDE
PATTERN "*.tar" EXCLUDE
PATTERN "*.tar.*" EXCLUDE
PATTERN "*.zip" EXCLUDE
)
# Install shared library files.
install(FILES
${TF_LIB_DIR}/libtensorflow_cc.so
${TF_LIB_DIR}/libtensorflow_framework.so
DESTINATION ${LIB_DEST}
)
# Install tools.
install(PROGRAMS
${TF_LIB_DIR}/tools/graph_transforms/summarize_graph
${TF_LIB_DIR}/tools/graph_transforms/transform_graph
DESTINATION ${BIN_DEST}
)
install(TARGETS ${PROJECT_NAME}_EXPORT EXPORT ${PROJECT_NAME} DESTINATION ${LIB_DEST})
install(FILES ${PROJECT_NAME}-config.cmake DESTINATION ${EXPORT_DEST})
install(EXPORT ${PROJECT_NAME} DESTINATION ${EXPORT_DEST})