commit:     1aa0758046606b008709a7c3a1ff3cbd87a56eae
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 21 15:36:48 2020 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Dec 21 19:06:10 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1aa07580

sys-libs/compiler-rt-sanitizers: Provide flags for sanitizers

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../compiler-rt-sanitizers-11.0.1.9999.ebuild      | 39 ++++++++++++++++++++--
 .../compiler-rt-sanitizers-11.0.1_rc2.ebuild       | 39 ++++++++++++++++++++--
 .../compiler-rt-sanitizers-12.0.0.9999.ebuild      | 39 ++++++++++++++++++++--
 sys-libs/compiler-rt-sanitizers/metadata.xml       | 15 +++++++++
 4 files changed, 123 insertions(+), 9 deletions(-)

diff --git 
a/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1.9999.ebuild 
b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1.9999.ebuild
index 67e9b199c31..81547ee1605 100644
--- a/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1.9999.ebuild
+++ b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1.9999.ebuild
@@ -12,9 +12,20 @@ HOMEPAGE="https://llvm.org/";
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
 SLOT="$(ver_cut 1-3)"
 KEYWORDS=""
-IUSE="+clang +libfuzzer +profile +sanitize test +xray elibc_glibc"
+IUSE="+clang test elibc_glibc"
+# base targets
+IUSE+=" +libfuzzer +profile +xray"
+# sanitizer targets, keep in sync with config-ix.cmake
+# NB: ubsan, scudo deliberately match two entries
+SANITIZER_FLAGS=(
+       asan dfsan lsan msan hwasan tsan ubsan safestack cfi scudo
+       shadowcallstack gwp-asan
+)
+IUSE+=" ${SANITIZER_FLAGS[@]/#/+}"
 REQUIRED_USE="
