You are not logged in.
PKGBUILD
pkgbase=llvm-project
pkgname=( 'llvm' 'mlir' 'llvm-libs' 'flang' 'clang' 'lld' 'lldb' 'libclc' 'polly' 'bolt1' 'libc++' 'libc++abi' 'libunwind1' 'openmp' 'offload' 'pstl' 'llvmlibc' 'compiler-rt')
pkgver=19.1.7
pkgrel=1
arch=('x86_64')
url="https://llvm.org/"
license=('Apache-2.0 WITH LLVM-exception')
makedepends=('cmake' 'ninja' 'zlib' 'zstd' 'curl' 'libffi' 'libedit' 'libxml2'
'python-setuptools' 'python-psutil' 'pybind11' 'python-sphinx' 'python-sphinx-furo'
'python-myst-parser' 'pybind11' 'nanobind' 'lua' 'ocaml')
source=("https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/llvm-project-$pkgver.src.tar.xz"
"fix-libc-build. Patch")
sha512sums=('c7d63286d662707a9cd54758c9e3aaf52794a91900c484c4a6efa62d90bc719d5e7a345e4192feeb0c9fd11c82570d64677c781e5be1d645556b6aa018e47ec8'
'a4a2dc1528f02625b34daa11feafb5f110d9f310b6573ec9b4f61202ed2f9081a442d6bc92db8139dfe052b5494636a7df4bf6021efaf7d891b50366832e76a9')
options=(!lto !debug)
prepare(){
cd llvm-project-$pkgver.src
git apply ../fix-libc-build.patch
}
build() {
cmake \
-S llvm-project-$pkgver.src/llvm \
-B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_RPATH=ON \
-DCMAKE_SKIP_RPATH=ON \
-DCMAKE_INSTALL_DOCDIR=/usr/share/doc \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_PREFIX_PATH=/opt/cuda \
-DLLVM_USE_PERF=ON \
-DLLVM_BINUTILS_INCDIR=/usr/include \
-DLLVM_ENABLE_PROJECTS="bolt;clang;clang-tools-extra;cross-project-tests;lld;lldb;libclc;polly;mlir;flang" \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind;compiler-rt;openmp;offload;pstl;libc" \
-DLLVM_TARGETS_TO_BUILD=all \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=all \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_BUILD_DOCS=ON \
-DLLVM_BUILD_TESTS=ON \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_ENABLE_BINDINGS=ON \
-DLLVM_ENABLE_CURL=ON \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_OCAMLDOC=ON \
-DLLVM_ENABLE_SPHINX=ON \
-DLLVM_HOST_TRIPLE=$CHOST \
-DLLVM_INCLUDE_BENCHMARKS=ON \
-DLLVM_INSTALL_GTEST=ON \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_DYLIB_COMPONENTS=all \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_USE_PERF=ON \
-DLLVM_ENABLE_ZLIB=ON \
-DLLVM_ENABLE_ZSTD=ON \
-DLLVM_ENABLE_LIBEDIT=ON \
-DLLVM_ENABLE_LIBXML2=ON \
-DLLVM_ENABLE_LIBPFM=ON \
-DCLANG_DEFAULT_LINKER=lld \
-DFLANG_DEFAULT_LINKER=lld \
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
-DMLIR_ENABLE_BINDINGS_PYTHON=ON \
-DLIBUNWIND_INSTALL_INCLUDE_DIR="/usr/include/unwind" \
-DLIBUNWIND_USE_COMPILER_RT=ON \
-DLIBCXXABI_USE_COMPILER_RT=ON \
-DLIBCXX_INSTALL_MODULES=ON \
-DLIBCXX_USE_COMPILER_RT=ON \
-DCOMPILER_RT_CXX_LIBRARY=libcxx \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
-DLLVM_LIBC_FULL_BUILD=ON \
-DLLVM_LIBC_GPU_BUILD=ON \
-DSPHINX_WARNINGS_AS_ERRORS=OFF
ninja -C build -j 16
}
_python_optimize() {
python -m compileall "$@"
python -O -m compileall "$@"
python -OO -m compileall "$@"
}
package_llvm() {
pkgdesc="Compiler infrastructure"
depends=('curl' 'perl')
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
*bolt*|*Polly*|*BOLT*)
continue
;;
llvm*)
selected_targets+=( "install-$target" )
;;
LLVM*)
selected_targets+=( "install-$target" )
;;
cmake-exports)
selected_targets+=( "install-$target" )
;;
FileCheck|UnicodeNameMappingGenerator|bugpoint|count|dsymutil)
selected_targets+=( "install-$target" )
;;
lli*|llc|not|obj2yaml|opt|reduce*|san*|split*|verify*|yaml*)
selected_targets+=( "install-$target" )
;;
docs-llvm*)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
rm -f $pkgdir/usr/lib/lib{LLVM,LTO,Remarks}*.so*
rm -f $pkgdir/usr/lib/LLVMgold*.so*
rm -f $pkgdir/usr/lib/libPolly*.a
rm -f $pkgdir/usr/lib/libLLVMBOLT*.a*
rm -f $pkgdir/usr/lib/libLibcTableGenUtil.a
# Include lit for running lit-based tests in other projects
pushd llvm-project-$pkgver.src/llvm/utils/lit
python3 setup.py install --root="$pkgdir" -O1
popd
rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo}
install -Dm644 llvm-project-$pkgver.src/llvm/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
package_llvm-libs(){
pkgdesc="LLVM runtime libraries"
depends=('gcc-libs' 'zlib' 'zstd' 'libffi' 'libedit' 'libxml2')
provides=('libLLVM.so' 'libLTO.so' 'libRemarks.so')
DESTDIR="$pkgdir" ninja -C build install-LLVM install-LLVMgold install-Remarks install-LTO
# Symlink LLVMgold.so from /usr/lib/bfd-plugins
# https://bugs.archlinux.org/task/28479
install -d "$pkgdir/usr/lib/bfd-plugins"
ln -s $pkgdir/usr/lib/LLVMgold.so "$pkgdir/usr/lib/bfd-plugins/LLVMgold.so"
rm -rf $pkgdir/usr/include
install -Dm644 llvm-project-$pkgver.src/llvm/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
package_clang() {
url="https://clang.llvm.org/"
optdepends=('openmp: OpenMP support in clang with -fopenmp'
'python: for scan-view and git-clang-format'
'llvm: referenced by some clang headers')
depends=('llvm-libs' 'gcc' 'compiler-rt' 'lld')
pkgdesc="C language family frontend for LLVM"
provides=("clang-analyzer=$pkgver" "clang-tools-extra=$pkgver")
conflicts=('clang-analyzer' 'clang-tools-extra')
replaces=('clang-analyzer' 'clang-tools-extra')
install -d "$pkgdir/usr/lib/libear"
install -d "$pkgdir/usr/lib/libscanbuild"
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
clang*|libclang*|findAllSymbols)
selected_targets+=( "install-$target" )
;;
scan*|amdgpu-arch|c-index-test|pp-trace|nvptx-arch|diagtool|find-all-symbols|hmaptool|modularize)
selected_targets+=( "install-$target" )
;;
docs-clang*|bash-autocomplete)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
install -Dm644 llvm-project-$pkgver.src/clang/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
local site_packages=$(python -c "import site; print(site.getsitepackages()[0])")
# Compile Python scripts
_python_optimize "$pkgdir/usr/share" "${pkgdir}${site_packages}"
# Move scanbuild-py into site-packages and install Python bindings
install -d "$pkgdir/$site_packages"
mv "$pkgdir"/usr/lib/{libear,libscanbuild} "$pkgdir/$site_packages/"
cp -a llvm-project-$pkgver.src/clang/bindings/python/clang "$pkgdir/$site_packages/"
# Move analyzer scripts out of /usr/libexec
mv "$pkgdir"/usr/libexec/* "$pkgdir/usr/lib/clang/"
rmdir "$pkgdir/usr/libexec"
sed -i 's|libexec|lib/clang|' \
"$pkgdir/usr/bin/scan-build" \
"$pkgdir/$site_packages/libscanbuild/analyze.py"
rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo}
# Move bash completion
local bash_completion_destdir="$pkgdir/usr/share/bash-completion/completions"
install -d $bash_completion_destdir
mv "$pkgdir/usr/share/clang/bash-autocomplete.sh" "$bash_completion_destdir/clang"
}
package_lld() {
pkgdesc="Linker from the LLVM project"
url="https://lld.llvm.org/"
depends=('llvm-libs' 'gcc-libs' 'zlib' 'zstd')
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
lldb*)
continue
;;
docs-lldb*)
continue
;;
liblldb*)
continue
;;
lld*)
selected_targets+=( "install-$target" )
;;
liblld*)
selected_targets+=( "install-$target" )
;;
docs-lld*)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
for lib in "$srcdir/build/lib"/liblld*; do
if [[ $(basename "$lib") != liblldb* ]]; then
install -Dm644 "$lib" "$pkgdir/usr/lib/$(basename "$lib")"
fi
done
install -Dm644 llvm-project-$pkgver.src/lld/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo}
}
package_lldb() {
depends=('llvm-libs' 'clang' 'gcc-libs' 'zlib' 'xz' 'libedit' 'ncurses'
'libxml2' 'python')
pkgdesc="Next generation, high-performance debugger"
url="https://lldb.llvm.org/"
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
lldb*)
selected_targets+=( "install-$target" )
;;
liblldb*)
selected_targets+=( "install-$target" )
;;
docs-lldb*)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
install -Dm644 llvm-project-$pkgver.src/lldb/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo}
# Compile Python scripts
_python_optimize -d /usr/lib "$pkgdir/usr/lib"
}
package_libclc() {
pkgdesc="Library requirements of the OpenCL C programming language"
url="https://libclc.llvm.org/"
DESTDIR="$pkgdir" ninja -C build tools/libclc/install
install -Dm644 llvm-project-$pkgver.src/libclc/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
package_polly() {
pkgdesc="High-level loop and data-locality optimizer and optimization infrastructure for LLVM"
url="https://polly.llvm.org/"
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
Polly*)
selected_targets+=( "install-$target" )
;;
LLVMPolly*)
selected_targets+=( "install-$target" )
;;
docs-polly*)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
install -Dm644 llvm-project-$pkgver.src/polly/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo}
}
package_bolt1(){
depends=(gcc-libs ncurses zlib zstd)
pkgdesc='a post-link optimizer developed to speed up large applications'
provide=('llvm-bolt')
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
bolt*)
selected_targets+=( "install-$target" )
;;
LLVMBOLT*)
selected_targets+=( "install-$target" )
;;
llvm-bolt*)
selected_targets+=( "install-$target" )
;;
merge-fdata)
selected_targets+=( "install-$target" )
;;
docs-bolt*)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
install -Dm644 llvm-project-$pkgver.src/bolt/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
rm -r "$pkgdir"/usr/share/doc/bolt/html/{_sources,.buildinfo}
}
package_mlir(){
pkgdesc="Multi-Level IR Compiler Framework for LLVM"
url="https://mlir.llvm.org/"
depends=('clang' 'clang' 'gcc-libs' 'zlib' 'zstd')
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
mlir-python-sources|obj.MLIR*)
continue
;;
mlir*)
selected_targets+=( "install-$target" )
;;
MLIR*)
selected_targets+=( "install-$target" )
;;
tblgen*)
selected_targets+=( "install-$target" )
;;
docs-mlir*)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
local site_packages=$(python -c "import site; print(site.getsitepackages()[0])")
install -d "$pkgdir/$site_packages"
mv "$pkgdir"/usr/python_packages/mlir_core/mlir "$pkgdir/$site_packages/"
_python_optimize "$pkgdir/usr/python_packages/mlir_core" "$pkgdir/$site_packages"
rm -rf "$pkgdir/usr/python_packages"
install -Dm644 llvm-project-$pkgver.src/mlir/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
package_flang(){
pkgdesc="ground-up implementation of a Fortran front end written in modern C++"
url="https://flang.llvm.org/"
depends=('llvm-libs' 'clang' 'gcc-libs' 'zlib' 'zstd' 'mlir')
local targets=( $(ninja -C $srcdir/build -t targets | grep -Po 'install-\K.*(?=-stripped:)') )
local selected_targets=()
for target in "${targets[@]}"; do
case $target in
flang*)
selected_targets+=( "install-$target" )
;;
fir*|f18*|tco)
selected_targets+=( "install-$target" )
;;
docs-flang*)
selected_targets+=( "install-$target" )
;;
esac
done
DESTDIR="$pkgdir" ninja -C build "${selected_targets[@]}"
pushd $pkgdir/usr/bin
ln -svr flang-new flang
popd
install -Dm644 llvm-project-$pkgver.src/flang/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo}
}
package_libc++ () {
pkgdesc="LLVM C++ standard library"
url="https://libcxx.llvm.org/"
depends+=("libc++abi=$pkgver-$pkgrel" "libunwind1=$pkgver-$pkgrel")
DESTDIR="$pkgdir" ninja -C build/runtimes/runtimes-bins libcxx/install
install -Dm0644 llvm-project-$pkgver.src/libcxx/CREDITS.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/CREDITS
install -Dm0644 llvm-project-$pkgver.src/libcxx/LICENSE.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
}
package_libc++abi() {
pkgdesc="Low level support for the $pkgdesc"
url="https://libcxx.llvm.org/"
depends+=("libunwind1=$pkgver-$pkgrel" "libc++=$pkgver-$pkgrel")
DESTDIR="$pkgdir" ninja -C build/runtimes/runtimes-bins libcxxabi/install
install -Dm0644 llvm-project-$pkgver.src/libcxxabi/CREDITS.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/CREDITS
install -Dm0644 llvm-project-$pkgver.src/libcxxabi/LICENSE.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
}
package_libunwind1() {
pkgdesc="A portable and efficient C programming interface (API) to determine the call-chain of a program"
url="https://libcxx.llvm.org/"
provides=("llvm-libunwind")
depends+=("libc++abi=$pkgver-$pkgrel" "libc++=$pkgver-$pkgrel")
DESTDIR="$pkgdir" ninja -C build/runtimes/runtimes-bins libunwind/install
install -Dm0644 llvm-project-$pkgver.src/libunwind/LICENSE.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
rm "$pkgdir"/usr/lib/libunwind.so
}
package_compiler-rt() {
pkgdesc="Compiler runtime libraries for clang"
url="https://compiler-rt.llvm.org/"
depends+=("libc++")
DESTDIR="$pkgdir" ninja -C build/runtimes/runtimes-bins compiler-rt/install
rm -rf "$pkgdir"/usr/lib/clang/19/lib/linux/*
cp -ap build/lib/clang/19/lib/linux/* "$pkgdir"/usr/lib/clang/19/lib/linux/
install -Dm0644 llvm-project-$pkgver.src/compiler-rt/LICENSE.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
}
package_openmp() {
pkgdesc="LLVM OpenMP Runtime Library"
optdepends=('cuda: offloading to NVIDIA GPUs'
'hsa-rocr: offloading to AMD GPUs')
url="https://openmp.llvm.org/"
DESTDIR="$pkgdir" ninja -C build/runtimes/runtimes-bins openmp/install
install -Dm0644 llvm-project-$pkgver.src/openmp/LICENSE.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
rm "$pkgdir"/usr/lib/libgomp.so
python -m compileall -d /usr/share "$pkgdir/usr/share"
python -O -m compileall -d /usr/share "$pkgdir/usr/share"
python -OO -m compileall -d /usr/share "$pkgdir/usr/share"
}
package_offload() {
pkgdesc="LLVM Offload Runtime Library"
url="https://openmp.llvm.org/"
depends+=("openmp=$pkgver-$pkgrel")
DESTDIR="$pkgdir" ninja -C build/runtimes/runtimes-bins offload/install
install -Dm0644 llvm-project-$pkgver.src/openmp/LICENSE.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
}
package_pstl() {
pkgdesc="LLVM Parallel STL for C++"
url="https://libcxx.llvm.org/"
depends+=("libc++=$pkgver-$pkgrel")
DESTDIR="$pkgdir" ninja -C build/runtimes/runtimes-bins pstl/install
}
package_llvmlibc(){
pkgdesc="LLVM C standard library"
url="https://libcxx.llvm.org/"
install -d "$pkgdir"/usr/lib/llvmlibc
DESTDIR="$pkgdir"/usr/lib/llvmlibc ninja -C build/runtimes/runtimes-bins libc/install
mv "$pkgdir"/usr/lib/llvmlibc/usr/lib/ "$pkgdir"/usr/lib/llvmlibc/
mv "$pkgdir"/usr/lib/llvmlibc/usr/include/ "$pkgdir"/usr/lib/llvmlibc/
rmdir "$pkgdir"/usr/lib/llvmlibc/usr
cp -ap $srcdir/build/lib/libLibcTableGenUtil.a "$pkgdir"/usr/lib/
install -Dm0644 llvm-project-$pkgver.src/libc/LICENSE.TXT "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
}
fix-libc-build.patch
--- a/libc/CMakeLists.txt 2025-04-14 16:04:36.092789087 +0800
+++ b/libc/CMakeLists.txt 2025-04-14 16:05:14.512029550 +0800
@@ -1,6 +1,7 @@
cmake_minimum_required(VERSION 3.20.0)
set(LLVM_SUBPROJECT_TITLE "libc")
-
+set(CMAKE_C_FLAGS="${CMAKE_C_FLAGS} -O" FORCE)
+set(CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -O" FORCE)
# Include LLVM's cmake policies.
if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
Offline
There's a mistake in your PKGBUILD.
Offline
also the patch is not applying correctly. where did you get the patch from?
Offline
First off, why?
Have you built it in a clean chroot/container? At first glance, the use of git doesn't seem like it would work
Offline