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>

Reply via email to