File PKGBUILD of Package llvm21
pkgname=('llvm21' 'llvm21-libs')
pkgver=21.1.3
pkgrel=1
arch=('x86_64')
url="https://llvm.org/"
license=('Apache-2.0 WITH LLVM-exception')
makedepends=(
'cmake' 'ninja' 'zlib' 'zstd'
'python' 'mold'
)
options=('staticlibs' '!lto') # tools/llvm-shlib/typeids.test fails with LTO
source=(llvm-project.tar)
b2sums=('SKIP')
# 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) ;;
# used by lldb
LLVMDebuginfod) ;;
# testing libraries
LLVMTestingAnnotations | LLVMTestingSupport) ;;
# exclude static libraries
LLVM*)
continue
;;
# exclude llvm-exegesis (doesn't seem useful without libpfm)
llvm-exegesis)
continue
;;
esac
echo $target
done
}
prepare() {
cd llvm-project/llvm
mkdir build
# Remove CMake find module for zstd; breaks if out of sync with upstream zstd
rm cmake/modules/Findzstd.cmake
}
build() {
cd llvm-project/llvm/build
# Build only minimal debug info to reduce size
CFLAGS=${CFLAGS/-g /-g1 }
CXXFLAGS=${CXXFLAGS/-g /-g1 }
local cmake_args=(
CMAKE_BUILD_TYPE=Release
CMAKE_INSTALL_PREFIX=/usr/lib/llvm21
CMAKE_BUILD_WITH_INSTALL_RPATH=ON
LLVM_BINUTILS_INCDIR=/usr/include
LLVM_BUILD_DOCS=OFF
LLVM_BUILD_LLVM_DYLIB=ON
LLVM_BUILD_TESTS=OFF
LLVM_ENABLE_LIBXML2=OFF
LLVM_ENABLE_LIBEDIT=OFF
LLVM_ENABLE_BINDINGS=OFF
LLVM_ENABLE_CURL=OFF
LLVM_ENABLE_FFI=OFF
LLVM_ENABLE_RTTI=OFF
LLVM_ENABLE_SPHINX=OFF
LLVM_ENABLE_UNWIND_TABLES=OFF
LLVM_ENABLE_ASSERTIONS=OFF
LLVM_HOST_TRIPLE=$CHOST
LLVM_INCLUDE_BENCHMARKS=OFF
LLVM_INCLUDE_EXAMPLES=OFF
LLVM_INCLUDE_TESTS=OFF
LLVM_INSTALL_GTEST=OFF
LLVM_INSTALL_UTILS=ON
LLVM_LINK_LLVM_DYLIB=ON
LLVM_USE_PERF=ON
LLVM_CCACHE_BUILD=ON
CMAKE_C_FLAGS="-O3 -march=znver3 -pipe"
CMAKE_CXX_FLAGS="-O3 -march=znver3 -pipe"
LLVM_USE_LINKER=mold
)
cmake .. -GNinja "${cmake_args[@]/#/-D}"
local distribution_components=$(_get_distribution_components | paste -sd\;)
test -n "$distribution_components"
cmake_args+=(LLVM_DISTRIBUTION_COMPONENTS="$distribution_components")
cmake .. -GNinja "${cmake_args[@]/#/-D}"
ninja
}
package_llvm21() {
pkgdesc="Compiler infrastructure (LLVM 21)"
depends=('llvm21-libs' 'perl')
cd llvm-project/llvm/build
DESTDIR="$pkgdir" ninja install-distribution
# The runtime libraries go into llvm21-libs
mv -f "$pkgdir"/usr/lib/llvm21/lib/lib{LLVM,LTO,Remarks}*.so* "$srcdir"
mv -f "$pkgdir"/usr/lib/llvm21/lib/LLVMgold.so "$srcdir"
# Create versioned symlinks from /usr/bin/ to /usr/lib/llvm21/bin/
install -d "$pkgdir/usr/bin"
local _binary
for _binary in "$pkgdir"/usr/lib/llvm21/bin/*; do
local _basename=${_binary##*/}
ln -s "../lib/llvm21/bin/$_basename" "$pkgdir/usr/bin/$_basename-21"
done
install -Dm644 ../LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
package_llvm21-libs() {
pkgdesc="LLVM 21 runtime libraries"
depends=('gcc-libs' 'zlib' 'zstd')
install -d "$pkgdir/usr/lib/llvm21/lib"
cp -P \
"$srcdir"/lib{LLVM,LTO,Remarks}*.so* \
"$srcdir"/LLVMgold.so \
"$pkgdir/usr/lib/llvm21/lib/"
install -Dm644 "$srcdir/llvm-project/llvm/LICENSE.TXT" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
# vim:set ts=2 sw=2 et: