blob: 4b068236eb04b764a03f077bf1feffee35c1a7b0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
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
|