commit:     63b4ae7aaa6e520706e1237b649d8fe29f5aba83
Author:     mojyack <mojyack <AT> gmail <DOT> com>
AuthorDate: Sat Nov  9 04:27:01 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Nov  9 10:14:13 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=63b4ae7a

sys-libs/compiler-rt: enable atomic builtin

Several packages depend on GCC's libatomic to perform atomic operations.
For example, this compiles without -latomic:
```c
_Atomic struct {
    int v[1];
} a;
atomic_store(&a, a);
```
But this fails with error "undefined reference to __atomic_store_16"
without -latomic:
```c
_Atomic struct {
    int v[4];
} b;
atomic_store(&b, b);
```

LLVM does not have a libatomic.so, but an atomic builtin to support such
operations.  However, it is disabled by default to allow use of system
libatomic while using LLVM as a compiler.  Pure LLVM environments
without GCC installed require this builtin.  This commit adds
`-DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF` cmake option to enable
the builtin.

Bug: https://bugs.gentoo.org/911340
Signed-off-by: mojyack <mojyack <AT> gmail.com>
Closes: https://github.com/gentoo/gentoo/pull/39168
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 ....0.9999.ebuild => compiler-rt-15.0.7-r2.ebuild} | 57 +++++++---------------
 ....0.9999.ebuild => compiler-rt-16.0.6-r6.ebuild} | 23 +++++----
 ....0.9999.ebuild => compiler-rt-17.0.6-r2.ebuild} | 23 +++++----
 ....0.9999.ebuild => compiler-rt-18.1.8-r2.ebuild} |  6 +--
 ....0.9999.ebuild => compiler-rt-19.1.3-r1.ebuild} |  4 +-
 .../compiler-rt/compiler-rt-20.0.0.9999.ebuild     |  1 +
 6 files changed, 52 insertions(+), 62 deletions(-)

diff --git a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild 
b/sys-libs/compiler-rt/compiler-rt-15.0.7-r2.ebuild
similarity index 70%
copy from sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
copy to sys-libs/compiler-rt/compiler-rt-15.0.7-r2.ebuild
index 7642499a8792..830a5dc0145e 100644
--- a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
+++ b/sys-libs/compiler-rt/compiler-rt-15.0.7-r2.ebuild
@@ -3,16 +3,16 @@
 
 EAPI=8
 
-PYTHON_COMPAT=( python3_{10..13} )
-inherit cmake crossdev flag-o-matic llvm.org llvm-utils python-any-r1
-inherit toolchain-funcs
+PYTHON_COMPAT=( python3_{10..11} )
+inherit cmake flag-o-matic llvm llvm.org python-any-r1 toolchain-funcs
 
 DESCRIPTION="Compiler runtime library for clang (built-in part)"
 HOMEPAGE="https://llvm.org/";
 
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
-SLOT="${LLVM_MAJOR}"
-IUSE="+abi_x86_32 abi_x86_64 +clang +debug test"
+SLOT="${LLVM_VERSION}"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86 ~amd64-linux ~ppc-macos 
~x64-macos"
+IUSE="+abi_x86_32 abi_x86_64 +clang debug test"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 DEPEND="
@@ -30,7 +30,7 @@ BDEPEND="
 "
 
 LLVM_COMPONENTS=( compiler-rt cmake llvm/cmake )
