blob: 0909f86ab728fac3813b52d884a938e18707a5b3 (
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
|
#!/bin/mkpkg
# description: AMD ROCm LLVM fork - clang/lld, openmp/offload, device-libs, comgr, hipcc
# url: https://github.com/ROCm/llvm-project
name=rocm-llvm
_name=therock
version=10.0
release=1
depends=(llvm libffi zlib zstd libedit ncurses)
makedeps=(cmake ninja python3)
source=(https://github.com/ROCm/llvm-project/archive/refs/tags/$_name-$version.tar.gz)
sha256sums=(
"92dcfe3d2e1ca52b460c7f168d8d74e47cd17370fa8bdffb919174115f94ab0f"
)
patch() {
# libc++ provides std::filesystem; libstdc++fs does not exist here
sed -i 's/libstdc++fs\.so//' \
llvm-project-$_name-$version/amd/hipcc/CMakeLists.txt
# 'uint' is a glibc/BSD typedef; the callers pass uint32_t*
sed -i 's/(uint \*rc/(uint32_t *rc/' \
llvm-project-$_name-$version/offload/plugins-nextgen/common/src/EmissaryPrint.cpp
}
build() {
cd llvm-project-$_name-$version
_src=$PWD
_llvm=$_src/build
# --- LLVM / clang / lld / compiler-rt / openmp / offload -> /usr/lib/rocm/llvm
cmake -S llvm -B build -G Ninja -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/lib/rocm/llvm \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON \
-DLLVM_ENABLE_LLD=ON \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" \
-DLLVM_HOST_TRIPLE=x86_64-unknown-linux-musl \
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-unknown-linux-musl \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_ZLIB=ON \
-DLLVM_ENABLE_ZSTD=ON \
-DLLVM_ENABLE_LIBEDIT=ON \
-DLLVM_BUILD_LLVM_DYLIB=OFF \
-DLLVM_LINK_LLVM_DYLIB=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DLLVM_BUILD_EXAMPLES=OFF \
-DCLANG_BUILD_EXAMPLES=OFF \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
-DCLANG_DEFAULT_CXX_STDLIB=libc++ \
-DCLANG_DEFAULT_RTLIB=compiler-rt \
-DCLANG_DEFAULT_UNWINDLIB=libunwind \
-DCLANG_DEFAULT_LINKER=lld \
-DCLANG_ENABLE_AMDCLANG=ON \
-DLLVM_INSTALL_UTILS=OFF \
-DLLVM_INCLUDE_UTILS=ON \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;openmp;offload" \
-DLLVM_RUNTIME_TARGETS="default;amdgcn-amd-amdhsa" \
-DRUNTIMES_amdgcn-amd-amdhsa_LLVM_ENABLE_RUNTIMES=openmp \
-DLIBOMPTARGET_PLUGINS_TO_BUILD=amdgpu \
-DRUNTIMES_amdgcn-amd-amdhsa_AMDDeviceLibs_DIR=$_src/build-devlibs/lib/cmake/AMDDeviceLibs \
-DRUNTIMES_amdgcn-amd-amdhsa_CMAKE_C_FLAGS="-O2" \
-DRUNTIMES_amdgcn-amd-amdhsa_CMAKE_CXX_FLAGS="-O2" \
-DRUNTIMES_amdgcn-amd-amdhsa_CMAKE_EXE_LINKER_FLAGS="" \
-DRUNTIMES_amdgcn-amd-amdhsa_CMAKE_SHARED_LINKER_FLAGS="" \
-DOPENMP_ENABLE_LIBOMPTARGET=ON \
-DLIBOMP_OMPT_SUPPORT=ON \
-DLIBOMP_INSTALL_ALIASES=OFF \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
-DCOMPILER_RT_BUILD_CTX_PROFILE=OFF \
-DCOMPILER_RT_BUILD_ORC=OFF
# stage 1: compiler, tools and compiler-rt builtins (no openmp/offload yet)
ninja -C build llvm-libraries clang lld llvm-link opt llvm-objcopy llvm-ar builtins
# --- device-libs -> /usr/lib/rocm/amdgcn/bitcode
# built before the runtimes: the OpenMP GPU runtime links ocml/ockl
cmake -S amd/device-libs -B build-devlibs -G Ninja -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/lib/rocm \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_INSTALL_DATADIR=share \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_PREFIX_PATH=$_llvm
ninja -C build-devlibs
# stage 2: everything else, incl. compiler-rt, openmp, offload,
# amdgcn device runtime (finds device-libs in build-devlibs)
ninja -C build
# --- comgr -> /usr/lib
cmake -S amd/comgr -B build-comgr -G Ninja -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_PREFIX_PATH="$_llvm;$_src/build-devlibs" \
-DClang_DIR=$_llvm/lib/cmake/clang \
-DLLD_DIR=$_llvm/lib/cmake/lld \
-DBUILD_TESTING=OFF
ninja -C build-comgr
# --- hipcc / hipconfig -> /usr/lib/rocm/bin
cmake -S amd/hipcc -B build-hipcc -G Ninja -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/lib/rocm \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++
ninja -C build-hipcc
# --- install everything
for b in build build-devlibs build-comgr build-hipcc; do
DESTDIR=$PKG ninja -C $b install
done
# hipcc: Windows .bat wrappers are not installed; drop dangling links
rm -rf $PKG/usr/lib/rocm/hip
# flang is not built; these links would run clang as a Fortran driver
rm -f $PKG/usr/lib/rocm/llvm/bin/flang \
$PKG/usr/lib/rocm/llvm/bin/amdflang
# hipcc expects <root>/lib/llvm/bin and HIP under the same root;
# here clang is in /usr/lib/rocm/llvm/bin and HIP (rocm-hipamd) in /usr.
# clang itself also reads HIP_PATH and ROCM_PATH from the environment.
install -d $PKG/usr/bin
for t in hipcc hipconfig; do
printf '%s\n' \
'#!/bin/sh' \
': ${HIP_PATH:=/usr}' \
': ${ROCM_PATH:=/usr/lib/rocm}' \
': ${HIP_CLANG_PATH:=/usr/lib/rocm/llvm/bin}' \
': ${HIP_LIB_PATH:=/usr/lib}' \
': ${HIPCC_LINK_FLAGS_APPEND:=-unwindlib=libunwind}' \
'export HIP_PATH ROCM_PATH HIP_CLANG_PATH HIP_LIB_PATH HIPCC_LINK_FLAGS_APPEND' \
"exec /usr/lib/rocm/bin/$t \"\$@\"" \
> $PKG/usr/bin/$t
chmod 755 $PKG/usr/bin/$t
done
}
signify() {
untrusted comment: public key
RWTZ9IduCSQ/mL8337TEUinPwT92xFEUpD92hkS7IxcOnzTt9QdpohT3
}
# vim: filetype=sh
|