summaryrefslogtreecommitdiff
path: root/devel/rocm-llvm/MAKEPKG
diff options
context:
space:
mode:
Diffstat (limited to 'devel/rocm-llvm/MAKEPKG')
-rw-r--r--devel/rocm-llvm/MAKEPKG164
1 files changed, 164 insertions, 0 deletions
diff --git a/devel/rocm-llvm/MAKEPKG b/devel/rocm-llvm/MAKEPKG
new file mode 100644
index 0000000..0909f86
--- /dev/null
+++ b/devel/rocm-llvm/MAKEPKG
@@ -0,0 +1,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