-LLVM_TEST_COMPONENTS=( llvm/include/llvm/TargetParser )
+LLVM_PATCHSET=${PV/_/-}
 llvm.org_set_globals
 
 python_check_deps() {
@@ -46,31 +46,28 @@ pkg_pretend() {
 }
 
 pkg_setup() {
-       if target_is_not_host || tc-is-cross-compiler ; then
-               # strips vars like CFLAGS="-march=x86_64-v3" for non-x86 
architectures
-               CHOST=${CTARGET} strip-unsupported-flags
-               # overrides host docs otherwise
-               DOCS=()
+       # Darwin Prefix builds do not have llvm installed yet, so rely on
+       # bootstrap-prefix to set the appropriate path vars to LLVM instead
+       # of using llvm_pkg_setup.
+       if [[ ${CHOST} != *-darwin* ]] || has_version sys-devel/llvm; then
+               LLVM_MAX_SLOT=${LLVM_MAJOR} llvm_pkg_setup
        fi
        python-any-r1_pkg_setup
 }
 
 test_compiler() {
-       target_is_not_host && return
        $(tc-getCC) ${CFLAGS} ${LDFLAGS} "${@}" -o /dev/null -x c - \
                <<<'int main() { return 0; }' &>/dev/null
 }
 
 src_configure() {
-       llvm_prepend_path "${LLVM_MAJOR}"
-
        # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
        use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
 
        # pre-set since we need to pass it to cmake
        BUILD_DIR=${WORKDIR}/${P}_build
 
-       if use clang && ! is_crosspkg; then
+       if use clang; then
                # Only do this conditionally to allow overriding with
                # e.g. CC=clang-13 in case of breakage
                if ! tc-is-clang ; then
@@ -81,7 +78,7 @@ src_configure() {
                strip-unsupported-flags
        fi
 
-       if ! is_crosspkg && ! test_compiler ; then
+       if ! test_compiler; then
                local nolib_flags=( -nodefaultlibs -lc )
 
                if test_compiler "${nolib_flags[@]}"; then
@@ -90,7 +87,7 @@ src_configure() {
                elif test_compiler "${nolib_flags[@]}" -nostartfiles; then
                        # Avoiding -nostartfiles earlier on for bug #862540,
                        # and set available entry symbol for bug #862798.
-                       nolib_flags+=( -nostartfiles -e main )
+                       nolib_flags+=( -nostartfiles -emain )
 
                        local -x LDFLAGS="${LDFLAGS} ${nolib_flags[*]}"
                        ewarn "${CC} seems to lack runtime, trying with 
${nolib_flags[*]}"
@@ -98,10 +95,10 @@ src_configure() {
        fi
 
        local mycmakeargs=(
-               
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${LLVM_MAJOR}"
+               
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${LLVM_VERSION}"
 
+               -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF
                -DCOMPILER_RT_INCLUDE_TESTS=$(usex test)
-               -DCOMPILER_RT_BUILD_CTX_PROFILE=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=OFF
                -DCOMPILER_RT_BUILD_MEMPROF=OFF
                -DCOMPILER_RT_BUILD_ORC=OFF
@@ -112,33 +109,13 @@ src_configure() {
                -DPython3_EXECUTABLE="${PYTHON}"
        )
 
-       if use amd64 && ! target_is_not_host; then
+       if use amd64; then
                mycmakeargs+=(
                        -DCAN_TARGET_i386=$(usex abi_x86_32)
                        -DCAN_TARGET_x86_64=$(usex abi_x86_64)
                )
        fi
 
-       if is_crosspkg; then
-               # Needed to target built libc headers
-               export CFLAGS="${CFLAGS} -isystem /usr/${CTARGET}/usr/include"
-               mycmakeargs+=(
-                       # Without this, the compiler will compile a test program
-                       # and fail due to no builtins.
-                       -DCMAKE_C_COMPILER_WORKS=1
-                       -DCMAKE_CXX_COMPILER_WORKS=1
-
-                       # Without this, compiler-rt install location is not 
unique
-                       # to target triples, only to architecture.
-                       # Needed if you want to target multiple libcs for one 
arch.
-                       -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
-
-                       -DCMAKE_ASM_COMPILER_TARGET="${CTARGET}"
-                       -DCMAKE_C_COMPILER_TARGET="${CTARGET}"
-                       -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
-               )
-       fi
-
        if use prefix && [[ "${CHOST}" == *-darwin* ]] ; then
                mycmakeargs+=(
                        # setting -isysroot is disabled with 
compiler-rt-prefix-paths.patch

diff --git a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild 
b/sys-libs/compiler-rt/compiler-rt-16.0.6-r6.ebuild
similarity index 87%
copy from sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
copy to sys-libs/compiler-rt/compiler-rt-16.0.6-r6.ebuild
index 7642499a8792..e43bba60aa8b 100644
--- a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
+++ b/sys-libs/compiler-rt/compiler-rt-16.0.6-r6.ebuild
@@ -3,16 +3,16 @@
 
 EAPI=8
 
-PYTHON_COMPAT=( python3_{10..13} )
-inherit cmake crossdev flag-o-matic llvm.org llvm-utils python-any-r1
-inherit toolchain-funcs
+PYTHON_COMPAT=( python3_{10..12} )
+inherit cmake crossdev flag-o-matic llvm llvm.org python-any-r1 toolchain-funcs
 
 DESCRIPTION="Compiler runtime library for clang (built-in part)"
 HOMEPAGE="https://llvm.org/";
 
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
 SLOT="${LLVM_MAJOR}"
-IUSE="+abi_x86_32 abi_x86_64 +clang +debug test"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86 ~amd64-linux 
~arm64-macos ~ppc-macos ~x64-macos"
+IUSE="+abi_x86_32 abi_x86_64 +clang debug test"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 DEPEND="
@@ -30,7 +30,7 @@ BDEPEND="
 "
 
 LLVM_COMPONENTS=( compiler-rt cmake llvm/cmake )
-LLVM_TEST_COMPONENTS=( llvm/include/llvm/TargetParser )
+LLVM_PATCHSET=${PV}-r4
 llvm.org_set_globals
 
 python_check_deps() {
@@ -46,6 +46,13 @@ pkg_pretend() {
 }
 
 pkg_setup() {
+       # Darwin Prefix builds do not have llvm installed yet, so rely on
+       # bootstrap-prefix to set the appropriate path vars to LLVM instead
+       # of using llvm_pkg_setup.
+       if [[ ${CHOST} != *-darwin* ]] || has_version sys-devel/llvm; then
+               LLVM_MAX_SLOT=${LLVM_MAJOR} llvm_pkg_setup
+       fi
+
        if target_is_not_host || tc-is-cross-compiler ; then
                # strips vars like CFLAGS="-march=x86_64-v3" for non-x86 
architectures
                CHOST=${CTARGET} strip-unsupported-flags
@@ -62,8 +69,6 @@ test_compiler() {
 }
 
 src_configure() {
-       llvm_prepend_path "${LLVM_MAJOR}"
-
        # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
        use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
 
@@ -90,7 +95,7 @@ src_configure() {
                elif test_compiler "${nolib_flags[@]}" -nostartfiles; then
                        # Avoiding -nostartfiles earlier on for bug #862540,
                        # and set available entry symbol for bug #862798.
-                       nolib_flags+=( -nostartfiles -e main )
+                       nolib_flags+=( -nostartfiles -emain )
 
                        local -x LDFLAGS="${LDFLAGS} ${nolib_flags[*]}"
                        ewarn "${CC} seems to lack runtime, trying with 
${nolib_flags[*]}"
@@ -100,8 +105,8 @@ src_configure() {
        local mycmakeargs=(
                
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${LLVM_MAJOR}"
 
+               -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF
                -DCOMPILER_RT_INCLUDE_TESTS=$(usex test)
-               -DCOMPILER_RT_BUILD_CTX_PROFILE=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=OFF
                -DCOMPILER_RT_BUILD_MEMPROF=OFF
                -DCOMPILER_RT_BUILD_ORC=OFF

diff --git a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild 
b/sys-libs/compiler-rt/compiler-rt-17.0.6-r2.ebuild
similarity index 87%
copy from sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
copy to sys-libs/compiler-rt/compiler-rt-17.0.6-r2.ebuild
index 7642499a8792..c5c7bdc62a1b 100644
--- a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
+++ b/sys-libs/compiler-rt/compiler-rt-17.0.6-r2.ebuild
@@ -3,16 +3,16 @@
 
 EAPI=8
 
-PYTHON_COMPAT=( python3_{10..13} )
-inherit cmake crossdev flag-o-matic llvm.org llvm-utils python-any-r1
-inherit toolchain-funcs
+PYTHON_COMPAT=( python3_{10..12} )
+inherit cmake crossdev flag-o-matic llvm llvm.org python-any-r1 toolchain-funcs
 
 DESCRIPTION="Compiler runtime library for clang (built-in part)"
 HOMEPAGE="https://llvm.org/";
 
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
 SLOT="${LLVM_MAJOR}"
-IUSE="+abi_x86_32 abi_x86_64 +clang +debug test"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86 ~amd64-linux 
~arm64-macos ~ppc-macos ~x64-macos"
+IUSE="+abi_x86_32 abi_x86_64 +clang debug test"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 DEPEND="
@@ -30,7 +30,7 @@ BDEPEND="
 "
 
 LLVM_COMPONENTS=( compiler-rt cmake llvm/cmake )
-LLVM_TEST_COMPONENTS=( llvm/include/llvm/TargetParser )
+LLVM_PATCHSET=${PV}
 llvm.org_set_globals
 
 python_check_deps() {
@@ -46,6 +46,13 @@ pkg_pretend() {
 }
 
 pkg_setup() {
+       # Darwin Prefix builds do not have llvm installed yet, so rely on
+       # bootstrap-prefix to set the appropriate path vars to LLVM instead
+       # of using llvm_pkg_setup.
+       if [[ ${CHOST} != *-darwin* ]] || has_version sys-devel/llvm; then
+               LLVM_MAX_SLOT=${LLVM_MAJOR} llvm_pkg_setup
+       fi
+
        if target_is_not_host || tc-is-cross-compiler ; then
                # strips vars like CFLAGS="-march=x86_64-v3" for non-x86 
architectures
                CHOST=${CTARGET} strip-unsupported-flags
@@ -62,8 +69,6 @@ test_compiler() {
 }
 
 src_configure() {
-       llvm_prepend_path "${LLVM_MAJOR}"
-
        # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
        use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
 
@@ -90,7 +95,7 @@ src_configure() {
                elif test_compiler "${nolib_flags[@]}" -nostartfiles; then
                        # Avoiding -nostartfiles earlier on for bug #862540,
                        # and set available entry symbol for bug #862798.
-                       nolib_flags+=( -nostartfiles -e main )
+                       nolib_flags+=( -nostartfiles -emain )
 
                        local -x LDFLAGS="${LDFLAGS} ${nolib_flags[*]}"
                        ewarn "${CC} seems to lack runtime, trying with 
${nolib_flags[*]}"
@@ -100,8 +105,8 @@ src_configure() {
        local mycmakeargs=(
                
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${LLVM_MAJOR}"
 
+               -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF
                -DCOMPILER_RT_INCLUDE_TESTS=$(usex test)
-               -DCOMPILER_RT_BUILD_CTX_PROFILE=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=OFF
                -DCOMPILER_RT_BUILD_MEMPROF=OFF
                -DCOMPILER_RT_BUILD_ORC=OFF

diff --git a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild 
b/sys-libs/compiler-rt/compiler-rt-18.1.8-r2.ebuild
similarity index 96%
copy from sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
copy to sys-libs/compiler-rt/compiler-rt-18.1.8-r2.ebuild
index 7642499a8792..6fae972ab61d 100644
--- a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
+++ b/sys-libs/compiler-rt/compiler-rt-18.1.8-r2.ebuild
@@ -12,7 +12,8 @@ HOMEPAGE="https://llvm.org/";
 
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
 SLOT="${LLVM_MAJOR}"
-IUSE="+abi_x86_32 abi_x86_64 +clang +debug test"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc64 ~riscv ~x86 ~amd64-linux 
~arm64-macos ~ppc-macos ~x64-macos"
+IUSE="+abi_x86_32 abi_x86_64 +clang debug test"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 DEPEND="
@@ -30,7 +31,6 @@ BDEPEND="
 "
 
 LLVM_COMPONENTS=( compiler-rt cmake llvm/cmake )
-LLVM_TEST_COMPONENTS=( llvm/include/llvm/TargetParser )
 llvm.org_set_globals
 
 python_check_deps() {
@@ -100,8 +100,8 @@ src_configure() {
        local mycmakeargs=(
                
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${LLVM_MAJOR}"
 
+               -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF
                -DCOMPILER_RT_INCLUDE_TESTS=$(usex test)
-               -DCOMPILER_RT_BUILD_CTX_PROFILE=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=OFF
                -DCOMPILER_RT_BUILD_MEMPROF=OFF
                -DCOMPILER_RT_BUILD_ORC=OFF

diff --git a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild 
b/sys-libs/compiler-rt/compiler-rt-19.1.3-r1.ebuild
similarity index 96%
copy from sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
copy to sys-libs/compiler-rt/compiler-rt-19.1.3-r1.ebuild
index 7642499a8792..0e331798f968 100644
--- a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
+++ b/sys-libs/compiler-rt/compiler-rt-19.1.3-r1.ebuild
@@ -12,7 +12,8 @@ HOMEPAGE="https://llvm.org/";
 
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
 SLOT="${LLVM_MAJOR}"
-IUSE="+abi_x86_32 abi_x86_64 +clang +debug test"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc64 ~riscv ~x86 ~amd64-linux 
~arm64-macos ~ppc-macos ~x64-macos"
+IUSE="+abi_x86_32 abi_x86_64 +clang debug test"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 DEPEND="
@@ -100,6 +101,7 @@ src_configure() {
        local mycmakeargs=(
                
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${LLVM_MAJOR}"
 
+               -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF
                -DCOMPILER_RT_INCLUDE_TESTS=$(usex test)
                -DCOMPILER_RT_BUILD_CTX_PROFILE=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=OFF

diff --git a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild 
b/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
index 7642499a8792..e8c984678e90 100644
--- a/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
+++ b/sys-libs/compiler-rt/compiler-rt-20.0.0.9999.ebuild
@@ -100,6 +100,7 @@ src_configure() {
        local mycmakeargs=(
                
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${LLVM_MAJOR}"
 
+               -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF
                -DCOMPILER_RT_INCLUDE_TESTS=$(usex test)
                -DCOMPILER_RT_BUILD_CTX_PROFILE=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=OFF

Reply via email to