From 524a304088db0a487c4e861153c401eb1730c912 Mon Sep 17 00:00:00 2001 From: kth5 Date: Sat, 16 Nov 2024 22:08:38 +0100 Subject: [PATCH] * update rocm-llvm to 6.2.2-2 --- rocm-llvm/.SRCINFO | 64 ++++++++++++++++++ rocm-llvm/.nvchecker.toml | 5 ++ rocm-llvm/PKGBUILD | 106 +++++++++++++++++++++--------- rocm-llvm/clang-ppc64-elfv2.patch | 46 +++++++------ 4 files changed, 170 insertions(+), 51 deletions(-) create mode 100644 rocm-llvm/.SRCINFO create mode 100644 rocm-llvm/.nvchecker.toml diff --git a/rocm-llvm/.SRCINFO b/rocm-llvm/.SRCINFO new file mode 100644 index 0000000000..1638e2f4af --- /dev/null +++ b/rocm-llvm/.SRCINFO @@ -0,0 +1,64 @@ +pkgbase = rocm-llvm + pkgver = 6.2.2 + pkgrel = 2 + url = https://rocm.docs.amd.com/en/latest/reference/rocmcc.html + arch = x86_64 + arch = powerpc64le + arch = powerpc64 + arch = riscv64 + makedepends = git + makedepends = cmake + makedepends = python + makedepends = ninja + makedepends = rocm-core + makedepends = rocm-cmake + makedepends = perl + makedepends = gcc-libs + makedepends = zlib + makedepends = zstd + makedepends = libffi + makedepends = libedit + makedepends = ncurses + makedepends = libxml2 + makedepends = patchelf + options = !debug + options = staticlibs + options = !lto + source = rocm-llvm::git+https://github.com/ROCm/llvm-project#tag=rocm-6.2.2 + source = llvm-ppc64-elfv2.patch + source = clang-ppc64-dynamic-linker-path.patch + source = clang-ppc64-elfv2.patch + sha256sums = ba31afb2b041b766e2c59ad03328363b549eefbe7f1e9b235a70181538165d3e + sha256sums = 8c4e8db0b80b1a86f8cff9aa678b70458503bc8926ecc41e0df953ea14ab3559 + sha256sums = 654b9eafcd20125319b3c319ab6674a940ddef400821c80813c16011ef8b6086 + sha256sums = 8483b3bfaa31bee7a074bc83a1c7b7fec4cc6579836edb2802348b1340df3e41 + +pkgname = rocm-llvm + pkgdesc = Radeon Open Compute - LLVM toolchain (llvm, clang, lld) + license = Apache-2.0 WITH LLVM-exception + depends = rocm-core + depends = perl + depends = gcc-libs + depends = zlib + depends = zstd + depends = libffi + depends = libedit + depends = ncurses + depends = libxml2 + +pkgname = rocm-device-libs + pkgdesc = AMD specific device-side language runtime libraries + license = NCSA + depends = rocm-core + +pkgname = comgr + pkgdesc = AMDGPU GPU Code Object Manager + license = NCSA + depends = glibc + depends = gcc-libs + depends = zstd + depends = zlib + depends = ncurses + depends = rocm-core + depends = rocm-llvm + depends = rocm-device-libs diff --git a/rocm-llvm/.nvchecker.toml b/rocm-llvm/.nvchecker.toml new file mode 100644 index 0000000000..0c129bbc93 --- /dev/null +++ b/rocm-llvm/.nvchecker.toml @@ -0,0 +1,5 @@ +[rocm-llvm] +source = 'github' +github = 'ROCm/llvm-project' +use_latest_release = true +prefix = 'rocm-' diff --git a/rocm-llvm/PKGBUILD b/rocm-llvm/PKGBUILD index cbc698ebf0..1437b0b214 100644 --- a/rocm-llvm/PKGBUILD +++ b/rocm-llvm/PKGBUILD @@ -2,41 +2,31 @@ # Maintainer: Torsten Keßler # Contributor: acxz -pkgname=rocm-llvm -pkgdesc='Radeon Open Compute - LLVM toolchain (llvm, clang, lld)' -pkgver=6.0.2 -pkgrel=1.1 +pkgbase=rocm-llvm +pkgname=(rocm-llvm rocm-device-libs comgr) +pkgver=6.2.2 +pkgrel=2 arch=(x86_64 powerpc64le powerpc64 riscv64) -url='https://rocm.docs.amd.com/en/latest/reference/rocmcc/rocmcc.html' -license=('Apache-2.0 WITH LLVM-exception') -makedepends=('cmake' 'python' 'ninja') -_git='https://github.com/ROCm/llvm-project' -source=("${pkgname}-${pkgver}.tar.gz::$_git/archive/rocm-$pkgver.tar.gz" - "${pkgname}-fix-segfault.patch" +url='https://rocm.docs.amd.com/en/latest/reference/rocmcc.html' +makedepends=('git' 'cmake' 'python' 'ninja' 'rocm-core' 'rocm-cmake' 'perl' + 'gcc-libs' 'zlib' 'zstd' 'libffi' 'libedit' 'ncurses' 'libxml2' 'patchelf') +source=("$pkgbase::git+https://github.com/ROCm/llvm-project#tag=rocm-$pkgver" "llvm-ppc64-elfv2.patch" "clang-ppc64-dynamic-linker-path.patch" - "clang-ppc64-elfv2.patch" - "rocm-llvm-riscv-uleb128.patch") -sha256sums=('7d35acc84de1adee65406f92a369a30364703f84279241c444cd93a48c7eeb76' - '4d3f198c5422e9987f442c20963223c39b1548ffa00b6c9db81af5070278ce03' + "clang-ppc64-elfv2.patch") +sha256sums=('ba31afb2b041b766e2c59ad03328363b549eefbe7f1e9b235a70181538165d3e' '8c4e8db0b80b1a86f8cff9aa678b70458503bc8926ecc41e0df953ea14ab3559' '654b9eafcd20125319b3c319ab6674a940ddef400821c80813c16011ef8b6086' - 'f80157e9ef2bfea9dcb8560e17b76b7e4e9de72bab0c83b1802734ff83293411' - 'a4dc17071cfc8248f33c74dca14df715710b375e8e1aefc46c4e505334f4bf9b') + '8483b3bfaa31bee7a074bc83a1c7b7fec4cc6579836edb2802348b1340df3e41') options=(!debug staticlibs !lto) -_dirname="$(basename "$_git")-$(basename "${source[0]}" .tar.gz)" prepare() { - cd "$_dirname" - patch -Np1 -i ../"${pkgname}-fix-segfault.patch" - patch -Np1 -i ../"${pkgname}-riscv-uleb128.patch" + cd ${srcdir}/${pkgbase}/llvm + patch -Np2 -i ${srcdir}/llvm-ppc64-elfv2.patch - cd ${srcdir}/${_dirname}/llvm - patch -Np2 -i ${srcdir}/llvm-ppc64-elfv2.patch - - cd ${srcdir}/${_dirname}/clang - patch -Np1 -i ${srcdir}/clang-ppc64-elfv2.patch - patch -Np2 -i ${srcdir}/clang-ppc64-dynamic-linker-path.patch + cd ${srcdir}/${pkgbase}/clang + patch -Np0 -i ${srcdir}/clang-ppc64-elfv2.patch + patch -Np2 -i ${srcdir}/clang-ppc64-dynamic-linker-path.patch } build() { @@ -46,10 +36,14 @@ build() { x86_64) _target=X86 ;; esac + # Build only minimal debug info to reduce size + CFLAGS+=' -g1' + CXXFLAGS+=' -g1' + local cmake_args=( -G Ninja -B build - -S "$_dirname/llvm" + -S "$pkgbase/llvm" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX='/opt/rocm/lib/llvm' -DLLVM_HOST_TRIPLE=$CHOST @@ -73,25 +67,77 @@ build() { -DCLANG_INCLUDE_TESTS=OFF -DLLVM_BINUTILS_INCDIR=/usr/include ) - cmake "${cmake_args[@]}" cmake --build build + + local cmake_device_libs_args=( + -Wno-dev + -S "$pkgbase/amd/device-libs" + -B build-device-libs + -D CMAKE_BUILD_TYPE=None + -D CMAKE_INSTALL_PREFIX=/opt/rocm + -D CMAKE_PREFIX_PATH="$srcdir/build" + ) + cmake "${cmake_device_libs_args[@]}" + cmake --build build-device-libs + + local cmake_comgr_args=( + -Wno-dev + -S "$pkgbase/amd/comgr" + -B build-comgr + -D CMAKE_BUILD_TYPE=None + -D CMAKE_INSTALL_PREFIX=/opt/rocm + -D BUILD_TESTING=OFF + -D CMAKE_PREFIX_PATH="$srcdir/build;$srcdir/build-device-libs" + ) + cmake "${cmake_comgr_args[@]}" + cmake --build build-comgr } -package() { +package_rocm-llvm() { + pkgdesc='Radeon Open Compute - LLVM toolchain (llvm, clang, lld)' + license=('Apache-2.0 WITH LLVM-exception') + depends=('rocm-core' 'perl' 'gcc-libs' 'zlib' 'zstd' 'libffi' 'libedit' + 'ncurses' 'libxml2') + DESTDIR="$pkgdir" cmake --install build # Provide symlink to old LLVM location, pre ROCm 6.0.0 ln -s /opt/rocm/lib/llvm "$pkgdir/opt/rocm/llvm" + # Fix rpath to avoid error when running amdclang and friends + # (error while loading shared libraries: libunwind.so.1: cannot open shared object file: No such file or directory) + patchelf --set-rpath '$ORIGIN' "$pkgdir/opt/rocm/lib/llvm/lib/libc++abi.so" + # https://bugs.archlinux.org/task/28479 install -d "$pkgdir/opt/rocm/lib/llvm/lib/bfd-plugins" ln -s /opt/rocm/lib/llvm/lib/LLVMgold.so "$pkgdir/opt/rocm/lib/llvm/lib/bfd-plugins/LLVMgold.so" - cd "$_dirname" + cd "$pkgbase" install -Dm644 llvm/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/llvm-LICENSE" install -Dm644 clang/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/clang-LICENSE" install -Dm644 clang-tools-extra/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/clang-tools-extra-LICENSE" install -Dm644 compiler-rt/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/compiler-rt-LICENSE" install -Dm644 lld/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/lld-LICENSE" } + +package_rocm-device-libs() { + pkgdesc='AMD specific device-side language runtime libraries' + license=('NCSA') + depends=('rocm-core') + + DESTDIR="$pkgdir" cmake --install build-device-libs + cd "$pkgbase/amd/device-libs" + install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_comgr() { + pkgdesc='AMDGPU GPU Code Object Manager' + license=('NCSA') + depends=('glibc' 'gcc-libs' 'zstd' 'zlib' 'ncurses' + 'rocm-core' 'rocm-llvm' 'rocm-device-libs') + + DESTDIR="$pkgdir" cmake --install build-comgr + cd "$pkgbase/amd/comgr" + install -Dm644 LICENSE.txt "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/rocm-llvm/clang-ppc64-elfv2.patch b/rocm-llvm/clang-ppc64-elfv2.patch index fc5c69a129..1c338659bc 100644 --- a/rocm-llvm/clang-ppc64-elfv2.patch +++ b/rocm-llvm/clang-ppc64-elfv2.patch @@ -1,24 +1,6 @@ ---- clang-16.0.4.src/lib/Basic/Targets/PPC.h.orig 2023-05-24 14:28:01.176621490 +0200 -+++ clang-16.0.4.src/lib/Basic/Targets/PPC.h 2023-05-24 14:29:38.414872784 +0200 -@@ -425,14 +425,10 @@ - LongDoubleFormat = &llvm::APFloat::IEEEdouble(); - } else if ((Triple.getArch() == llvm::Triple::ppc64le)) { - DataLayout = "e-m:e-i64:64-n32:64"; -- ABI = "elfv2"; - } else { - DataLayout = "E-m:e-i64:64-n32:64"; -- if (Triple.isPPC64ELFv2ABI()) -- ABI = "elfv2"; -- else -- ABI = "elfv1"; - } -+ ABI = "elfv2"; - - if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) { - LongDoubleWidth = LongDoubleAlign = 64; ---- clang-16.0.4.src/lib/Driver/ToolChains/Clang.cpp.orig 2023-05-24 14:32:51.659489490 +0200 -+++ clang-16.0.4.src/lib/Driver/ToolChains/Clang.cpp 2023-05-24 14:33:30.235618677 +0200 -@@ -2000,13 +2000,7 @@ +--- lib/Driver/ToolChains/Clang.cpp.orig 2024-03-13 17:42:20.994438710 +0100 ++++ lib/Driver/ToolChains/Clang.cpp 2024-03-13 17:42:54.503144176 +0100 +@@ -2029,13 +2029,7 @@ const char *ABIName = nullptr; if (T.isOSBinFormatELF()) { switch (getToolChain().getArch()) { @@ -33,3 +15,25 @@ case llvm::Triple::ppc64le: ABIName = "elfv2"; break; +--- lib/Basic/Targets/PPC.h.orig 2024-03-13 17:38:36.204536553 +0100 ++++ lib/Basic/Targets/PPC.h 2024-03-13 17:41:36.426819177 +0100 +@@ -424,18 +424,16 @@ + LongDoubleFormat = &llvm::APFloat::IEEEdouble(); + } else if ((Triple.getArch() == llvm::Triple::ppc64le)) { + DataLayout = "e-m:e-Fn32-i64:64-n32:64"; +- ABI = "elfv2"; + } else { + DataLayout = "E-m:e"; + if (Triple.isPPC64ELFv2ABI()) { +- ABI = "elfv2"; + DataLayout += "-Fn32"; + } else { +- ABI = "elfv1"; + DataLayout += "-Fi64"; + } + DataLayout += "-i64:64-n32:64"; + } ++ ABI = "elfv2"; + + if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) { + LongDoubleWidth = LongDoubleAlign = 64;