new blfs: llvm-core/clang-20.1.8

This commit is contained in:
2025-12-25 23:19:42 -05:00
parent 1888a3ce2a
commit ca6df9ce76
2 changed files with 143 additions and 1 deletions

View File

@@ -0,0 +1,142 @@
pkgname=clang
pkgver=20.1.8
pkgdesc="C language family frontend for LLVM"
arch=('x86_64')
homepage="https://clang.llvm.org/"
license=('Apache-2.0 WITH LLVM-exception')
_source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver
_blfs_source_base="https://anduin.linuxfromscratch.org/BLFS/llvm/"
sources=("clang-$pkgver.src.tar.xz"
"clang-tools-extra-$pkgver.src.tar.xz"
"llvm-${pkgver}.src.tar.xz"
"llvm-cmake-${pkgver}.src.tar.xz"
"llvm-third-party-${pkgver}.src.tar.xz"
)
urls=("${_source_base}/${sources[0]}"
"${_source_base}/${sources[1]}"
"${_blfs_source_base}/${sources[2]}"
"${_blfs_source_base}/${sources[3]}"
"${_blfs_source_base}/${sources[4]}"
)
md5sums=("62a0500bb932868061607cde0c01f584"
"254c99f104cd17b32ef721acaeb58a7c"
"78040509eb91309b4ec2edfe12cd20d8"
"5bfb8f4b4a2b3ccffca0d2406e4cdcc6"
"2ffd8624b3cbddf55a4e74a7d8ea89fa"
)
src_prepare() {
tar -xf ${distdir}/${sources[0]} &&
tar -xf ${distdir}/${sources[1]} &&
tar -xf ${distdir}/${sources[2]} &&
tar -xf ${distdir}/${sources[3]} &&
tar -xf ${distdir}/${sources[4]} &&
rename -v -- "-$pkgver.src" '' {cmake,clang-tools-extra}-$pkgver.src
cd clang-$pkgver.src
mkdir build
cd ..
}
# 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
clang-libraries|distribution)
continue
;;
clang|clangd|clang-*)
;;
clang*|findAllSymbols)
continue
;;
esac
echo $target
done
}
src_build() {
pushd clang-$pkgver.src/build
# Build only minimal debug info to reduce size
CFLAGS=${CFLAGS/-g /-g1 }
CXXFLAGS=${CXXFLAGS/-g /-g1 }
local cmake_args=(
-G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=/usr
-DCMAKE_INSTALL_DOCDIR=share/doc
-DCMAKE_SKIP_RPATH=ON
-DCLANG_DEFAULT_PIE_ON_LINUX=ON
-DCLANG_LINK_CLANG_DYLIB=ON
-DENABLE_LINKER_BUILD_ID=ON
-DLLVM_BUILD_TESTS=ON
-DLLVM_ENABLE_RTTI=ON
-DLLVM_ENABLE_SPHINX=OFF
-DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR="$srcdir/clang-tools-extra"
-DLLVM_EXTERNAL_LIT=/usr/bin/lit
-DLLVM_LINK_LLVM_DYLIB=ON
-DLLVM_THIRD_PARTY_DIR="$srcdir/third-party-$pkgver.src"
)
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 &&
popd
}
src_check() {
pushd clang-$pkgver.src/build
LD_LIBRARY_PATH=$PWD/lib ninja check-clang{,-tools}
popd
}
_python_optimize() {
python -m compileall "$@"
python -O -m compileall "$@"
python -OO -m compileall "$@"
}
src_install() {
pushd clang-$pkgver.src/build
DESTDIR="$pkgdir" ninja install-distribution
install -Dm644 ../LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
mkdir -pv ${pkgdir}/etc/clang &&
for i in clang clang++; do
echo -fstack-protector-strong > ${pkgdir}/etc/clang/$i.cfg
done
# Remove documentation sources
rm -r "$pkgdir"/usr/share/doc/clang{,-tools}/html/{_sources,.buildinfo} || true
# Move scanbuild-py into site-packages and install Python bindings
local site_packages=$(python -c "import site; print(site.getsitepackages()[0])")
install -d "$pkgdir/$site_packages"
mv "$pkgdir"/usr/lib/{libear,libscanbuild} "$pkgdir/$site_packages/"
cp -a ../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"
# Compile Python scripts
_python_optimize "$pkgdir/usr/share" "$pkgdir/$site_packages"
# 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"
popd
}