summaryrefslogtreecommitdiff
path: root/libs/rocm-opencl/MAKEPKG
blob: 8cd541cd395529de09a58de9280e1e47c9a156d4 (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
#!/bin/mkpkg
# description: ROCm OpenCL runtime (CLR/opencl)
# url: https://github.com/ROCm/rocm-systems/tree/develop/projects/clr

name=rocm-opencl
_name=therock
version=10.0
release=2
depends=(rocm-rocr-runtime rocm-llvm ocl-icd)
makedeps=(cmake ninja python3)
source=(
    https://github.com/ROCm/rocm-systems/releases/download/$_name-$version/clr.tar.gz
    fix-os-posix-basename.awk
)
sha256sums=(
    "07caed9d726232008a2120da24f4e4bbc4998accbeadd309181fce04a9da9f99"
    "0af885dac36e4f2314f226eb7b618dbf468919c3d2d13915c9cc2635c09753d5"
)

patch() {
    # musl: POSIX basename fix
    awk -f "$SRC/fix-os-posix-basename.awk" \
        clr/rocclr/os/os_posix.cpp > os_posix.cpp.tmp
    mv os_posix.cpp.tmp clr/rocclr/os/os_posix.cpp

    # musl: remove initial-exec TLS model — breaks dlopen on musl
    sed -i 's/__attribute__((tls_model("initial-exec")))//g' \
        clr/rocclr/thread/thread.cpp \
        clr/rocclr/thread/thread.hpp \
        clr/rocclr/platform/activity.cpp \
        clr/rocclr/platform/activity.hpp
}

build() {
    export ROCM_LIBPATCH_VERSION=0

    cmake -S clr -B build -G Ninja -Wno-dev \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=/usr \
        -DCMAKE_INSTALL_LIBDIR=lib \
        -DCMAKE_INSTALL_SYSCONFDIR=/etc \
        -DCMAKE_C_COMPILER=/usr/lib/rocm/llvm/bin/clang \
        -DCMAKE_CXX_COMPILER=/usr/lib/rocm/llvm/bin/clang++ \
        -DCMAKE_PREFIX_PATH="/usr;/usr/lib/rocm/llvm" \
        -DCLR_BUILD_HIP=OFF \
        -DCLR_BUILD_OCL=ON \
        -DROCM_PATH=/usr \
        -DBUILD_TESTS=OFF

    ninja -C build
    DESTDIR=$PKG ninja -C build install

    # musl ignores ld.so.conf; the ICD below uses an absolute path
    rm -rf $PKG/etc/ld.so.conf.d

    # CLR bundles old Khronos 2.2 headers (group-writable); use opencl-headers
    rm -rf $PKG/usr/include/CL
    rmdir $PKG/usr/include

    # register the ICD (ocl-icd dlopens this absolute path)
    install -dm755 $PKG/etc/OpenCL/vendors
    printf '%s\n' /usr/lib/opencl/libamdocl64.so \
        > $PKG/etc/OpenCL/vendors/amdocl64.icd
}

signify() {
    untrusted comment: public key
    RWTZ9IduCSQ/mL8337TEUinPwT92xFEUpD92hkS7IxcOnzTt9QdpohT3
}

# vim: filetype=sh