-       || ( libfuzzer profile sanitize xray )"
+       || ( ${SANITIZER_FLAGS[*]} libfuzzer profile xray )
+       gwp-asan? ( scudo )
+       ubsan? ( cfi )"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 CLANG_SLOT=${SLOT%%.*}
@@ -62,6 +73,20 @@ pkg_setup() {
 src_prepare() {
        sed -i -e 's:-Werror::' lib/tsan/go/buildgo.sh || die
 
+       local flag
+       for flag in "${SANITIZER_FLAGS[@]}"; do
+               if ! use "${flag}"; then
+                       local cmake_flag=${flag/-/_}
+                       sed -i -e 
"/COMPILER_RT_HAS_${cmake_flag^^}/s:TRUE:FALSE:" \
+                               cmake/config-ix.cmake || die
+               fi
+       done
+
+       if use asan && ! use profile; then
+               # TODO: fix these tests to be skipped upstream
+               rm test/asan/TestCases/asan_and_llvm_coverage_test.cpp || die
+       fi
+
        llvm.org_src_prepare
 }
 
@@ -75,6 +100,14 @@ src_configure() {
                strip-unsupported-flags
        fi
 
+       local flag want_sanitizer=OFF
+       for flag in "${SANITIZER_FLAGS[@]}"; do
+               if use "${flag}"; then
+                       want_sanitizer=ON
+                       break
+               fi
+       done
+
        local mycmakeargs=(
                -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${SLOT}"
                # use a build dir structure consistent with install
@@ -87,7 +120,7 @@ src_configure() {
                -DCOMPILER_RT_BUILD_CRT=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=$(usex libfuzzer)
                -DCOMPILER_RT_BUILD_PROFILE=$(usex profile)
-               -DCOMPILER_RT_BUILD_SANITIZERS=$(usex sanitize)
+               -DCOMPILER_RT_BUILD_SANITIZERS="${want_sanitizer}"
                -DCOMPILER_RT_BUILD_XRAY=$(usex xray)
 
                -DPython3_EXECUTABLE="${PYTHON}"

diff --git 
a/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1_rc2.ebuild 
b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1_rc2.ebuild
index 67e9b199c31..81547ee1605 100644
--- a/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1_rc2.ebuild
+++ b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-11.0.1_rc2.ebuild
@@ -12,9 +12,20 @@ HOMEPAGE="https://llvm.org/";
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
 SLOT="$(ver_cut 1-3)"
 KEYWORDS=""
-IUSE="+clang +libfuzzer +profile +sanitize test +xray elibc_glibc"
+IUSE="+clang test elibc_glibc"
+# base targets
+IUSE+=" +libfuzzer +profile +xray"
+# sanitizer targets, keep in sync with config-ix.cmake
+# NB: ubsan, scudo deliberately match two entries
+SANITIZER_FLAGS=(
+       asan dfsan lsan msan hwasan tsan ubsan safestack cfi scudo
+       shadowcallstack gwp-asan
+)
+IUSE+=" ${SANITIZER_FLAGS[@]/#/+}"
 REQUIRED_USE="
-       || ( libfuzzer profile sanitize xray )"
+       || ( ${SANITIZER_FLAGS[*]} libfuzzer profile xray )
+       gwp-asan? ( scudo )
+       ubsan? ( cfi )"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 CLANG_SLOT=${SLOT%%.*}
@@ -62,6 +73,20 @@ pkg_setup() {
 src_prepare() {
        sed -i -e 's:-Werror::' lib/tsan/go/buildgo.sh || die
 
+       local flag
+       for flag in "${SANITIZER_FLAGS[@]}"; do
+               if ! use "${flag}"; then
+                       local cmake_flag=${flag/-/_}
+                       sed -i -e 
"/COMPILER_RT_HAS_${cmake_flag^^}/s:TRUE:FALSE:" \
+                               cmake/config-ix.cmake || die
+               fi
+       done
+
+       if use asan && ! use profile; then
+               # TODO: fix these tests to be skipped upstream
+               rm test/asan/TestCases/asan_and_llvm_coverage_test.cpp || die
+       fi
+
        llvm.org_src_prepare
 }
 
@@ -75,6 +100,14 @@ src_configure() {
                strip-unsupported-flags
        fi
 
+       local flag want_sanitizer=OFF
+       for flag in "${SANITIZER_FLAGS[@]}"; do
+               if use "${flag}"; then
+                       want_sanitizer=ON
+                       break
+               fi
+       done
+
        local mycmakeargs=(
                -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${SLOT}"
                # use a build dir structure consistent with install
@@ -87,7 +120,7 @@ src_configure() {
                -DCOMPILER_RT_BUILD_CRT=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=$(usex libfuzzer)
                -DCOMPILER_RT_BUILD_PROFILE=$(usex profile)
-               -DCOMPILER_RT_BUILD_SANITIZERS=$(usex sanitize)
+               -DCOMPILER_RT_BUILD_SANITIZERS="${want_sanitizer}"
                -DCOMPILER_RT_BUILD_XRAY=$(usex xray)
 
                -DPython3_EXECUTABLE="${PYTHON}"

diff --git 
a/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-12.0.0.9999.ebuild 
b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-12.0.0.9999.ebuild
index 67e9b199c31..81547ee1605 100644
--- a/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-12.0.0.9999.ebuild
+++ b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-12.0.0.9999.ebuild
@@ -12,9 +12,20 @@ HOMEPAGE="https://llvm.org/";
 LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
 SLOT="$(ver_cut 1-3)"
 KEYWORDS=""
-IUSE="+clang +libfuzzer +profile +sanitize test +xray elibc_glibc"
+IUSE="+clang test elibc_glibc"
+# base targets
+IUSE+=" +libfuzzer +profile +xray"
+# sanitizer targets, keep in sync with config-ix.cmake
+# NB: ubsan, scudo deliberately match two entries
+SANITIZER_FLAGS=(
+       asan dfsan lsan msan hwasan tsan ubsan safestack cfi scudo
+       shadowcallstack gwp-asan
+)
+IUSE+=" ${SANITIZER_FLAGS[@]/#/+}"
 REQUIRED_USE="
-       || ( libfuzzer profile sanitize xray )"
+       || ( ${SANITIZER_FLAGS[*]} libfuzzer profile xray )
+       gwp-asan? ( scudo )
+       ubsan? ( cfi )"
 RESTRICT="!test? ( test ) !clang? ( test )"
 
 CLANG_SLOT=${SLOT%%.*}
@@ -62,6 +73,20 @@ pkg_setup() {
 src_prepare() {
        sed -i -e 's:-Werror::' lib/tsan/go/buildgo.sh || die
 
+       local flag
+       for flag in "${SANITIZER_FLAGS[@]}"; do
+               if ! use "${flag}"; then
+                       local cmake_flag=${flag/-/_}
+                       sed -i -e 
"/COMPILER_RT_HAS_${cmake_flag^^}/s:TRUE:FALSE:" \
+                               cmake/config-ix.cmake || die
+               fi
+       done
+
+       if use asan && ! use profile; then
+               # TODO: fix these tests to be skipped upstream
+               rm test/asan/TestCases/asan_and_llvm_coverage_test.cpp || die
+       fi
+
        llvm.org_src_prepare
 }
 
@@ -75,6 +100,14 @@ src_configure() {
                strip-unsupported-flags
        fi
 
+       local flag want_sanitizer=OFF
+       for flag in "${SANITIZER_FLAGS[@]}"; do
+               if use "${flag}"; then
+                       want_sanitizer=ON
+                       break
+               fi
+       done
+
        local mycmakeargs=(
                -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${SLOT}"
                # use a build dir structure consistent with install
@@ -87,7 +120,7 @@ src_configure() {
                -DCOMPILER_RT_BUILD_CRT=OFF
                -DCOMPILER_RT_BUILD_LIBFUZZER=$(usex libfuzzer)
                -DCOMPILER_RT_BUILD_PROFILE=$(usex profile)
-               -DCOMPILER_RT_BUILD_SANITIZERS=$(usex sanitize)
+               -DCOMPILER_RT_BUILD_SANITIZERS="${want_sanitizer}"
                -DCOMPILER_RT_BUILD_XRAY=$(usex xray)
 
                -DPython3_EXECUTABLE="${PYTHON}"

diff --git a/sys-libs/compiler-rt-sanitizers/metadata.xml 
b/sys-libs/compiler-rt-sanitizers/metadata.xml
index 8f5cbb8b29a..5f139415fce 100644
--- a/sys-libs/compiler-rt-sanitizers/metadata.xml
+++ b/sys-libs/compiler-rt-sanitizers/metadata.xml
@@ -11,5 +11,20 @@
                <flag name='profile'>Build profiling runtime.</flag>
                <flag name='sanitize'>Build sanitizer runtimes.</flag>
                <flag name='xray'>Build XRay runtime.</flag>
+
+               <flag name='asan'>Build Address Sanitizer runtime.</flag>
+               <flag name='dfsan'>Build Data Flow Sanitizer runtime.</flag>
+               <flag name='lsan'>Build Leak Sanitizer runtime.</flag>
+               <flag name='msan'>Build Memory Sanitizer runtime.</flag>
+               <flag name='hwasan'>Build Hardware ASAN runtime.</flag>
+               <flag name='tsan'>Build Thread Sanitizer runtime.</flag>
+               <flag name='ubsan'>
+                       Build Undefined Behavior Sanitizer runtime.
+               </flag>
+               <flag name='safestack'>Build SafeStack runtime.</flag>
+               <flag name='cfi'>Build Control Flow Integrity runtime.</flag>
+               <flag name='scudo'>Build Scudo Hardened Allocator.</flag>
+               <flag name='shadowcallstack'>Build ShadowCallStack.</flag>
+               <flag name='gwp-asan'>Build GWP-ASAN runtime.</flag>
        </use>
 </pkgmetadata>

Reply via email to