aboutsummarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 0f20c4f1210162e652e5edb20f3a208c52651841 (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
# Maintainer: wuxxin <wuxxin@gmail.com>
# Contributor: Lubosz Sarnecki @lubosz
# Based on python-torchvision; original contributors:
# Contributor: Christian Heusel
# Contributor: Konstantin Gizdov
# Contributor: Torsten Keßler <tpkessler@archlinux.org>
# Contributor: Konstantin Gizdov <arch at kge dot pw>
# Contributor: Butui Hu <hot123tea123@gmail.com>
# Contributor: Chih-Hsuan Yen <yan12125@archlinux.org>
# Contributor: Jean Lucas <jean@4ray.co>
# Based on python-torchvision-git; original contributors:
# Contributor: Stephen Zhang <zsrkmyn at gmail dot com>

_pkgname='vision'
pkgbase='python-torchvision-rocm'
pkgname=('torchvision-rocm' 'python-torchvision-rocm')
pkgver=0.28.0
pkgrel=1
pkgdesc='Datasets, transforms, and models specific to computer vision (with ROCm/HIP support)'
arch=('x86_64')
url='https://github.com/pytorch/vision'
license=('BSD-3-Clause')
depends=(
    numactl
    python-numpy
    python-pillow
    python-requests
    python-scipy
    python-sympy
    python-pytorch-rocm
    ffmpeg
    libjpeg-turbo
    libpng
)
makedepends=(
    cmake
    ninja
    python-setuptools
    rocm-hip-sdk
    rocm-toolchain
    qt6-base
    miopen-hip
)
source=(
    "${_pkgname}-${pkgver}.tar.gz::https://github.com/pytorch/vision/archive/v${pkgver}.tar.gz"
    "glog_use_glog_export_none.patch"
)
sha256sums=('ecc4451241c8eeadc0c88213bd65c7932c9622d1d0034254b938f25362283ee9'
            'a611dadf2e125a7b73a026bac05c8327e776c24d4876f1b0bdfc9249c6f4fe37')
prepare() {
    cd "${srcdir}/${_pkgname}-${pkgver}"

    patch -N -i "${srcdir}/glog_use_glog_export_none.patch"
    # patch -p1 -i "${srcdir}"/ffmpeg-8.patch
}

build() {
    cd "${srcdir}/${_pkgname}-${pkgver}"

    if test -e build; then rm -rf build; fi
    mkdir build

    # populate build architecture list similar to pkg arch:python-pytorch
    # python-pytorch 2.10.0-1: gfx950 lacks support for 128 bit atomics
    _PYTORCH_ROCM_ARCH="$(rocm-supported-gfx -e gfx950)"
    if test -n "$GPU_TARGETS"; then _PYTORCH_ROCM_ARCH="$GPU_TARGETS"; fi
    if test -n "$AMDGPU_TARGETS"; then _PYTORCH_ROCM_ARCH="$AMDGPU_TARGETS"; fi
    if test -n "$PYTORCH_ROCM_ARCH"; then _PYTORCH_ROCM_ARCH="$PYTORCH_ROCM_ARCH"; fi
    export PYTORCH_ROCM_ARCH="${_PYTORCH_ROCM_ARCH}"
    echo "building for PYTORCH_ROCM_ARCH=$PYTORCH_ROCM_ARCH"

    # if ROCM_HOME is not set, hardcode ROCM_HOME, ROCM_PATH, HIP_ROOT_DIR to /opt/rocm
    export ROCM_HOME="${ROCM_HOME:-/opt/rocm}"
    export ROCM_PATH="$ROCM_HOME"
    export HIP_ROOT_DIR="$ROCM_HOME"

    # -fcf-protection is not supported by HIP/clang
    # https://rocm.docs.amd.com/projects/llvm-project/en/latest/reference/rocmcc.html#support-status-of-other-clang-options
    CXXFLAGS+=" -fcf-protection=none"

    cmake \
        -G Ninja \
        -Wno-dev \
        -B build \
        -DCMAKE_INSTALL_PREFIX=/usr \
        -DCMAKE_BUILD_TYPE=None \
        -DCMAKE_CXX_FLAGS="${CXXFLAGS} -O3" \
        -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \
        -DWITH_PNG=ON \
        -DWITH_JPEG=ON \
        -DCMAKE_POLICY_VERSION_MINIMUM=3.5

    cmake --build build

    TORCHVISION_INCLUDE=${srcdir} \
        TORCHVISION_LIBRARY=/usr/lib \
        TORCHVISION_USE_NVJPEG=0 \
        TORCHVISION_USE_VIDEO_CODEC=0 \
        TORCHVISION_USE_FFMPEG=1 \
        python setup.py build
}

package_torchvision-rocm() {
    pkgdesc='Datasets, transforms, and models specific to computer vision (C++ library only, with ROCM support)'
    provides+=(torchvision torchvision=${pkgver})
    conflicts+=(torchvision)

    cd "${srcdir}/${_pkgname}-${pkgver}"
    DESTDIR="${pkgdir}" cmake --install build
    install -m644 -Dt "$pkgdir/usr/share/licenses/$pkgname" LICENSE
}

package_python-torchvision-rocm() {
    pkgdesc='Datasets, transforms, and models specific to computer vision (with ROCM support)'
    provides+=(python-torchvision python-torchvision=${pkgver})
    conflicts+=(python-torchvision)

    cd "${srcdir}/${_pkgname}-${pkgver}"
    TORCHVISION_INCLUDE=${srcdir} \
        TORCHVISION_LIBRARY=/usr/lib \
        FORCE_CUDA=1 \
        python setup.py install --root="${pkgdir}" --optimize=1 --skip-build
    install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}"
}