summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 7fc2f05ca2ab2fb56ffadd3b89c479bddbbb5b33 (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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# Maintainer: Pi-Yueh Chuang <pychuang@pm.me>

pkgname=python-pytorch-cuda-kepler
pkgver=1.9.0
pkgrel=1
pkgdesc="PyTorch with Kepler GPU (e.g., K20, K40, K80, etc.) support (only)."
arch=('x86_64')
url="https://pytorch.org"
license=('BSD')
depends=(
    'google-glog' 'gflags' 'opencv' 'openmp' 'nccl' 'pybind11' 'python'
    'python-yaml' 'libuv' 'python-numpy' 'protobuf' 'ffmpeg' 'python-future'
    'qt5-base' 'onednn' 'intel-mkl' 'cuda' 'cudnn' 'magma'
    'python-typing_extensions'
)
makedepends=(
    'python-setuptools' 'python-yaml' 'python-numpy' 'cmake' 'git' 'ninja'
    'pkgconfig' 'doxygen'
)
source=(
    "pytorch-${pkgver}::git+https://github.com/pytorch/pytorch.git#tag=v$pkgver"
    "${pkgname}-ios-cmake::git+https://github.com/Yangqing/ios-cmake.git"
    "${pkgname}-pthreadpool::git+https://github.com/Maratyszcza/pthreadpool.git"
    "${pkgname}-FP16::git+https://github.com/Maratyszcza/FP16.git"
    "${pkgname}-NNPACK::git+https://github.com/Maratyszcza/NNPACK.git"
    "${pkgname}-FXdiv::git+https://github.com/Maratyszcza/FXdiv.git"
    "${pkgname}-PeachPy::git+https://github.com/Maratyszcza/PeachPy.git"
    "${pkgname}-cub::git+https://github.com/NVlabs/cub.git"
    "${pkgname}-psimd::git+https://github.com/Maratyszcza/psimd.git"
    "${pkgname}-cpuinfo::git+https://github.com/pytorch/cpuinfo.git"
    "${pkgname}-enum34::git+https://github.com/PeachPy/enum34.git"
    "${pkgname}-ideep::git+https://github.com/intel/ideep"
    "${pkgname}-QNNPACK::git+https://github.com/pytorch/QNNPACK"
    "${pkgname}-foxi::git+https://github.com/houseroad/foxi.git"
    "${pkgname}-ARM_NEON_2_x86_SSE::git+https://github.com/intel/ARM_NEON_2_x86_SSE.git"
    "${pkgname}-six::git+https://github.com/benjaminp/six.git"
    "${pkgname}-eigen-git-mirror::git+https://github.com/eigenteam/eigen-git-mirror.git"
    "${pkgname}-gloo::git+https://github.com/facebookincubator/gloo"
    "${pkgname}-nccl::git+https://github.com/NVIDIA/nccl"
    "${pkgname}-gemmlowp::git+https://github.com/google/gemmlowp.git"
    "${pkgname}-kineto::git+https://github.com/pytorch/kineto"
    "${pkgname}-sleef::git+https://github.com/shibatch/sleef"
    "${pkgname}-onnx-tensorrt::git+https://github.com/onnx/onnx-tensorrt"
    "${pkgname}-benchmark::git+https://github.com/google/benchmark.git"
    "${pkgname}-tbb::git+https://github.com/01org/tbb"
    "${pkgname}-XNNPACK::git+https://github.com/malfet/XNNPACK.git"
    "${pkgname}-fbjni::git+https://github.com/facebookincubator/fbjni.git"
    "${pkgname}-tensorpipe::git+https://github.com/pytorch/tensorpipe.git"
    "${pkgname}-pybind11::git+https://github.com/pybind/pybind11.git"
    "${pkgname}-fbgemm::git+https://github.com/pytorch/fbgemm"
    "${pkgname}-googletest::git+https://github.com/google/googletest.git"
    "${pkgname}-zstd::git+https://github.com/facebook/zstd.git"
    "${pkgname}-onnx::git+https://github.com/onnx/onnx.git"
    "${pkgname}-protobuf::git+https://github.com/protocolbuffers/protobuf.git"
    "${pkgname}-fmt::git+https://github.com/fmtlib/fmt.git"
    https://raw.githubusercontent.com/archlinux/svntogit-community/eed5f22503121309118457f324f949bb6a4c8f46/trunk/fix_include_system.patch
    https://raw.githubusercontent.com/archlinux/svntogit-community/eed5f22503121309118457f324f949bb6a4c8f46/trunk/use-system-libuv.patch
    https://raw.githubusercontent.com/archlinux/svntogit-community/eed5f22503121309118457f324f949bb6a4c8f46/trunk/fix-building-for-torchvision.patch
    https://raw.githubusercontent.com/archlinux/svntogit-community/eed5f22503121309118457f324f949bb6a4c8f46/trunk/benchmark-gcc11.patch
    https://raw.githubusercontent.com/archlinux/svntogit-community/eed5f22503121309118457f324f949bb6a4c8f46/trunk/xnnpack-gcc11.patch
    https://github.com/pytorch/pytorch/commit/c74c0c571880df886474be297c556562e95c00e0.patch
    https://raw.githubusercontent.com/archlinux/svntogit-community/eed5f22503121309118457f324f949bb6a4c8f46/trunk/fix_c10.patch
    https://raw.githubusercontent.com/archlinux/svntogit-community/eed5f22503121309118457f324f949bb6a4c8f46/trunk/disable_non_x86_64.patch
)
sha256sums=(
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    '557761502bbd994d9795bef46779e4b8c60ba0b45e7d60841f477d3b7f28a00a'
    'cd9ac4aaa9f946ac5eafc57cf66c5c16b3ea7ac8af32c2558fad0705411bb669'
    '689c76e89bcf403df1b4cf7ca784381967b6a6527ed6eb6d0ad6681cf789b738'
    '278fecdb45df065343f51688cc7a1665153b5189f3341a741d546b0b518eac40'
    '64833e96e47a22f88336381f25fcd73127208dc79e2074398295d88c4596c06a'
    'b106af479ef78803b39868fa1458c22c6e7fdbd13a15ebca20893e1c81c75463'
    'ba801238afcfc58a35410e54d4ca6a638c447865c0c6b38ed16917fd6d507954'
    'd3ef8491718ed7e814fe63e81df2f49862fffbea891d2babbcb464796a1bd680'
)
conflicts=(python-pytorch)
provides=(python-pytorch python-pytorch-cuda)

prepare() {
    cd "pytorch-${pkgver}"

    # generated using parse-submodules
    git submodule init
    git config submodule."third_party/pybind11".url "${srcdir}/${pkgname}"-pybind11
    git config submodule."third_party/cub".url "${srcdir}/${pkgname}"-cub
    git config submodule."third_party/eigen".url "${srcdir}/${pkgname}"-eigen-git-mirror
    git config submodule."third_party/googletest".url "${srcdir}/${pkgname}"-googletest
    git config submodule."third_party/benchmark".url "${srcdir}/${pkgname}"-benchmark
    git config submodule."third_party/protobuf".url "${srcdir}/${pkgname}"-protobuf
    git config submodule."third_party/ios-cmake".url "${srcdir}/${pkgname}"-ios-cmake
    git config submodule."third_party/NNPACK".url "${srcdir}/${pkgname}"-NNPACK
    git config submodule."third_party/gloo".url "${srcdir}/${pkgname}"-gloo
    git config submodule."third_party/NNPACK_deps/pthreadpool".url "${srcdir}/${pkgname}"-pthreadpool
    git config submodule."third_party/NNPACK_deps/FXdiv".url "${srcdir}/${pkgname}"-FXdiv
    git config submodule."third_party/NNPACK_deps/FP16".url "${srcdir}/${pkgname}"-FP16
    git config submodule."third_party/NNPACK_deps/psimd".url "${srcdir}/${pkgname}"-psimd
    git config submodule."third_party/zstd".url "${srcdir}/${pkgname}"-zstd
    git config submodule."third-party/cpuinfo".url "${srcdir}/${pkgname}"-cpuinfo
    git config submodule."third_party/python-enum".url "${srcdir}/${pkgname}"-enum34
    git config submodule."third_party/python-peachpy".url "${srcdir}/${pkgname}"-PeachPy
    git config submodule."third_party/python-six".url "${srcdir}/${pkgname}"-six
    git config submodule."third_party/onnx".url "${srcdir}/${pkgname}"-onnx
    git config submodule."third_party/onnx-tensorrt".url "${srcdir}/${pkgname}"-onnx-tensorrt
    git config submodule."third_party/sleef".url "${srcdir}/${pkgname}"-sleef
    git config submodule."third_party/ideep".url "${srcdir}/${pkgname}"-ideep
    git config submodule."third_party/nccl/nccl".url "${srcdir}/${pkgname}"-nccl
    git config submodule."third_party/gemmlowp/gemmlowp".url "${srcdir}/${pkgname}"-gemmlowp
    git config submodule."third_party/QNNPACK".url "${srcdir}/${pkgname}"-QNNPACK
    git config submodule."third_party/neon2sse".url "${srcdir}/${pkgname}"-ARM_NEON_2_x86_SSE
    git config submodule."third_party/fbgemm".url "${srcdir}/${pkgname}"-fbgemm
    git config submodule."third_party/foxi".url "${srcdir}/${pkgname}"-foxi
    git config submodule."third_party/tbb".url "${srcdir}/${pkgname}"-tbb
    git config submodule."android/libs/fbjni".url "${srcdir}/${pkgname}"-fbjni
    git config submodule."third_party/XNNPACK".url "${srcdir}/${pkgname}"-XNNPACK
    git config submodule."third_party/fmt".url "${srcdir}/${pkgname}"-fmt
    git config submodule."third_party/tensorpipe".url "${srcdir}/${pkgname}"-tensorpipe
    git config submodule."third_party/kineto".url "${srcdir}/${pkgname}"-kineto
    git submodule update --init --recursive

    # https://bugs.archlinux.org/task/64981
    patch -N torch/utils/cpp_extension.py "${srcdir}"/fix_include_system.patch

    # Use system libuv
    patch -Np1 -i "${srcdir}"/use-system-libuv.patch

    # fix https://github.com/pytorch/vision/issues/3695
    patch -Np1 -i "${srcdir}/fix-building-for-torchvision.patch"

    # GCC 11 fixes
    patch -Np1 -d third_party/benchmark <../benchmark-gcc11.patch
    patch -Np1 -d third_party/XNNPACK <../xnnpack-gcc11.patch

    # cuda 11.4 fix
    patch -Np1 <../c74c0c571880df886474be297c556562e95c00e0.patch

    # cuda 11.4.1 fix
    patch -Np1 -i "${srcdir}/fix_c10.patch"

    # remove local nccl
    rm -rf third_party/nccl/nccl

    # also remove path from nccl module, so it's not checked
    sed -e '/path = third_party\/nccl\/nccl/d' -i ./.gitmodules

    # fix build with google-glog 0.5 https://github.com/pytorch/pytorch/issues/58054
    sed -e '/namespace glog_internal_namespace_/d' -e 's|::glog_internal_namespace_||' -i c10/util/Logging.cpp

    cd ..

    export VERBOSE=1
    export PYTORCH_BUILD_VERSION="${pkgver}"
    export PYTORCH_BUILD_NUMBER=1

    # Check tools/setup_helpers/cmake.py, setup.py and CMakeLists.txt for a list of flags that can be set via env vars.
    export ATEN_NO_TEST=ON  # do not build ATen tests
    export USE_MKLDNN=ON
    export BUILD_CUSTOM_PROTOBUF=OFF
    export USE_FFMPEG=ON
    export USE_GFLAGS=ON
    export USE_GLOG=ON
    export BUILD_BINARY=ON
    export USE_OPENCV=ON
    export USE_SYSTEM_NCCL=ON
    export NCCL_VERSION=$(pkg-config nccl --modversion)
    export NCCL_VER_CODE=$(sed -n 's/^#define NCCL_VERSION_CODE\s*\(.*\).*/\1/p' /usr/include/nccl.h)
    export USE_CUPTI_SO=ON  # make sure cupti.so is used as shared lib
    export CUDAHOSTCXX=/usr/bin/g++
    export CUDA_HOST_COMPILER="${CUDAHOSTCXX}"
    export CUDA_HOME=/opt/cuda
    export USE_CUDA=1
    export USE_CUDNN=1
    export CUDNN_LIB_DIR=/usr/lib
    export CUDNN_INCLUDE_DIR=/usr/include
    export TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
    export TORCH_CUDA_ARCH_LIST="3.5;3.7;"
    export OVERRIDE_TORCH_CUDA_ARCH_LIST="${TORCH_CUDA_ARCH_LIST}"
}

build() {
    cd "${srcdir}/pytorch-${pkgver}"
    patch -Np1 -i "${srcdir}/disable_non_x86_64.patch"
    echo "add_definitions(-march=x86-64)" >> cmake/MiscCheck.cmake
    python setup.py build
}

package() {

    cd "${srcdir}/pytorch-${pkgver}"

    # Prevent setup.py from re-running CMake and rebuilding
    sed -e 's/RUN_BUILD_DEPS = True/RUN_BUILD_DEPS = False/g' -i setup.py

    python setup.py install --root="${pkgdir}"/ --optimize=1 --skip-build

    install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"

    pytorchpath="usr/lib/python3.9/site-packages/torch"
    install -d "${pkgdir}/usr/lib"

    # put CMake files in correct place
    mv "${pkgdir}/${pytorchpath}/share/cmake" "${pkgdir}/usr/lib/cmake"

    # put C++ API in correct place
    mv "${pkgdir}/${pytorchpath}/include" "${pkgdir}/usr/include"
    mv "${pkgdir}/${pytorchpath}/lib"/*.so* "${pkgdir}/usr/lib/"

    # clean up duplicates
    # TODO: move towards direct shared library dependecy of:
    #   c10, caffe2, libcpuinfo, CUDA RT, gloo, GTest, Intel MKL,
    #   NVRTC, ONNX, protobuf, libthreadpool, QNNPACK
    rm -rf "${pkgdir}/usr/include/pybind11"

    # python module is hardcoded to look there at runtime
    ln -s /usr/include "${pkgdir}/${pytorchpath}/include"
    find "${pkgdir}"/usr/lib -type f -name "*.so*" -print0 | while read -rd $'\0' _lib; do
        ln -s ${_lib#"$pkgdir"} "${pkgdir}/${pytorchpath}/lib/"
    done
}

# vim:set ts=4 sw=4 et: