]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/ports/tensorflow-common/tensorflow-common.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / ports / tensorflow-common / tensorflow-common.cmake
1 set(TF_VERSION 2.4.1)
2 set(TF_VERSION_SHORT 2.4)
3
4 vcpkg_find_acquire_program(BAZEL)
5 get_filename_component(BAZEL_DIR "${BAZEL}" DIRECTORY)
6 vcpkg_add_to_path(PREPEND ${BAZEL_DIR})
7 set(ENV{BAZEL_BIN_PATH} "${BAZEL}")
8
9 function(tensorflow_try_remove_recurse_wait PATH_TO_REMOVE)
10 file(REMOVE_RECURSE ${PATH_TO_REMOVE})
11 if(EXISTS "${PATH_TO_REMOVE}")
12 vcpkg_execute_required_process(COMMAND ${CMAKE_COMMAND} -E sleep 5 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR} LOGNAME prerequesits-sleep-${TARGET_TRIPLET})
13 file(REMOVE_RECURSE ${PATH_TO_REMOVE})
14 endif()
15 endfunction()
16
17 vcpkg_find_acquire_program(GIT)
18 get_filename_component(GIT_DIR "${GIT}" DIRECTORY)
19 vcpkg_add_to_path(PREPEND ${GIT_DIR})
20
21 if(CMAKE_HOST_WIN32)
22 vcpkg_acquire_msys(MSYS_ROOT PACKAGES bash unzip patch diffutils libintl gzip coreutils mingw-w64-x86_64-python-numpy)
23 vcpkg_add_to_path(${MSYS_ROOT}/usr/bin)
24 vcpkg_add_to_path(${MSYS_ROOT}/mingw64/bin)
25 set(BASH ${MSYS_ROOT}/usr/bin/bash.exe)
26
27 set(ENV{BAZEL_SH} ${MSYS_ROOT}/usr/bin/bash.exe)
28 set(ENV{BAZEL_VC} $ENV{VCInstallDir})
29 set(ENV{BAZEL_VC_FULL_VERSION} $ENV{VCToolsVersion})
30
31 set(PYTHON3 "${MSYS_ROOT}/mingw64/bin/python3.exe")
32 vcpkg_execute_required_process(COMMAND ${PYTHON3} -c "import site; print(site.getsitepackages()[0])" WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR} LOGNAME prerequesits-pypath-${TARGET_TRIPLET} OUTPUT_VARIABLE PYTHON_LIB_PATH)
33 else()
34 vcpkg_find_acquire_program(PYTHON3)
35 get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
36 vcpkg_add_to_path(PREPEND ${PYTHON3_DIR})
37
38 vcpkg_execute_required_process(COMMAND ${PYTHON3} -m pip install --user -U numpy WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR} LOGNAME prerequesits-pip-${TARGET_TRIPLET})
39 vcpkg_execute_required_process(COMMAND ${PYTHON3} -c "import site; print(site.getusersitepackages())" WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR} LOGNAME prerequesits-pypath-${TARGET_TRIPLET} OUTPUT_VARIABLE PYTHON_LIB_PATH)
40 endif()
41 set(ENV{PYTHON_BIN_PATH} "${PYTHON3}")
42 set(ENV{PYTHON_LIB_PATH} "${PYTHON_LIB_PATH}")
43
44 # check if numpy can be loaded
45 vcpkg_execute_required_process(COMMAND ${PYTHON3} -c "import numpy" WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR} LOGNAME prerequesits-numpy-${TARGET_TRIPLET})
46
47 # tensorflow has long file names, which will not work on windows
48 set(ENV{TEST_TMPDIR} "${CURRENT_BUILDTREES_DIR}/.bzl")
49
50 set(ENV{USE_DEFAULT_PYTHON_LIB_PATH} 1)
51 set(ENV{TF_NEED_KAFKA} 0)
52 set(ENV{TF_NEED_OPENCL_SYCL} 0)
53 set(ENV{TF_NEED_AWS} 0)
54 set(ENV{TF_NEED_GCP} 0)
55 set(ENV{TF_NEED_HDFS} 0)
56 set(ENV{TF_NEED_S3} 0)
57 set(ENV{TF_ENABLE_XLA} 0)
58 set(ENV{TF_NEED_GDR} 0)
59 set(ENV{TF_NEED_VERBS} 0)
60 set(ENV{TF_NEED_OPENCL} 0)
61 set(ENV{TF_NEED_MPI} 0)
62 set(ENV{TF_NEED_TENSORRT} 0)
63 set(ENV{TF_NEED_NGRAPH} 0)
64 set(ENV{TF_NEED_IGNITE} 0)
65 set(ENV{TF_NEED_ROCM} 0)
66 set(ENV{TF_SET_ANDROID_WORKSPACE} 0)
67 set(ENV{TF_DOWNLOAD_CLANG} 0)
68 set(ENV{TF_NCCL_VERSION} ${TF_VERSION_SHORT})
69 set(ENV{NCCL_INSTALL_PATH} "")
70 set(ENV{CC_OPT_FLAGS} "/arch:AVX")
71 set(ENV{TF_NEED_CUDA} 0)
72 set(ENV{TF_CONFIGURE_IOS} 0)
73
74 if(VCPKG_TARGET_IS_WINDOWS)
75 set(BAZEL_LIB_NAME tensorflow${TF_LIB_SUFFIX}.dll)
76 set(PLATFORM_SUFFIX windows)
77 set(STATIC_LINK_CMD static_link.bat)
78 elseif(VCPKG_TARGET_IS_OSX)
79 set(BAZEL_LIB_NAME libtensorflow${TF_LIB_SUFFIX}.dylib)
80 set(PLATFORM_SUFFIX macos)
81 set(STATIC_LINK_CMD sh static_link.sh)
82 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
83 set(TF_LIB_NAME "libtensorflow${TF_LIB_SUFFIX}.dylib")
84 set(TF_LIB_NAME_SHORT "libtensorflow${TF_LIB_SUFFIX}.2.dylib")
85 set(TF_LIB_NAME_FULL "libtensorflow${TF_LIB_SUFFIX}.${TF_VERSION}.dylib")
86 set(TF_FRAMEWORK_NAME "libtensorflow_framework.dylib")
87 set(TF_FRAMEWORK_NAME_SHORT "libtensorflow_framework.2.dylib")
88 set(TF_FRAMEWORK_NAME_FULL "libtensorflow_framework.${TF_VERSION}.dylib")
89 else()
90 set(TF_LIB_NAME "libtensorflow${TF_LIB_SUFFIX}.a")
91 set(TF_LIB_NAME_SHORT "libtensorflow${TF_LIB_SUFFIX}.2.a")
92 set(TF_LIB_NAME_FULL "libtensorflow${TF_LIB_SUFFIX}.${TF_VERSION}.a")
93 endif()
94 else()
95 set(BAZEL_LIB_NAME libtensorflow${TF_LIB_SUFFIX}.so)
96 set(PLATFORM_SUFFIX linux)
97 set(STATIC_LINK_CMD sh static_link.sh)
98 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
99 set(TF_LIB_NAME "libtensorflow${TF_LIB_SUFFIX}.so")
100 set(TF_LIB_NAME_SHORT "libtensorflow${TF_LIB_SUFFIX}.so.2")
101 set(TF_LIB_NAME_FULL "libtensorflow${TF_LIB_SUFFIX}.so.${TF_VERSION}")
102 set(TF_FRAMEWORK_NAME "libtensorflow_framework.so")
103 set(TF_FRAMEWORK_NAME_SHORT "libtensorflow_framework.so.2")
104 set(TF_FRAMEWORK_NAME_FULL "libtensorflow_framework.so.${TF_VERSION}")
105 else()
106 set(TF_LIB_NAME "libtensorflow${TF_LIB_SUFFIX}.a")
107 set(TF_LIB_NAME_SHORT "libtensorflow${TF_LIB_SUFFIX}.a.2")
108 set(TF_LIB_NAME_FULL "libtensorflow${TF_LIB_SUFFIX}.a.${TF_VERSION}")
109 endif()
110 endif()
111
112 foreach(BUILD_TYPE dbg rel)
113 # prefer repeated source extraction here for each build type over extracting once above the loop and copying because users reported issues with copying symlinks
114 set(STATIC_ONLY_PATCHES)
115 set(WINDOWS_ONLY_PATCHES)
116 set(LINUX_ONLY_PATCHES)
117 if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
118 set(STATIC_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/change-macros-for-static-lib.patch") # there is no static build option - change macros via patch and link library manually at the end
119 endif()
120 if(VCPKG_TARGET_IS_WINDOWS)
121 set(WINDOWS_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/fix-windows-build.patch")
122 endif()
123 if(VCPKG_TARGET_IS_LINUX)
124 set(LINUX_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/fix-linux-build.patch")
125 endif()
126 vcpkg_from_github(
127 OUT_SOURCE_PATH SOURCE_PATH
128 REPO tensorflow/tensorflow
129 REF "v${TF_VERSION}"
130 SHA512 be8273f464c1c1c392f3ab0190dbba36d56a0edcc7991c1a86f16604c859056d3188737d11c3b41ec7918e1cf46d13814c50c00be8f459dde9f0fb618740ee3c
131 HEAD_REF master
132 PATCHES
133 "${CMAKE_CURRENT_LIST_DIR}/fix-build-error.patch" # Fix namespace error
134 ${STATIC_ONLY_PATCHES}
135 ${WINDOWS_ONLY_PATCHES}
136 ${LINUX_ONLY_PATCHES}
137 )
138
139 message(STATUS "Configuring TensorFlow (${BUILD_TYPE})")
140 tensorflow_try_remove_recurse_wait(${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE})
141 file(RENAME ${SOURCE_PATH} ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE})
142 set(SOURCE_PATH "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}")
143
144 vcpkg_execute_required_process(
145 COMMAND ${PYTHON3} ${SOURCE_PATH}/configure.py --workspace "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}"
146 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}
147 LOGNAME config-${TARGET_TRIPLET}-${BUILD_TYPE}
148 )
149
150 if(DEFINED ENV{BAZEL_CUSTOM_CACERTS})
151 file(APPEND ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/.bazelrc "startup --host_jvm_args=-Djavax.net.ssl.trustStore='$ENV{BAZEL_CUSTOM_CACERTS}'\n")
152 message(STATUS "Using custom CA certificate store at: $ENV{BAZEL_CUSTOM_CACERTS}")
153 if(DEFINED ENV{BAZEL_CUSTOM_CACERTS_PASSWORD})
154 file(APPEND ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/.bazelrc "startup --host_jvm_args=-Djavax.net.ssl.trustStorePassword='$ENV{BAZEL_CUSTOM_CACERTS_PASSWORD}'\n")
155 message(STATUS "Using supplied custom CA certificate store password.")
156 endif()
157 else()
158 if(DEFINED ENV{HTTPS_PROXY})
159 message(STATUS "You are using HTTPS_PROXY. In case you encounter bazel certificate errors, you might want to set: BAZEL_CUSTOM_CACERTS=/path/to/trust.store (and optionally BAZEL_CUSTOM_CACERTS_PASSWORD), and to enable vcpkg to actually use it: VCPKG_KEEP_ENV_VARS=BAZEL_CUSTOM_CACERTS;BAZEL_CUSTOM_CACERTS_PASSWORD")
160 if(CMAKE_HOST_WIN32)
161 message(STATUS "(For BAZEL_CUSTOM_CACERTS please use forward slashes instead of backslashes on Windows systems.")
162 endif()
163 endif()
164 endif()
165
166 message(STATUS "Warning: Building TensorFlow can take an hour or more.")
167 set(COPTS)
168 set(CXXOPTS)
169 set(LINKOPTS)
170 if(VCPKG_TARGET_IS_WINDOWS)
171 set(PLATFORM_COMMAND WINDOWS_COMMAND)
172 else()
173 set(PLATFORM_COMMAND UNIX_COMMAND)
174 endif()
175 if(BUILD_TYPE STREQUAL dbg)
176 if(VCPKG_TARGET_IS_WINDOWS)
177 set(BUILD_OPTS "--compilation_mode=dbg --features=fastbuild") # link with /DEBUG:FASTLINK instead of /DEBUG:FULL to avoid .pdb >4GB error
178 else()
179 set(BUILD_OPTS "--compilation_mode=dbg")
180 endif()
181
182 separate_arguments(VCPKG_C_FLAGS ${PLATFORM_COMMAND} ${VCPKG_C_FLAGS})
183 separate_arguments(VCPKG_C_FLAGS_DEBUG ${PLATFORM_COMMAND} ${VCPKG_C_FLAGS_DEBUG})
184 foreach(OPT IN LISTS VCPKG_C_FLAGS VCPKG_C_FLAGS_DEBUG)
185 list(APPEND COPTS "--copt='${OPT}'")
186 endforeach()
187 separate_arguments(VCPKG_CXX_FLAGS ${PLATFORM_COMMAND} ${VCPKG_CXX_FLAGS})
188 separate_arguments(VCPKG_CXX_FLAGS_DEBUG ${PLATFORM_COMMAND} ${VCPKG_CXX_FLAGS_DEBUG})
189 foreach(OPT IN LISTS VCPKG_CXX_FLAGS VCPKG_CXX_FLAGS_DEBUG)
190 list(APPEND CXXOPTS "--cxxopt='${OPT}'")
191 endforeach()
192 separate_arguments(VCPKG_LINKER_FLAGS ${PLATFORM_COMMAND} ${VCPKG_LINKER_FLAGS})
193 separate_arguments(VCPKG_LINKER_FLAGS_DEBUG ${PLATFORM_COMMAND} ${VCPKG_LINKER_FLAGS_DEBUG})
194 foreach(OPT IN LISTS VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_DEBUG)
195 list(APPEND LINKOPTS "--linkopt='${OPT}'")
196 endforeach()
197 else()
198 set(BUILD_OPTS "--compilation_mode=opt")
199
200 separate_arguments(VCPKG_C_FLAGS ${PLATFORM_COMMAND} ${VCPKG_C_FLAGS})
201 separate_arguments(VCPKG_C_FLAGS_RELEASE ${PLATFORM_COMMAND} ${VCPKG_C_FLAGS_RELEASE})
202 foreach(OPT IN LISTS VCPKG_C_FLAGS VCPKG_C_FLAGS_RELEASE)
203 list(APPEND COPTS "--copt='${OPT}'")
204 endforeach()
205 separate_arguments(VCPKG_CXX_FLAGS ${PLATFORM_COMMAND} ${VCPKG_CXX_FLAGS})
206 separate_arguments(VCPKG_CXX_FLAGS_RELEASE ${PLATFORM_COMMAND} ${VCPKG_CXX_FLAGS_RELEASE})
207 foreach(OPT IN LISTS VCPKG_CXX_FLAGS VCPKG_CXX_FLAGS_RELEASE)
208 list(APPEND CXXOPTS "--cxxopt='${OPT}'")
209 endforeach()
210 separate_arguments(VCPKG_LINKER_FLAGS ${PLATFORM_COMMAND} ${VCPKG_LINKER_FLAGS})
211 separate_arguments(VCPKG_LINKER_FLAGS_RELEASE ${PLATFORM_COMMAND} ${VCPKG_LINKER_FLAGS_RELEASE})
212 foreach(OPT IN LISTS VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE)
213 list(APPEND LINKOPTS "--linkopt='${OPT}'")
214 endforeach()
215 endif()
216
217 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
218 if(VCPKG_TARGET_IS_WINDOWS)
219 list(JOIN COPTS " " COPTS)
220 list(JOIN CXXOPTS " " CXXOPTS)
221 list(JOIN LINKOPTS " " LINKOPTS)
222 vcpkg_execute_build_process(
223 COMMAND ${BASH} --noprofile --norc -c "'${BAZEL}' build --verbose_failures ${BUILD_OPTS} ${COPTS} ${CXXOPTS} ${LINKOPTS} --python_path='${PYTHON3}' --define=no_tensorflow_py_deps=true ///tensorflow:${BAZEL_LIB_NAME} ///tensorflow:install_headers"
224 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}
225 LOGNAME build-${TARGET_TRIPLET}-${BUILD_TYPE}
226 )
227 else()
228 vcpkg_execute_build_process(
229 COMMAND ${BAZEL} build --verbose_failures ${BUILD_OPTS} --python_path=${PYTHON3} ${COPTS} ${CXXOPTS} ${LINKOPTS} --define=no_tensorflow_py_deps=true //tensorflow:${BAZEL_LIB_NAME} //tensorflow:install_headers
230 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}
231 LOGNAME build-${TARGET_TRIPLET}-${BUILD_TYPE}
232 )
233 endif()
234 else()
235 if(VCPKG_TARGET_IS_WINDOWS)
236 if(VCPKG_CRT_LINKAGE STREQUAL static)
237 if(BUILD_TYPE STREQUAL dbg)
238 list(APPEND COPTS "--copt=-MTd")
239 else()
240 list(APPEND COPTS "--copt=-MT")
241 endif()
242 endif()
243 list(JOIN COPTS " " COPTS)
244 list(JOIN CXXOPTS " " CXXOPTS)
245 list(JOIN LINKOPTS " " LINKOPTS)
246 vcpkg_execute_build_process(
247 COMMAND ${BASH} --noprofile --norc -c "${BAZEL} build -s --verbose_failures ${BUILD_OPTS} --features=fully_static_link ${COPTS} ${CXXOPTS} ${LINKOPTS} --python_path='${PYTHON3}' --define=no_tensorflow_py_deps=true ///tensorflow:${BAZEL_LIB_NAME} ///tensorflow:install_headers"
248 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}
249 LOGNAME build-${TARGET_TRIPLET}-${BUILD_TYPE}
250 )
251 else()
252 vcpkg_execute_build_process(
253 COMMAND ${BAZEL} build -s --verbose_failures ${BUILD_OPTS} ${COPTS} ${CXXOPTS} ${LINKOPTS} --python_path=${PYTHON3} --define=no_tensorflow_py_deps=true //tensorflow:${BAZEL_LIB_NAME} //tensorflow:install_headers
254 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}
255 LOGNAME build-${TARGET_TRIPLET}-${BUILD_TYPE}
256 )
257 endif()
258 if(NOT VCPKG_TARGET_IS_OSX)
259 if(VCPKG_TARGET_IS_WINDOWS)
260 vcpkg_execute_build_process(
261 COMMAND ${PYTHON3} "${CMAKE_CURRENT_LIST_DIR}/convert_lib_params_${PLATFORM_SUFFIX}.py" ${TF_LIB_SUFFIX}
262 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow
263 LOGNAME postbuild1-${TARGET_TRIPLET}-${BUILD_TYPE}
264 )
265 else()
266 vcpkg_execute_build_process(
267 COMMAND ${PYTHON3} "${CMAKE_CURRENT_LIST_DIR}/convert_lib_params_${PLATFORM_SUFFIX}.py" ${TF_VERSION} ${TF_LIB_SUFFIX}
268 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow
269 LOGNAME postbuild1-${TARGET_TRIPLET}-${BUILD_TYPE}
270 )
271 endif()
272 endif()
273 # for some reason stdout of bazel ends up in stderr, so use err log file in the following command
274 vcpkg_execute_build_process(
275 COMMAND ${PYTHON3} "${CMAKE_CURRENT_LIST_DIR}/generate_static_link_cmd_${PLATFORM_SUFFIX}.py" "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-${BUILD_TYPE}-err.log" ${TF_LIB_SUFFIX}
276 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-${TARGET_TRIPLET}-${BUILD_TYPE}
277 LOGNAME postbuild2-${TARGET_TRIPLET}-${BUILD_TYPE}
278 )
279 vcpkg_execute_build_process(
280 COMMAND ${STATIC_LINK_CMD}
281 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-${TARGET_TRIPLET}-${BUILD_TYPE}
282 LOGNAME postbuild3-${TARGET_TRIPLET}-${BUILD_TYPE}
283 )
284 endif()
285
286 if(BUILD_TYPE STREQUAL "dbg")
287 set(DIR_PREFIX "/debug")
288 else()
289 set(DIR_PREFIX "")
290 endif()
291
292 if(VCPKG_TARGET_IS_WINDOWS)
293 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
294 file(COPY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/tensorflow${TF_LIB_SUFFIX}.dll DESTINATION ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/bin)
295 # rename before copy because after copy the file might be locked by anti-malware scanners for some time so that renaming fails
296 file(RENAME ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/tensorflow${TF_LIB_SUFFIX}.dll.if.lib ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/tensorflow${TF_LIB_SUFFIX}.lib)
297 file(COPY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/tensorflow${TF_LIB_SUFFIX}.lib DESTINATION ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib)
298 if(BUILD_TYPE STREQUAL dbg)
299 file(COPY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/tensorflow${TF_LIB_SUFFIX}.pdb DESTINATION ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/bin)
300 message(STATUS "Warning: debug information tensorflow${TF_LIB_SUFFIX}.pdb will be of limited use because only a reduced set could be produced due to the 4GB internal PDB file limit even on x64.")
301 endif()
302 else()
303 if(BUILD_TYPE STREQUAL dbg)
304 set(library_parts_variable TF_LIB_PARTS_DEBUG)
305 else()
306 set(library_parts_variable TF_LIB_PARTS_RELEASE)
307 endif()
308 set(${library_parts_variable})
309
310 # library might have been split because no more than 4GB are supported even on x64 Windows
311 foreach(PART_NO RANGE 1 100)
312 set(source "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/tensorflow${TF_LIB_SUFFIX}-part${PART_NO}.lib")
313 if(EXISTS "${source}")
314 file(COPY "${source}" DESTINATION "${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib")
315 list(APPEND ${library_parts_variable} "tensorflow${TF_LIB_SUFFIX}-part${PART_NO}.lib")
316 else()
317 break()
318 endif()
319 endforeach()
320 endif()
321 else()
322 file(COPY
323 ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/${TF_LIB_NAME_FULL}
324 DESTINATION ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib
325 )
326
327 # Note: these use relative links
328 file(CREATE_LINK ${TF_LIB_NAME_FULL}
329 ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib/${TF_LIB_NAME_SHORT}
330 SYMBOLIC
331 )
332 file(CREATE_LINK ${TF_LIB_NAME_FULL}
333 ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib/${TF_LIB_NAME}
334 SYMBOLIC
335 )
336 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
337 file(COPY
338 ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/${TF_FRAMEWORK_NAME_FULL}
339 DESTINATION ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib
340 )
341 file(CREATE_LINK
342 ${TF_FRAMEWORK_NAME_FULL}
343 ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib/${TF_FRAMEWORK_NAME_SHORT}
344 SYMBOLIC
345 )
346 file(CREATE_LINK
347 ${TF_FRAMEWORK_NAME_FULL}
348 ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib/${TF_FRAMEWORK_NAME}
349 SYMBOLIC
350 )
351 endif()
352 endif()
353 endforeach()
354
355 if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
356 message(STATUS "Warning: Static TensorFlow build contains several external dependencies that may cause linking conflicts (for example, one cannot use both openssl and TensorFlow in the same project, since TensorFlow contains boringssl).")
357 if(VCPKG_TARGET_IS_WINDOWS)
358 message(STATUS "Note: For some TensorFlow features (e.g. OpRegistry), it might be necessary to tell the linker to include the whole library, i.e., link using options '/WHOLEARCHIVE:tensorflow${TF_LIB_SUFFIX}-part1.lib /WHOLEARCHIVE:tensorflow${TF_LIB_SUFFIX}-part2.lib ...'")
359 else()
360 message(STATUS "Note: There is no separate libtensorflow_framework.a as it got merged into libtensorflow${TF_LIB_SUFFIX}.a to avoid linking conflicts.")
361 if(VCPKG_TARGET_IS_OSX)
362 message(STATUS "Note: Beside TensorFlow itself, you'll need to also pass its dependancies to the linker, for example '-ltensorflow${TF_LIB_SUFFIX} -framework CoreFoundation'")
363 message(STATUS "Note: For some TensorFlow features (e.g. OpRegistry), it might be necessary to tell the linker to include the whole library: '-Wl,-force_load,path/to/libtensorflow${TF_LIB_SUFFIX}.a -framework CoreFoundation -framework Security [rest of linker arguments]'")
364 else()
365 message(STATUS "Note: Beside TensorFlow itself, you'll need to also pass its dependancies to the linker, for example '-ltensorflow${TF_LIB_SUFFIX} -lm -ldl -lpthread'")
366 message(STATUS "Note: For some TensorFlow features (e.g. OpRegistry), it might be necessary to tell the linker to include the whole library: '-Wl,--whole-archive -ltensorflow${TF_LIB_SUFFIX} -Wl,--no-whole-archive [rest of linker arguments]'")
367 endif()
368 endif()
369
370 configure_file(
371 ${CMAKE_CURRENT_LIST_DIR}/README-${PLATFORM_SUFFIX}
372 ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/README
373 COPYONLY)
374 endif()
375
376 file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX})
377 file(RENAME ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/LICENSE ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/copyright)
378
379
380 # NOTE: if this port ever supports VCPKG_BUILD_TYPE, use that to set these.
381 set(TENSORFLOW_HAS_RELEASE ON)
382 set(TENSORFLOW_HAS_DEBUG ON)
383
384 if(VCPKG_TARGET_IS_WINDOWS)
385 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
386 configure_file(
387 ${CMAKE_CURRENT_LIST_DIR}/tensorflow-config-windows-dll.cmake.in
388 ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/tensorflow${TF_PORT_SUFFIX}-config.cmake
389 @ONLY)
390 else()
391 configure_file(
392 ${CMAKE_CURRENT_LIST_DIR}/tensorflow-config-windows-lib.cmake.in
393 ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/tensorflow${TF_PORT_SUFFIX}-config.cmake
394 @ONLY)
395
396 set(VCPKG_POLICY_MISMATCHED_NUMBER_OF_BINARIES enabled)
397
398 set(prefix [[${TENSORFLOW_INSTALL_PREFIX}]])
399
400 set(libs_to_link)
401 foreach(lib IN LISTS TF_LIB_PARTS_RELEASE)
402 list(APPEND libs_to_link "$<$<CONFIG:Release>:${prefix}/lib/${lib}>")
403 endforeach()
404 foreach(lib IN LISTS TF_LIB_PARTS_DEBUG)
405 list(APPEND libs_to_link "$<$<CONFIG:Debug>:${prefix}/debug/lib/${lib}>")
406 endforeach()
407 if(TENSORFLOW_HAS_RELEASE)
408 set(TF_LIB_PARTS_DEFAULT ${TF_LIB_PARTS_RELEASE})
409 set(prefix_DEFAULT "${prefix}")
410 elseif(TENSORFLOW_HAS_DEBUG)
411 set(TF_LIB_PARTS_DEFAULT ${TF_LIB_PARTS_DEBUG})
412 set(prefix_DEFAULT "${prefix}/debug")
413 endif()
414
415 foreach(lib IN LISTS TF_LIB_PARTS_DEFAULT)
416 list(APPEND libs_to_link
417 "$<$<NOT:$<OR:$<CONFIG:Release>,$<CONFIG:Debug>>>:${prefix}/lib/${lib}>")
418 endforeach()
419
420 string(REPLACE ";" "\n\t\t" libs_to_link "${libs_to_link}")
421 file(APPEND ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/tensorflow${TF_PORT_SUFFIX}-config.cmake "
422 target_link_libraries(tensorflow${TF_LIB_SUFFIX}::tensorflow${TF_LIB_SUFFIX}
423 INTERFACE
424 ${libs_to_link}
425 )"
426 )
427 endif()
428 else()
429 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
430 configure_file(
431 ${CMAKE_CURRENT_LIST_DIR}/tensorflow-config-shared.cmake.in
432 ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/tensorflow${TF_PORT_SUFFIX}-config.cmake
433 @ONLY)
434 else()
435 configure_file(
436 ${CMAKE_CURRENT_LIST_DIR}/tensorflow-config-static.cmake.in
437 ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/tensorflow${TF_PORT_SUFFIX}-config.cmake
438 @ONLY)
439 endif()
440 endif()
441
442 message(STATUS "You may want to delete ${CURRENT_BUILDTREES_DIR} to free diskspace.")