# $Id$ PNAME="clang" PVER="15.0.7" PBUILD="r1" # gcc version which llvm was compiled with GCC_VER="13.1.0" PCAT="sys-dev" DESCRIPTION="C language family frontend for LLVM." HOMEPAGE="http://llvm.org/" DEPEND=">= dev-libs/libxml2-2.11 == sys-dev/gcc-${GCC_VER} == sys-libs/compiler-rt-${PVER} == sys-libs/llvm-libs-${PVER}" SDEPEND="== sys-dev/llvm-${PVER} >= virtual/pkgconfig >= dev-lang/python3-3.11 >= virtual/sed" SRCFILE="clang-${PVER}.src.tar.xz" SRCDIR="${BUILDDIR}/clang-${PVER}.src" LLVM_SRCFILE="llvm-${PVER}.src.tar.xz" LLVM_SRCDIR="${BUILDDIR}/llvm-${PVER}.src" CLANG_EXTRA_SRCFILE="clang-tools-extra-${PVER}.src.tar.xz" CLANG_EXTRA_SRCDIR="${BUILDDIR}/clang-tools-extra-${PVER}.src" CMAKE_SRCFILE="cmake-${PVER}.src.tar.xz" CMAKE_SRCDIR="${BUILDDIR}/cmake-${PVER}.src" MANPAGES_SRCFILE="llvm-${PVER}-manpages.tar.bz2" MANPAGES_SRCDIR="${BUILDDIR}/llvm-${PVER}-manpages" sminclude multilib python3 mtools meson cmake msetfeature "!check static" SRC_URI=( https://github.com/llvm/llvm-project/releases/download/llvmorg-${PVER}/${SRCFILE} https://github.com/llvm/llvm-project/releases/download/llvmorg-${PVER}/${LLVM_SRCFILE} https://github.com/llvm/llvm-project/releases/download/llvmorg-${PVER}/${CLANG_EXTRA_SRCFILE} https://github.com/llvm/llvm-project/releases/download/llvmorg-${PVER}/${CMAKE_SRCFILE} mirror://llvm/${SRCFILE} mirror://llvm/${LLVM_SRCFILE} mirror://llvm/${CLANG_EXTRA_SRCFILE} mirror://llvm/${CMAKE_SRCFILE} mirror://llvm/${MANPAGES_SRCFILE} mirror://llvm/clang-${PVER}-enable_default_ssp-1.patch mirror://llvm/clang-${PVER}-linker-wrapper-tool.patch mirror://llvm/clang-${PVER}-structured-bindings-r1-v2.patch mirror://llvm/clang-${PVER}-bitfield-value-capture.patch ) UP2DATE="updatecmd https://github.com/${PNAME}/llvm-project/releases | grep llvmorg- | highesttarball gz" # pkgs which require a rebuild: mesa src_prepare() { munpack ${SRCFILE} || die SRCDIR="${CLANG_EXTRA_SRCDIR}" munpack ${CLANG_EXTRA_SRCFILE} || die # move all sources into the llvm src tree all-abis mv ${CLANG_EXTRA_SRCDIR}-$(mabi) ${SRCDIR}-$(mabi)/tools/extra || die # apply patches # enable ssp by default mpatch -Np2 clang-${PVER}-enable_default_ssp-1.patch || die # upstream: # https://reviews.llvm.org/D145862 mpatch -lNp2 clang-${PVER}-linker-wrapper-tool.patch || die # https://reviews.llvm.org/D122768 (needed for Chromium 113) mpatch -Np2 clang-${PVER}-structured-bindings-r1-v2.patch || die # https://reviews.llvm.org/D131202 (regression caused by the above) mpatch clang-${PVER}-bitfield-value-capture.patch # cmake addons and thirdparty modules are expected outside the llvm srcdir without any versions oldmunpack ${CMAKE_SRCFILE} || die mv -v ${CMAKE_SRCDIR} ${BUILDDIR}/cmake || die # some header references are required from llvm to build clang oldmunpack ${LLVM_SRCFILE} || die # pre-generated man-pages oldmunpack ${MANPAGES_SRCFILE} || die # attempt to convert script to python 3 all-abis 2to3 -wn --no-diffs tools/extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py || die } src_compile() { # honor outside tree builds cmake_setup_builddir || die cmake_configure \ -G Ninja \ -DCMAKE_SKIP_RPATH=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DCLANG_LINK_CLANG_DYLIB=ON \ -DLLVM_ENABLE_RTTI=ON \ -DLLVM_BUILD_TESTS=ON \ -DLLVM_BUILD_DOCS=OFF \ -DLLVM_ENABLE_SPHINX=OFF \ -DLLVM_ENABLE_DOXYGEN=OFF \ -DSPHINX_WARNINGS_AS_ERRORS=OFF \ -DCLANG_DEFAULT_PIE_ON_LINUX=ON \ -DENABLE_LINKER_BUILD_ID=ON \ -DLLVM_EXTERNAL_LIT=/usr/bin/lit \ -DLLVM_MAIN_SRC_DIR="${LLVM_SRCDIR}" \ '$([[ $(mlibdir) != lib ]] && echo "-DLLVM_LIBDIR_SUFFIX=32")' \ -DLLVM_HOST_TRIPLE=${CHOST} \ || die all-abis SRCDIR=${BUILDDIR}/build mninja || die } src_check() { all-abis SRCDIR=${BUILDDIR}/build mninja check-clang || die all-abis SRCDIR=${BUILDDIR}/build mninja check-clang-tools || die } src_install() { SRCDIR=${BUILDDIR}/build DESTDIR=${BINDIR} mninja install || die # install pre-generated man-pages minstallman ${MANPAGES_SRCDIR}/clang/*.1 || die # install python bindings (non multilib) minstalldir $(mget-python-libdir) || die all-abis mcopy -r bindings/python/clang $(mget-python-libdir)/ || die mv -v ${BINDIR}/usr/$(mlibdir)/libear ${BINDIR}/$(mget-python-libdir)/ || die mv -v ${BINDIR}/usr/$(mlibdir)/libscanbuild ${BINDIR}/$(mget-python-libdir)/ || die # compile all python scripts ${MAGE_PYTHON3_EXEC} -m compileall ${BINDIR} || die ${MAGE_PYTHON3_EXEC} -O -m compileall ${BINDIR} || die # fix libexec mv -v ${BINDIR}/usr/libexec/* ${BINDIR}/usr/$(mlibdir)/clang/ || die rmdir -v ${BINDIR}/usr/libexec || die sed -i "s:libexec:$(mlibdir)/clang:g" \ ${BINDIR}/usr/bin/scan-build \ ${BINDIR}/$(mget-python-libdir)/libscanbuild/analyze.py \ || die minstalldocs tools/clang/LICENSE.TXT || die }