#!/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 /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