* add llvm15

This commit is contained in:
Alexander Baldeck 2023-09-07 00:51:21 +02:00
parent cc99460b1d
commit b69550b8b3
3 changed files with 201 additions and 0 deletions

142
llvm15/PKGBUILD Normal file
View File

@ -0,0 +1,142 @@
# POWER Maintainer: Alexander Baldeck <alex.bldck@gmail.com>
# Maintainer: Evangelos Foutras <evangelos@foutrelis.com>
# Contributor: Jan "heftig" Steffens <jan.steffens@gmail.com>
pkgname=('llvm15' 'llvm15-libs')
pkgver=15.0.7
pkgrel=1
arch=(x86_64 powerpc64le powerpc64 powerpc riscv64)
url="https://llvm.org/"
license=('custom:Apache 2.0 with LLVM Exception')
makedepends=('cmake' 'ninja' 'zlib' 'zstd' 'libffi' 'libedit' 'ncurses'
'libxml2' 'python')
checkdepends=('python-psutil')
options=('staticlibs' '!lto') # https://github.com/llvm/llvm-project/issues/57740
_source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver
source=($_source_base/llvm-$pkgver.src.tar.xz{,.sig}
$_source_base/cmake-$pkgver.src.tar.xz{,.sig}
llvm-ppc64-elfv2.patch)
sha256sums=('4ad8b2cc8003c86d0078d15d987d84e3a739f24aae9033865c027abae93ee7a4'
'SKIP'
'8986f29b634fdaa9862eedda78513969fe9788301c9f2d938f4c10a3e7a3e7ea'
'SKIP'
'd3b3d13f05b17c62108345aa4ac555c656c3f8dbdb24551004b06ef652bef94d')
validpgpkeys=('474E22316ABF4785A88C6E8EA2C794A986419D8A') # Tom Stellard <tstellar@redhat.com>
# Utilizing LLVM_DISTRIBUTION_COMPONENTS to avoid
# installing static libraries; inspired by Gentoo
_get_distribution_components() {
local target
ninja -t targets | grep -Po 'install-\K.*(?=-stripped:)' | while read -r target; do
case $target in
llvm-libraries|distribution)
continue
;;
# shared libraries
LLVM|LLVMgold)
;;
# libraries needed for clang-tblgen
LLVMDemangle|LLVMSupport|LLVMTableGen)
;;
# exclude static libraries
LLVM*)
continue
;;
# exclude llvm-exegesis (doesn't seem useful without libpfm)
llvm-exegesis)
continue
;;
esac
echo $target
done
}
prepare() {
mv cmake{-$pkgver.src,}
cd llvm-$pkgver.src
mkdir build
patch -Np2 -i ${srcdir}/llvm-ppc64-elfv2.patch
}
build() {
cd llvm-$pkgver.src/build
# Build only minimal debug info to reduce size
CFLAGS=${CFLAGS/-g /-g1 }
CXXFLAGS=${CXXFLAGS/-g /-g1 }
case "${CARCH}" in
powerpc) CXXFLAGS+=' -latomic' ;;
esac
local cmake_args=(
-G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=/usr/lib/llvm15
-DCMAKE_SKIP_RPATH=ON
-DLLVM_BINUTILS_INCDIR=/usr/include
-DLLVM_BUILD_LLVM_DYLIB=ON
-DLLVM_BUILD_TESTS=ON
-DLLVM_ENABLE_BINDINGS=OFF
-DLLVM_ENABLE_FFI=ON
-DLLVM_ENABLE_RTTI=ON
-DLLVM_HOST_TRIPLE=$CHOST
-DLLVM_INCLUDE_BENCHMARKS=OFF
-DLLVM_INSTALL_UTILS=ON
-DLLVM_LINK_LLVM_DYLIB=ON
-DLLVM_USE_PERF=ON
)
cmake .. "${cmake_args[@]}"
local distribution_components=$(_get_distribution_components | paste -sd\;)
test -n "$distribution_components"
cmake_args+=(-DLLVM_DISTRIBUTION_COMPONENTS="$distribution_components")
cmake .. "${cmake_args[@]}"
ninja
}
check() {
cd llvm-$pkgver.src/build
LD_LIBRARY_PATH=$PWD/lib ninja check
}
package_llvm15() {
pkgdesc="Compiler infrastructure (LLVM 15)"
depends=('llvm15-libs' 'perl')
cd llvm-$pkgver.src/build
DESTDIR="$pkgdir" ninja install-distribution
# The runtime libraries go into llvm15-libs
mv -f "$pkgdir"/usr/lib/llvm15/lib/libLLVM-{15,$pkgver}.so "$srcdir/"
mv -f "$pkgdir"/usr/lib/llvm15/lib/LLVMgold.so "$srcdir/"
# Create versioned symlinks from /usr/bin/ to /usr/lib/llvm15/bin/
install -d "$pkgdir/usr/bin"
local _binary
for _binary in "$pkgdir"/usr/lib/llvm15/bin/*; do
local _basename=${_binary##*/}
ln -s ../lib/llvm15/bin/$_basename "$pkgdir/usr/bin/$_basename-15"
done
install -Dm644 ../LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
package_llvm15-libs() {
pkgdesc="LLVM 15 runtime libraries"
depends=('gcc-libs' 'zlib' 'libffi' 'libedit' 'ncurses' 'libxml2')
install -d "$pkgdir/usr/lib/llvm15/lib"
cp -P "$srcdir"/libLLVM-{15,$pkgver}.so "$pkgdir/usr/lib/"
ln -s ../../libLLVM-15.so "$pkgdir/usr/lib/llvm15/lib/libLLVM-15.so"
ln -s ../../libLLVM-15.so "$pkgdir/usr/lib/llvm15/lib/libLLVM-$pkgver.so"
cp -P "$srcdir"/LLVMgold.so "$pkgdir/usr/lib/llvm15/lib/"
install -Dm644 "$srcdir/llvm-$pkgver.src/LICENSE.TXT" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
# vim:set ts=2 sw=2 et:

View File

@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFrqgT0BEAC7xo0WH+eNrLlU5LrCk59KmImn1abFcmWNd8kYr5XfqmJKyVqo
EY7A/yRjf+Yn1621EDkpKPjbql7q7MlZMpqKVdOWKWgmhvz08IOKJxaIABd/iIRT
FwhIvB68YjtmzcoOJRi1wLnwuG55fJ9E69HyZ33jgAlRaWV3bE/YyszoTlZriUOE
RbzC5WzX004cE9evlrr+YLt5Y6z7tntOdSXPLyGOFAO5LYMsHsEdi2JBYWrjlslG
6iJr5iEt9v442PrJ79YYbu5QWe/6APRWtI3AtKBp7y250oon2lbj+bIVD7U9fOBB
n/Frqx54UN22sJycET63hgYW4pIjIi5zq+FF15aU+ZqBdtNltoX4hEN7wlDpuNc0
ezVu2Z8hdt8thpjiFUioTQ1t3RmsN6N548VwxmHdoYpAmiZqPIYBYvm85JB7S/3h
RLuoeGxufBhXGCpnG8ghTOGtbbdanuLB/UROFXTdyZbTCBN5S6jvwkPSaHG7H35Z
3fazMriTXwL1RGAbKITSWhDe5dXy/yOInWe8emJx+35vwQYCB2L4S8wRyQyRw6x4
YoXCscW041DUMBX2CC7SjMCcmAC39UX1c3GbTpS3rkJR9cmXt50nviMnKpIwlIPd
ZYhmxKifwTJ70+c4GVK2o0MG9bTYvpYhLnYxv6iJCfgmT40E+qkDSzSoZwARAQAB
tCJUb20gU3RlbGxhcmQgPHRzdGVsbGFyQHJlZGhhdC5jb20+iQJWBBMBCABAAhsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AWIQRHTiIxar9HhaiMbo6ix5SphkGd
igUCYJMrXwUJCWsRIgAKCRCix5SphkGdir/GD/4zT43DAD9GU6VHGFeOphisH2kN
IORVDEn8T+7iR7XLY9nVHJDxqQPUgB/gKYibrVYE0KVqjSSj3dr1cTorubMsDYgy
gjjJSroOZupYC1+Yd8wb0jfdB6Z+CNKh0QN64BDS6D7P1GAcaIbxTyITjoz6jhyF
Lkj4QCLiGWsMbapQA7MB4ij8t/AKORp1kW+tMyn6wfjfmYjrYOyE65UxmJtrV9Fv
YllBt9oCAP0V9qphT6C6wxarJOuhIq9BoZOYKaUa5qRJfzNZagPG8ZalraP/MFfM
g20hLuX5jN1jdzlHEgNt5WCYuI+uekOIUuT1PiFrmWwYXKWMAxnsVefpv8kmW8LR
2TCG+ALvnYCRwr0Ykqh4KZcn4mpsV+QnwNAyVR6Bl6QTsPGtoHkU9Pg640mzkvgg
w55X5kC3x4IxLskD1PFdFpW9LSRL5zz6jT5gL9Eb+zAuKpg/8w64MLnXaX69cR/p
1rrNqZUfBOqf8fbrzy296ZSfeK4tV414iT8j76swQMAONGXoNKxO7E1cAgtxPUWW
u3R4de3sZHGXTiEv70UNRv1TWjlVMK3Av7yDIGUnt+2wi3jilYjLWnAIgSQ46CDQ
tUCdhdwmFcJLa3IJrs/UvHtlq6nU1sIo4wqJwfNBMHx0JZc+bKf41OgYL9ve11F5
IKZNcvom0Pf7MkUKRQ==
=Kuwb
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,30 @@
This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
need this because unlike most distros we use ELFv2 for both glibc and musl
on big endian ppc64.
diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
index 0634833e..b7cbc2e7 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
switch (TT.getArch()) {
case Triple::ppc64le:
- return PPCTargetMachine::PPC_ABI_ELFv2;
case Triple::ppc64:
- return PPCTargetMachine::PPC_ABI_ELFv1;
+ return PPCTargetMachine::PPC_ABI_ELFv2;
default:
return PPCTargetMachine::PPC_ABI_UNKNOWN;
}
diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
index 8b1cf6b5..296a2afa 100644
--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
@@ -1,4 +1,5 @@
-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2