# Maintainer: Evangelos Foutras # Contributor: Jan "heftig" Steffens # ALARM: Kevin Mihelich # - backport upstream patch to fix build failure on ARM with GCC 14 # fixed in 18.1.0 and later pkgname=clang pkgver=17.0.6 pkgrel=2.1 pkgdesc="C language family frontend for LLVM" arch=('x86_64') url="https://clang.llvm.org/" license=('custom:Apache 2.0 with LLVM Exception') depends=('llvm-libs' 'gcc' 'compiler-rt') makedepends=('llvm' 'cmake' 'ninja' 'python-sphinx' 'python-recommonmark') optdepends=('openmp: OpenMP support in clang with -fopenmp' 'python: for scan-view and git-clang-format' 'llvm: referenced by some clang headers') provides=("clang-analyzer=$pkgver" "clang-tools-extra=$pkgver") conflicts=('clang-analyzer' 'clang-tools-extra') replaces=('clang-analyzer' 'clang-tools-extra') _source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver source=($_source_base/clang-$pkgver.src.tar.xz{,.sig} $_source_base/clang-tools-extra-$pkgver.src.tar.xz{,.sig} $_source_base/llvm-$pkgver.src.tar.xz{,.sig} $_source_base/cmake-$pkgver.src.tar.xz{,.sig} $_source_base/third-party-$pkgver.src.tar.xz{,.sig} clangd-handle-missing-ending-brace.patch::https://github.com/llvm/llvm-project/commit/9d1dada57741.patch enable-fstack-protector-strong-by-default.patch 0001-Fix-build-with-GCC-14-on-ARM-78704.patch) sha256sums=('a78f668a726ae1d3d9a7179996d97b12b90fb76ab9442a43110b972ff7ad9029' 'SKIP' 'aa774642415d338d7b77a66fcbad6fd1f77f382dabcb67422a6230614eff1ab9' 'SKIP' 'b638167da139126ca11917b6880207cc6e8f9d1cbb1a48d87d017f697ef78188' 'SKIP' '807f069c54dc20cb47b21c1f6acafdd9c649f3ae015609040d6182cab01140f4' 'SKIP' '3054d0a9c9375dab1a4539cc2cc45ab340341c5d71475f9599ba7752e222947b' 'SKIP' '0d4dc477f5a28f9f16639dc094b6d9bc14228d5de771547394799d2d5f8cd1df' '45da5783f4e89e4507a351ed0ffbbe6ec240e21ff7070797a89c5ccf434ac612' 'ff64863585ade268dd4c15291fb7143567e10dc8a670673c2368c534159bdce8') validpgpkeys=('474E22316ABF4785A88C6E8EA2C794A986419D8A' # Tom Stellard 'D574BD5D1D0E98895E3BF90044F2485E45D59042') # Tobias Hieta # 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-tidy-headers) continue ;; clang|clangd|clang-*) ;; clang*|findAllSymbols) continue ;; esac echo $target done } prepare() { rename -v -- "-$pkgver.src" '' {cmake,third-party}-$pkgver.src cd clang-$pkgver.src mkdir build mv "$srcdir/clang-tools-extra-$pkgver.src" tools/extra patch -Np2 -i ../enable-fstack-protector-strong-by-default.patch patch -Np2 -i ../0001-Fix-build-with-GCC-14-on-ARM-78704.patch # https://github.com/clangd/clangd/issues/1559 sed 's|clang-tools-extra|clang/tools/extra|' \ clangd-handle-missing-ending-brace.patch | patch -Np2 # Attempt to convert script to Python 3 2to3 -wn --no-diffs \ tools/extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py } build() { cd 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_DOCS=ON -DLLVM_BUILD_TESTS=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_SPHINX=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -DLLVM_INCLUDE_DOCS=ON -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_MAIN_SRC_DIR="$srcdir/llvm-$pkgver.src" -DSPHINX_WARNINGS_AS_ERRORS=OFF ) 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 clang-$pkgver.src/build LD_LIBRARY_PATH=$PWD/lib ninja check-clang{,-tools} } _python_optimize() { python -m compileall "$@" python -O -m compileall "$@" python -OO -m compileall "$@" } package() { cd clang-$pkgver.src/build DESTDIR="$pkgdir" ninja install-distribution install -Dm644 ../LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" # Remove documentation sources rm -r "$pkgdir"/usr/share/doc/clang{,-tools}/html/{_sources,.buildinfo} # 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" } # vim:set ts=2 sw=2 et: