2 set(TF_VERSION_SHORT 2.4)
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}")
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})
17 vcpkg_find_acquire_program(GIT)
18 get_filename_component(GIT_DIR "${GIT}" DIRECTORY)
19 vcpkg_add_to_path(PREPEND ${GIT_DIR})
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)
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})
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)
34 vcpkg_find_acquire_program(PYTHON3)
35 get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
36 vcpkg_add_to_path(PREPEND ${PYTHON3_DIR})
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)
41 set(ENV{PYTHON_BIN_PATH} "${PYTHON3}")
42 set(ENV{PYTHON_LIB_PATH} "${PYTHON_LIB_PATH}")
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})
47 # tensorflow has long file names, which will not work on windows
48 set(ENV{TEST_TMPDIR} "${CURRENT_BUILDTREES_DIR}/.bzl")
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)
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")
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")
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}")
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}")
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
120 if(VCPKG_TARGET_IS_WINDOWS)
121 set(WINDOWS_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/fix-windows-build.patch")
123 if(VCPKG_TARGET_IS_LINUX)
124 set(LINUX_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/fix-linux-build.patch")
127 OUT_SOURCE_PATH SOURCE_PATH
128 REPO tensorflow/tensorflow
130 SHA512 be8273f464c1c1c392f3ab0190dbba36d56a0edcc7991c1a86f16604c859056d3188737d11c3b41ec7918e1cf46d13814c50c00be8f459dde9f0fb618740ee3c
133 "${CMAKE_CURRENT_LIST_DIR}/fix-build-error.patch" # Fix namespace error
134 ${STATIC_ONLY_PATCHES}
135 ${WINDOWS_ONLY_PATCHES}
136 ${LINUX_ONLY_PATCHES}
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}")
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}
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.")
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")
161 message(STATUS "(For BAZEL_CUSTOM_CACERTS please use forward slashes instead of backslashes on Windows systems.")
166 message(STATUS "Warning: Building TensorFlow can take an hour or more.")
170 if(VCPKG_TARGET_IS_WINDOWS)
171 set(PLATFORM_COMMAND WINDOWS_COMMAND)
173 set(PLATFORM_COMMAND UNIX_COMMAND)
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
179 set(BUILD_OPTS "--compilation_mode=dbg")
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}'")
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}'")
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}'")
198 set(BUILD_OPTS "--compilation_mode=opt")
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}'")
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}'")
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}'")
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}
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}
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")
240 list(APPEND COPTS "--copt=-MT")
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}
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}
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}
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}
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}
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}
286 if(BUILD_TYPE STREQUAL "dbg")
287 set(DIR_PREFIX "/debug")
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.")
303 if(BUILD_TYPE STREQUAL dbg)
304 set(library_parts_variable TF_LIB_PARTS_DEBUG)
306 set(library_parts_variable TF_LIB_PARTS_RELEASE)
308 set(${library_parts_variable})
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")
323 ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/${TF_LIB_NAME_FULL}
324 DESTINATION ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib
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}
332 file(CREATE_LINK ${TF_LIB_NAME_FULL}
333 ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib/${TF_LIB_NAME}
336 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
338 ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-bin/tensorflow/${TF_FRAMEWORK_NAME_FULL}
339 DESTINATION ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib
342 ${TF_FRAMEWORK_NAME_FULL}
343 ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib/${TF_FRAMEWORK_NAME_SHORT}
347 ${TF_FRAMEWORK_NAME_FULL}
348 ${CURRENT_PACKAGES_DIR}${DIR_PREFIX}/lib/${TF_FRAMEWORK_NAME}
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 ...'")
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]'")
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]'")
371 ${CMAKE_CURRENT_LIST_DIR}/README-${PLATFORM_SUFFIX}
372 ${CURRENT_PACKAGES_DIR}/share/tensorflow${TF_PORT_SUFFIX}/README
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)
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)
384 if(VCPKG_TARGET_IS_WINDOWS)
385 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
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
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
396 set(VCPKG_POLICY_MISMATCHED_NUMBER_OF_BINARIES enabled)
398 set(prefix [[${TENSORFLOW_INSTALL_PREFIX}]])
401 foreach(lib IN LISTS TF_LIB_PARTS_RELEASE)
402 list(APPEND libs_to_link "$<$<CONFIG:Release>:${prefix}/lib/${lib}>")
404 foreach(lib IN LISTS TF_LIB_PARTS_DEBUG)
405 list(APPEND libs_to_link "$<$<CONFIG:Debug>:${prefix}/debug/lib/${lib}>")
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")
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}>")
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}
429 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
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
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
442 message(STATUS "You may want to delete ${CURRENT_BUILDTREES_DIR} to free diskspace.")