mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-11-26 10:39:06 +08:00
279 lines
10 KiB
CMake
279 lines
10 KiB
CMake
vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
|
|
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO pytorch/pytorch
|
|
REF "v${VERSION}"
|
|
SHA512 a8961d78ad785b13c959a0612563a60e0de17a7c8bb9822ddea9a24072796354d07e81c47b6cc8761b21a6448845b088cf80e1661d9e889b0ed5474d3dc76756
|
|
HEAD_REF master
|
|
PATCHES
|
|
cmake-fixes.patch
|
|
more-fixes.patch
|
|
fix-build.patch
|
|
clang-cl.patch
|
|
cuda-adjustments.patch
|
|
fix-api-export.patch
|
|
fix-onnx-case.patch
|
|
fxdiv.patch
|
|
protoc.patch
|
|
fix-sleef.patch
|
|
fix-glog.patch
|
|
fix-msvc-ICE.patch
|
|
fix-calculate-minloglevel.patch
|
|
force-cuda-include.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 49e854d805d916b2031e337763928d2f8d2e1fbf
|
|
SHA512 ae63d48dc5b8ac30c38c2ace60f16834c7e9275fa342dc9f109d4fbc87b7bd674664f6413c36d0c1ab5a7da786030a4108d83daa4502b2f30239283ea3acdb16
|
|
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 12f35fa2be5994c1106367cac2fba21457b064f4
|
|
SHA512 a7e4bf58f82ca0b767df35da1b3588e2639ea2ef22ed0c47e989fb4cde5a28b0605b228b42fcaefbdf721bfbb91f2a9e7d41352ff522bd80b63db6d27e44ec20
|
|
HEAD_REF main
|
|
)
|
|
file(COPY "${src_cudnn}/" DESTINATION "${SOURCE_PATH}/third_party/cudnn_frontend")
|
|
|
|
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH src_cutlass
|
|
REPO NVIDIA/cutlass # new port ?
|
|
REF 6f47420213f757831fae65c686aa471749fa8d60
|
|
SHA512 f3b3c43fbd7942f96407669405385c9a99274290e99f86cab5bb8657664bf1951e4da27f3069500a4825c427adeec883e05e81302b58390df3a3adb8c08e31ed
|
|
HEAD_REF main
|
|
)
|
|
file(COPY "${src_cutlass}/" DESTINATION "${SOURCE_PATH}/third_party/cutlass")
|
|
|
|
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
|
|
)
|
|
#set(PYTHON3 "${CURRENT_HOST_INSTALLED_DIR}/tools/python3/python${VCPKG_HOST_EXECUTABLE_SUFFIX}")
|
|
message(STATUS "Using Python3: ${PYTHON3}")
|
|
|
|
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
|
|
FEATURES
|
|
dist USE_DISTRIBUTED # MPI, Gloo, TensorPipe
|
|
zstd USE_ZSTD
|
|
fftw3 USE_FFTW
|
|
fftw3 AT_FFTW_ENABLED
|
|
fbgemm USE_FBGEMM
|
|
opencv USE_OPENCV
|
|
# These are alternatives !
|
|
# tbb USE_TBB
|
|
# tbb AT_PARALLEL_NATIVE_TBB # AT_PARALLEL_ are alternatives
|
|
# openmp USE_OPENMP
|
|
# openmp AT_PARALLEL_OPENMP # AT_PARALLEL_ are alternatives
|
|
leveldb USE_LEVELDB
|
|
opencl USE_OPENCL
|
|
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_SHADERC_RUNTIME
|
|
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`
|
|
nnpack AT_NNPACK_ENABLED
|
|
xnnpack USE_XNNPACK
|
|
qnnpack USE_QNNPACK # todo: check use of `USE_PYTORCH_QNNPACK`
|
|
# No feature in vcpkg yet so disabled. -> Requires numpy build by vcpkg itself
|
|
python BUILD_PYTHON
|
|
python USE_NUMPY
|
|
)
|
|
|
|
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_WINDOWS OR VCPKG_TARGET_IS_OSX)
|
|
list(APPEND FEATURE_OPTIONS -DUSE_LIBUV=ON)
|
|
endif()
|
|
list(APPEND FEATURE_OPTIONS -DUSE_GLOO=${VCPKG_TARGET_IS_LINUX})
|
|
endif()
|
|
|
|
if(VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_IOS)
|
|
list(APPEND FEATURE_OPTIONS -DINTERN_BUILD_MOBILE=ON)
|
|
else()
|
|
list(APPEND FEATURE_OPTIONS -DINTERN_BUILD_MOBILE=OFF)
|
|
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}
|
|
-DCAFFE2_STATIC_LINK_CUDA=ON
|
|
-DCAFFE2_USE_MSVC_STATIC_RUNTIME=${USE_STATIC_RUNTIME}
|
|
-DBUILD_CUSTOM_PROTOBUF=OFF
|
|
-DUSE_LITE_PROTO=OFF
|
|
-DBUILD_TEST=OFF
|
|
-DATEN_NO_TEST=ON
|
|
-DUSE_SYSTEM_LIBS=ON
|
|
-DUSE_METAL=OFF
|
|
-DUSE_PYTORCH_METAL=OFF
|
|
-DUSE_PYTORCH_METAL_EXPORT=OFF
|
|
-DUSE_GFLAGS=ON
|
|
-DUSE_GLOG=ON
|
|
-DUSE_LMDB=ON
|
|
-DUSE_ITT=OFF
|
|
-DUSE_ROCKSDB=ON
|
|
-DUSE_OBSERVERS=OFF
|
|
-DUSE_PYTORCH_QNNPACK=OFF
|
|
-DUSE_KINETO=OFF
|
|
-DUSE_ROCM=OFF
|
|
-DUSE_NUMA=OFF
|
|
-DUSE_SYSTEM_ONNX=ON
|
|
-DUSE_SYSTEM_FP16=ON
|
|
-DUSE_SYSTEM_EIGEN_INSTALL=ON
|
|
-DUSE_SYSTEM_CPUINFO=ON
|
|
-DUSE_SYSTEM_PTHREADPOOL=ON
|
|
-DUSE_SYSTEM_PYBIND11=ON
|
|
-DUSE_SYSTEM_ZSTD=ON
|
|
-DUSE_SYSTEM_XNNPACK=ON
|
|
-DUSE_SYSTEM_GLOO=ON
|
|
-DUSE_SYSTEM_NCCL=ON
|
|
-DUSE_SYSTEM_LIBS=ON
|
|
-DUSE_SYSTEM_FXDIV=ON
|
|
-DUSE_SYSTEM_SLEEF=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_NUMPY=ON
|
|
-DUSE_KINETO=OFF #
|
|
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")
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/torch/TorchConfig.cmake" "/../../../" "/../../")
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/caffe2/Caffe2Config.cmake" "/../../../" "/../../")
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/caffe2/Caffe2Config.cmake"
|
|
"set(Caffe2_MAIN_LIBS torch_library)"
|
|
"set(Caffe2_MAIN_LIBS torch_library)\nfind_dependency(Eigen3)")
|
|
|
|
|
|
|
|
# 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")
|
|
|
|
# Cannot build python bindings yet
|
|
#if("python" IN_LIST FEATURES)
|
|
# set(ENV{USE_SYSTEM_LIBS} 1)
|
|
# vcpkg_replace_string("${SOURCE_PATH}/setup.py" "@TARGET_TRIPLET@" "${TARGET_TRIPLET}-rel")
|
|
# vcpkg_replace_string("${SOURCE_PATH}/tools/setup_helpers/env.py" "@TARGET_TRIPLET@" "${TARGET_TRIPLET}-rel")
|
|
# vcpkg_replace_string("${SOURCE_PATH}/torch/utils/cpp_extension.py" "@TARGET_TRIPLET@" "${TARGET_TRIPLET}-rel")
|
|
# vcpkg_python_build_and_install_wheel(SOURCE_PATH "${SOURCE_PATH}" OPTIONS -x)
|
|
#endif()
|
|
|
|
set(VCPKG_POLICY_DLLS_WITHOUT_EXPORTS enabled) # torch_global_deps.dll is empty.c and just for linking deps
|
|
|
|
set(config "${CURRENT_PACKAGES_DIR}/share/torch/TorchConfig.cmake")
|
|
file(READ "${config}" contents)
|
|
string(REGEX REPLACE "set\\\(NVTOOLEXT_HOME[^)]+" "set(NVTOOLEXT_HOME \"\$ENV{CUDA_PATH}\"" contents "${contents}")
|
|
#string(REGEX REPLACE "set\\\(NVTOOLEXT_HOME[^)]+" "set(NVTOOLEXT_HOME \"\${CMAKE_CURRENT_LIST_DIR}/../../tools/cuda/\"" contents "${contents}")
|
|
string(REGEX REPLACE "\\\${NVTOOLEXT_HOME}/lib/x64/nvToolsExt64_1.lib" "" contents "${contents}")
|
|
file(WRITE "${config}" "${contents}")
|
|
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/torch/csrc/autograd/custom_function.h" "struct TORCH_API Function" "struct Function")
|