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