commit: 48f104e91c85fe0f6642f17f8e0652e086f63b82 Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Sun Dec 29 16:30:19 2024 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Wed Mar 5 13:05:13 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=48f104e9
llvm-core/clang-runtime: Install minimal per-slot configs Install per-slot config files. They include the top-level configs from llvm-core/clang-common and override runtimes. Signed-off-by: Michał Górny <mgorny <AT> gentoo.org> .../clang-runtime/clang-runtime-21.0.0.9999.ebuild | 95 +++++++++++++++++++++- llvm-core/clang-runtime/metadata.xml | 4 + 2 files changed, 96 insertions(+), 3 deletions(-) diff --git a/llvm-core/clang-runtime/clang-runtime-21.0.0.9999.ebuild b/llvm-core/clang-runtime/clang-runtime-21.0.0.9999.ebuild index 542c7b28a6f4..1cf7f46d4148 100644 --- a/llvm-core/clang-runtime/clang-runtime-21.0.0.9999.ebuild +++ b/llvm-core/clang-runtime/clang-runtime-21.0.0.9999.ebuild @@ -3,15 +3,21 @@ EAPI=8 -inherit multilib-build +inherit multilib-build toolchain-funcs DESCRIPTION="Meta-ebuild for clang runtime libraries" HOMEPAGE="https://clang.llvm.org/" +S=${WORKDIR} LICENSE="metapackage" SLOT="${PV%%.*}" -IUSE="+compiler-rt libcxx offload openmp +sanitize" -REQUIRED_USE="sanitize? ( compiler-rt )" +IUSE=" + +compiler-rt libcxx offload openmp +sanitize + default-compiler-rt default-libcxx default-lld llvm-libunwind +" +REQUIRED_USE=" + sanitize? ( compiler-rt ) +" RDEPEND=" compiler-rt? ( @@ -27,4 +33,87 @@ RDEPEND=" >=llvm-runtimes/offload-${PV} ) ) + + llvm-core/clang-common + default-compiler-rt? ( + ~llvm-runtimes/compiler-rt-${PV}:${SLOT}[abi_x86_32(+)?,abi_x86_64(+)?] + llvm-libunwind? ( llvm-runtimes/libunwind[static-libs] ) + !llvm-libunwind? ( sys-libs/libunwind[static-libs] ) + ) + !default-compiler-rt? ( sys-devel/gcc ) + default-libcxx? ( >=llvm-runtimes/libcxx-${PV}[static-libs] ) + !default-libcxx? ( sys-devel/gcc ) + default-lld? ( ~llvm-core/lld-${PV} ) + !default-lld? ( sys-devel/binutils ) " + +_doclang_cfg() { + local triple="${1}" + + local tool + for tool in ${triple}-clang{,++,-cpp}; do + newins - "${tool}.cfg" <<-EOF + # This configuration file is used by ${tool} driver. + @../${tool}.cfg + @gentoo-runtimes.cfg + EOF + done + + # Install symlinks for triples with other vendor strings since some + # programs insist on mangling the triple. + local vendor + for vendor in gentoo pc unknown; do + local vendor_triple="${triple%%-*}-${vendor}-${triple#*-*-}" + for tool in clang{,++,-cpp}; do + if [[ ! -f "${ED}/etc/clang/${SLOT}/${vendor_triple}-${tool}.cfg" ]]; then + dosym "${triple}-${tool}.cfg" "/etc/clang/${SLOT}/${vendor_triple}-${tool}.cfg" + fi + done + done +} + +doclang_cfg() { + local triple=$(get_abi_CHOST "${abi}") + + _doclang_cfg ${triple} + + # LLVM may have different arch names in some cases. For example in x86 + # profiles the triple uses i686, but llvm will prefer i386 if invoked + # with "clang" on x86 or "clang -m32" on x86_64. The gentoo triple will + # be used if invoked through ${CHOST}-clang{,++,-cpp} though. + # + # To make sure the correct triples are installed, + # see Triple::getArchTypeName() in llvm/lib/TargetParser/Triple.cpp + # and compare with CHOST values in profiles. + + local abi=${triple%%-*} + case ${abi} in + armv4l|armv4t|armv5tel|armv6j|armv7a) + _doclang_cfg ${triple/${abi}/arm} + ;; + i686) + _doclang_cfg ${triple/${abi}/i386} + ;; + sparc) + _doclang_cfg ${triple/${abi}/sparcel} + ;; + sparc64) + _doclang_cfg ${triple/${abi}/sparcv9} + ;; + esac +} + +src_install() { + insinto "/etc/clang/${SLOT}" + newins - gentoo-runtimes.cfg <<-EOF + # This file is initially generated by llvm-core/clang-runtime. + # It is used to control the default runtimes using by clang. + + --rtlib=$(usex default-compiler-rt compiler-rt libgcc) + --unwindlib=$(usex default-compiler-rt libunwind libgcc) + --stdlib=$(usex default-libcxx libc++ libstdc++) + -fuse-ld=$(usex default-lld lld bfd) + EOF + + multilib_foreach_abi doclang_cfg +} diff --git a/llvm-core/clang-runtime/metadata.xml b/llvm-core/clang-runtime/metadata.xml index 2167c069cc50..e7a356772fe4 100644 --- a/llvm-core/clang-runtime/metadata.xml +++ b/llvm-core/clang-runtime/metadata.xml @@ -10,6 +10,10 @@ <flag name="offload">Install <pkg>llvm-runtimes/offload</pkg> for -fopenmp GPU offloading</flag> <flag name="openmp">Install <pkg>llvm-runtimes/openmp</pkg> for -fopenmp support</flag> <flag name="sanitize">Enable compiler-rt sanitizer (-fsanitize*) support</flag> + + <flag name="default-compiler-rt">Use compiler-rt + libunwind instead of libgcc as the default rtlib for clang</flag> + <flag name="default-libcxx">Use libc++ instead of libstdc++ as the default stdlib for clang</flag> + <flag name="default-lld">Use lld as the default linker for clang</flag> </use> <upstream> <remote-id type="github">llvm/llvm-project</remote-id>
