summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2022-09-30 15:11:50 +0200
committerMichał Górny <mgorny@gentoo.org>2022-09-30 16:52:15 +0200
commitbf25b57ea645de70edfa0798d7392349a75c222a (patch)
tree86076ed2ff2999813ab48c8f356de058e4aa85ae
parentsys-libs/llvm-libunwind: Disable cross-unwind in 16.0.0_pre20220930 (diff)
downloadgentoo-bf25b57e.tar.gz
gentoo-bf25b57e.tar.bz2
gentoo-bf25b57e.zip
sys-devel/clang-common: Install config files for clang 16.x
Signed-off-by: Michał Górny <mgorny@gentoo.org>
-rw-r--r--sys-devel/clang-common/clang-common-16.0.0.9999.ebuild76
-rw-r--r--sys-devel/clang-common/clang-common-16.0.0_pre20220930.ebuild76
-rw-r--r--sys-devel/clang-common/metadata.xml5
3 files changed, 155 insertions, 2 deletions
diff --git a/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild b/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild
index 1285500128bb..67012cf2b988 100644
--- a/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild
+++ b/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-inherit bash-completion-r1 llvm.org
+inherit bash-completion-r1 llvm.org multilib
DESCRIPTION="Common files shared between multiple slots of clang"
HOMEPAGE="https://llvm.org/"
@@ -11,14 +11,88 @@ HOMEPAGE="https://llvm.org/"
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
SLOT="0"
KEYWORDS=""
+IUSE="default-compiler-rt default-libcxx default-lld llvm-libunwind"
PDEPEND="
sys-devel/clang:*
+ default-compiler-rt? (
+ =sys-libs/compiler-rt-${PV%_*}*
+ llvm-libunwind? ( sys-libs/llvm-libunwind )
+ !llvm-libunwind? ( sys-libs/libunwind )
+ )
+ default-libcxx? ( >=sys-libs/libcxx-${PV} )
+ default-lld? ( sys-devel/lld )
"
LLVM_COMPONENTS=( clang/utils )
llvm.org_set_globals
+pkg_pretend() {
+ [[ ${CLANG_IGNORE_DEFAULT_RUNTIMES} ]] && return
+
+ local flag missing_flags=()
+ for flag in default-{compiler-rt,libcxx,lld}; do
+ if ! use "${flag}" && has_version "sys-devel/clang[${flag}]"; then
+ missing_flags+=( "${flag}" )
+ fi
+ done
+
+ if [[ ${missing_flags[@]} ]]; then
+ eerror "It seems that you have the following flags set on sys-devel/clang:"
+ eerror
+ eerror " ${missing_flags[*]}"
+ eerror
+ eerror "The default runtimes are now set via flags on sys-devel/clang-common."
+ eerror "The build is being aborted to prevent breakage. Please either set"
+ eerror "the respective flags on this ebuild, e.g.:"
+ eerror
+ eerror " sys-devel/clang-common ${missing_flags[*]}"
+ eerror
+ eerror "or build with CLANG_IGNORE_DEFAULT_RUNTIMES=1."
+ die "Mismatched defaults detected between sys-devel/clang and sys-devel/clang-common"
+ fi
+}
+
+usec() {
+ usex "default-${1}" "" "# "
+}
+
src_install() {
newbashcomp bash-autocomplete.sh clang
+
+ insinto /etc/clang
+ newins - gentoo-runtimes.cfg <<-EOF
+ # This file is initially generated by sys-devel/clang-runtime.
+ # It is used to control the default runtimes using by clang.
+
+ $(usec compiler-rt)-rtlib=compiler-rt
+ $(usec compiler-rt)-unwindlib=libunwind
+ $(usec libcxx)-stdlib=libc++
+ $(usec lld)-fuse-ld=lld
+ EOF
+
+ newins - gentoo-gcc-install.cfg <<-EOF
+ # This file is maintained by gcc-config.
+ # It is used to specify the selected GCC installation.
+ EOF
+
+ local tool
+ for tool in clang{,++,-cpp}; do
+ newins - "${tool}.cfg" <<-EOF
+ # This configuration file is used by ${tool} driver.
+ @gentoo-runtimes.cfg
+ @gentoo-gcc-install.cfg
+ EOF
+ done
+}
+
+pkg_preinst() {
+ # TODO: move this to gcc-config and call it here?
+
+ local gcc_path=$(gcc-config --get-lib-path 2>/dev/null)
+ if [[ -n ${gcc_path} ]]; then
+ cat >> "${ED}/etc/clang/gentoo-gcc-install.cfg" <<-EOF
+ --gcc-install-dir=${gcc_path%%:*}
+ EOF
+ fi
}
diff --git a/sys-devel/clang-common/clang-common-16.0.0_pre20220930.ebuild b/sys-devel/clang-common/clang-common-16.0.0_pre20220930.ebuild
index 1285500128bb..67012cf2b988 100644
--- a/sys-devel/clang-common/clang-common-16.0.0_pre20220930.ebuild
+++ b/sys-devel/clang-common/clang-common-16.0.0_pre20220930.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-inherit bash-completion-r1 llvm.org
+inherit bash-completion-r1 llvm.org multilib
DESCRIPTION="Common files shared between multiple slots of clang"
HOMEPAGE="https://llvm.org/"
@@ -11,14 +11,88 @@ HOMEPAGE="https://llvm.org/"
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
SLOT="0"
KEYWORDS=""
+IUSE="default-compiler-rt default-libcxx default-lld llvm-libunwind"
PDEPEND="
sys-devel/clang:*
+ default-compiler-rt? (
+ =sys-libs/compiler-rt-${PV%_*}*
+ llvm-libunwind? ( sys-libs/llvm-libunwind )
+ !llvm-libunwind? ( sys-libs/libunwind )
+ )
+ default-libcxx? ( >=sys-libs/libcxx-${PV} )
+ default-lld? ( sys-devel/lld )
"
LLVM_COMPONENTS=( clang/utils )
llvm.org_set_globals
+pkg_pretend() {
+ [[ ${CLANG_IGNORE_DEFAULT_RUNTIMES} ]] && return
+
+ local flag missing_flags=()
+ for flag in default-{compiler-rt,libcxx,lld}; do
+ if ! use "${flag}" && has_version "sys-devel/clang[${flag}]"; then
+ missing_flags+=( "${flag}" )
+ fi
+ done
+
+ if [[ ${missing_flags[@]} ]]; then
+ eerror "It seems that you have the following flags set on sys-devel/clang:"
+ eerror
+ eerror " ${missing_flags[*]}"
+ eerror
+ eerror "The default runtimes are now set via flags on sys-devel/clang-common."
+ eerror "The build is being aborted to prevent breakage. Please either set"
+ eerror "the respective flags on this ebuild, e.g.:"
+ eerror
+ eerror " sys-devel/clang-common ${missing_flags[*]}"
+ eerror
+ eerror "or build with CLANG_IGNORE_DEFAULT_RUNTIMES=1."
+ die "Mismatched defaults detected between sys-devel/clang and sys-devel/clang-common"
+ fi
+}
+
+usec() {
+ usex "default-${1}" "" "# "
+}
+
src_install() {
newbashcomp bash-autocomplete.sh clang
+
+ insinto /etc/clang
+ newins - gentoo-runtimes.cfg <<-EOF
+ # This file is initially generated by sys-devel/clang-runtime.
+ # It is used to control the default runtimes using by clang.
+
+ $(usec compiler-rt)-rtlib=compiler-rt
+ $(usec compiler-rt)-unwindlib=libunwind
+ $(usec libcxx)-stdlib=libc++
+ $(usec lld)-fuse-ld=lld
+ EOF
+
+ newins - gentoo-gcc-install.cfg <<-EOF
+ # This file is maintained by gcc-config.
+ # It is used to specify the selected GCC installation.
+ EOF
+
+ local tool
+ for tool in clang{,++,-cpp}; do
+ newins - "${tool}.cfg" <<-EOF
+ # This configuration file is used by ${tool} driver.
+ @gentoo-runtimes.cfg
+ @gentoo-gcc-install.cfg
+ EOF
+ done
+}
+
+pkg_preinst() {
+ # TODO: move this to gcc-config and call it here?
+
+ local gcc_path=$(gcc-config --get-lib-path 2>/dev/null)
+ if [[ -n ${gcc_path} ]]; then
+ cat >> "${ED}/etc/clang/gentoo-gcc-install.cfg" <<-EOF
+ --gcc-install-dir=${gcc_path%%:*}
+ EOF
+ fi
}
diff --git a/sys-devel/clang-common/metadata.xml b/sys-devel/clang-common/metadata.xml
index 072910296ca3..31c80b4fb555 100644
--- a/sys-devel/clang-common/metadata.xml
+++ b/sys-devel/clang-common/metadata.xml
@@ -7,4 +7,9 @@
<upstream>
<remote-id type="github">llvm/llvm-project</remote-id>
</upstream>
+ <use>
+ <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>
</pkgmetadata>