diff options
| author | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
|---|---|---|
| committer | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
| commit | 54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch) | |
| tree | d915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/libtorch/portfile.cmake | |
Diffstat (limited to 'vcpkg/ports/libtorch/portfile.cmake')
| -rw-r--r-- | vcpkg/ports/libtorch/portfile.cmake | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/vcpkg/ports/libtorch/portfile.cmake b/vcpkg/ports/libtorch/portfile.cmake new file mode 100644 index 0000000..4b06823 --- /dev/null +++ b/vcpkg/ports/libtorch/portfile.cmake @@ -0,0 +1,240 @@ +vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO pytorch/pytorch + REF "v${VERSION}" + SHA512 a9fc2252af9031c2cd46dde558c491aea8bc322fb80157a7760f300a44b759d4bfe866f030fbb974b80493057cfff4dd512498f99a100ed6d05bf620258ed37e + HEAD_REF master + PATCHES + fix-cmake.patch + fix-osx.patch + fix-vulkan.patch + fix-glog.patch + fix-pytorch-pr-156630.patch # https://github.com/pytorch/pytorch/pull/156630 + fix-dist-cuda.patch + ) + +file(REMOVE_RECURSE "${SOURCE_PATH}/caffe2/core/macros.h") # We must use generated header files + +vcpkg_from_github( + OUT_SOURCE_PATH src_kineto + REPO pytorch/kineto + REF d9753139d181b9ff42872465aac0e5d3018be415 + SHA512 f037fac78e566c40108acf9eace55a8f67a2c5b71f298fd3cd17bf22cf05240c260fd89f017fa411656a7505ec9073a06a3048e191251d5cfc4b52c237b37d0b + HEAD_REF main + PATCHES + kineto.patch +) +file(COPY "${src_kineto}/" DESTINATION "${SOURCE_PATH}/third_party/kineto") + +vcpkg_from_github( + OUT_SOURCE_PATH src_cudnn + REPO NVIDIA/cudnn-frontend # new port ? + REF 2533f5e5c1877fd76266133c1479ef1643ce3a8b # 1.6.1 + SHA512 8caacdf9f7dbd6ce55507f5f7165db8640b681e2a7dfd6a841de8eaa3489cff5ba41d11758cc464320b2ff9a491f8234e1749580cf43cac702f07cf82611e084 + HEAD_REF main +) +file(COPY "${src_cudnn}/" DESTINATION "${SOURCE_PATH}/third_party/cudnn_frontend") + + +file(REMOVE + "${SOURCE_PATH}/cmake/Modules/FindBLAS.cmake" + "${SOURCE_PATH}/cmake/Modules/FindLAPACK.cmake" + "${SOURCE_PATH}/cmake/Modules/FindCUDA.cmake" + "${SOURCE_PATH}/cmake/Modules/FindCUDAToolkit.cmake" + "${SOURCE_PATH}/cmake/Modules/Findpybind11.cmake" +) + +find_program(FLATC NAMES flatc PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools/flatbuffers" REQUIRED NO_DEFAULT_PATH NO_CMAKE_PATH) +message(STATUS "Using flatc: ${FLATC}") + +vcpkg_execute_required_process( + COMMAND ${FLATC} --cpp --no-prefix --scoped-enums --gen-mutable mobile_bytecode.fbs + LOGNAME codegen-flatc-mobile_bytecode + WORKING_DIRECTORY "${SOURCE_PATH}/torch/csrc/jit/serialization" +) + +find_program(PROTOC NAMES protoc PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools/protobuf" REQUIRED NO_DEFAULT_PATH NO_CMAKE_PATH) +message(STATUS "Using protoc: ${PROTOC}") + +x_vcpkg_get_python_packages( + PYTHON_VERSION 3 + PACKAGES typing-extensions pyyaml + # numpy + OUT_PYTHON_VAR PYTHON3 +) + +message(STATUS "Using Python3: ${PYTHON3}") + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + dist USE_DISTRIBUTED # MPI, Gloo, TensorPipe + zstd USE_ZSTD + fbgemm USE_FBGEMM + opencv USE_OPENCV + opencl USE_OPENCL + mkldnn USE_MKLDNN + cuda USE_CUDA + cuda USE_CUDNN + cuda USE_NCCL + cuda USE_SYSTEM_NCCL + cuda USE_NVRTC + cuda AT_CUDA_ENABLED + cuda AT_CUDNN_ENABLED + cuda USE_MAGMA + vulkan USE_VULKAN + vulkan USE_VULKAN_RELAXED_PRECISION + rocm USE_ROCM # This is an alternative to cuda not a feature! (Not in vcpkg.json!) -> disabled + llvm USE_LLVM + mpi USE_MPI + nnpack USE_NNPACK # todo: check use of `DISABLE_NNPACK_AND_FAMILY` +# No feature in vcpkg yet so disabled. -> Requires numpy build by vcpkg itself + python BUILD_PYTHON + python USE_NUMPY + glog USE_GLOG + gflags USE_GFLAGS +) + +if("dist" IN_LIST FEATURES) + if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_OSX) + list(APPEND FEATURE_OPTIONS -DUSE_TENSORPIPE=ON) + endif() + if(VCPKG_TARGET_IS_OSX) + list(APPEND FEATURE_OPTIONS -DUSE_LIBUV=ON) + endif() + list(APPEND FEATURE_OPTIONS -DUSE_GLOO=${VCPKG_TARGET_IS_LINUX}) +endif() + +if("cuda" IN_LIST FEATURES) + vcpkg_find_cuda(OUT_CUDA_TOOLKIT_ROOT cuda_toolkit_root) + list(APPEND FEATURE_OPTIONS + "-DCMAKE_CUDA_COMPILER=${NVCC}" + "-DCUDAToolkit_ROOT=${cuda_toolkit_root}" + ) +endif() + +if("vulkan" IN_LIST FEATURES) # Vulkan::glslc in FindVulkan.cmake + find_program(GLSLC NAMES glslc PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools/shaderc" REQUIRED) + message(STATUS "Using glslc: ${GLSLC}") + list(APPEND FEATURE_OPTIONS "-DVulkan_GLSLC_EXECUTABLE:FILEPATH=${GLSLC}") +endif() + +set(TARGET_IS_MOBILE OFF) +if(VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_IOS) + set(TARGET_IS_MOBILE ON) +endif() + +set(TARGET_IS_APPLE OFF) +if(VCPKG_TARGET_IS_IOS OR VCPKG_TARGET_IS_OSX) + set(TARGET_IS_APPLE ON) +endif() + +string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" USE_STATIC_RUNTIME) +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + DISABLE_PARALLEL_CONFIGURE + OPTIONS + ${FEATURE_OPTIONS} + -DProtobuf_PROTOC_EXECUTABLE:FILEPATH=${PROTOC} + -DCAFFE2_CUSTOM_PROTOC_EXECUTABLE:FILEPATH=${PROTOC} + -DPython_EXECUTABLE:FILEPATH=${PYTHON3} + -DPython3_EXECUTABLE:FILEPATH=${PYTHON3} + -DBUILD_PYTHON=OFF + -DUSE_NUMPY=OFF + -DCAFFE2_STATIC_LINK_CUDA=ON + -DCAFFE2_USE_MSVC_STATIC_RUNTIME=${USE_STATIC_RUNTIME} + -DBUILD_CUSTOM_PROTOBUF=OFF + -DBUILD_PYTHON=OFF + -DUSE_LITE_PROTO=OFF + -DBUILD_TEST=OFF + -DATEN_NO_TEST=ON + -DUSE_SYSTEM_LIBS=ON + -DUSE_METAL=OFF + -DUSE_FLASH_ATTENTION=OFF + -DUSE_PYTORCH_METAL=OFF + -DUSE_PYTORCH_METAL_EXPORT=OFF + -DUSE_PYTORCH_QNNPACK:BOOL=OFF + -DUSE_ITT=OFF + -DUSE_ROCKSDB=ON + -DUSE_OBSERVERS=OFF + -DUSE_KINETO=OFF + -DUSE_ROCM=OFF + -DUSE_NUMA=OFF + -DUSE_SYSTEM_LIBS=ON + -DBUILD_JNI=${VCPKG_TARGET_IS_ANDROID} + -DUSE_NNAPI=${VCPKG_TARGET_IS_ANDROID} + ${BLAS_OPTIONS} + # BLAS=MKL not supported in this port + -DUSE_MKLDNN=OFF + -DUSE_MKLDNN_CBLAS=OFF + #-DCAFFE2_USE_MKL=ON + #-DAT_MKL_ENABLED=ON + -DAT_MKLDNN_ENABLED=OFF + -DUSE_OPENCL=ON + -DUSE_KINETO=OFF # + # Should be enabled in-future along with the "python" feature (currently disabled) + # OPTIONS_RELEASE + # -DPYTHON_LIBRARY=${CURRENT_INSTALLED_DIR}/lib/python311.lib + # OPTIONS_DEBUG + # -DPYTHON_LIBRARY=${CURRENT_INSTALLED_DIR}/debug/lib/python311_d.lib + MAYBE_UNUSED_VARIABLES + USE_NUMA + USE_SYSTEM_BIND11 + MKLDNN_CPU_RUNTIME + PYTHON_LIBRARY +) + +vcpkg_cmake_install() +vcpkg_copy_pdbs() + +vcpkg_cmake_config_fixup(PACKAGE_NAME Caffe2 CONFIG_PATH "share/cmake/Caffe2" DO_NOT_DELETE_PARENT_CONFIG_PATH) +vcpkg_cmake_config_fixup(PACKAGE_NAME torch CONFIG_PATH "share/cmake/Torch" DO_NOT_DELETE_PARENT_CONFIG_PATH) +vcpkg_cmake_config_fixup(PACKAGE_NAME ATen CONFIG_PATH "share/cmake/ATen" ) + +vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/torch/TorchConfig.cmake" "/../../../" "/../../") + +# Traverse the folder and remove "some" empty folders +function(cleanup_once folder) + if(NOT IS_DIRECTORY "${folder}") + return() + endif() + file(GLOB paths LIST_DIRECTORIES true "${folder}/*") + list(LENGTH paths count) + # 1. remove if the given folder is empty + if(count EQUAL 0) + file(REMOVE_RECURSE "${folder}") + message(STATUS "Removed ${folder}") + return() + endif() + # 2. repeat the operation for hop 1 sub-directories + foreach(path ${paths}) + cleanup_once(${path}) + endforeach() +endfunction() + +# Some folders may contain empty folders. They will become empty after `cleanup_once`. +# Repeat given times to delete new empty folders. +function(cleanup_repeat folder repeat) + if(NOT IS_DIRECTORY "${folder}") + return() + endif() + while(repeat GREATER_EQUAL 1) + math(EXPR repeat "${repeat} - 1" OUTPUT_FORMAT DECIMAL) + cleanup_once("${folder}") + endwhile() +endfunction() + +cleanup_repeat("${CURRENT_PACKAGES_DIR}/include" 5) +cleanup_repeat("${CURRENT_PACKAGES_DIR}/lib/site-packages" 13) + +file(REMOVE_RECURSE + "${CURRENT_PACKAGES_DIR}/debug/include" + "${CURRENT_PACKAGES_DIR}/debug/share" +) + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") + + +set(VCPKG_POLICY_DLLS_WITHOUT_EXPORTS enabled) # torch_global_deps.dll is empty.c and just for linking deps + |