commit:     619cfe3daec298493d31030008efc12e5ebbf7ec
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Mon Mar 29 18:00:00 2021 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Fri Apr  2 03:03:39 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=619cfe3d

dev-cpp/abseil-cpp: Fix building on ARM{32,64} CPUs without crypto extension.

Closes: https://bugs.gentoo.org/778926
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache.Org>
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>

 dev-cpp/abseil-cpp/abseil-cpp-20200923.2.ebuild          | 14 ++++++++++++--
 .../files/abseil-cpp-20200923-arm_no_crypto.patch        | 16 ++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/dev-cpp/abseil-cpp/abseil-cpp-20200923.2.ebuild 
b/dev-cpp/abseil-cpp/abseil-cpp-20200923.2.ebuild
index 8e62b032d05..90be485e13a 100644
--- a/dev-cpp/abseil-cpp/abseil-cpp-20200923.2.ebuild
+++ b/dev-cpp/abseil-cpp/abseil-cpp-20200923.2.ebuild
@@ -1,11 +1,11 @@
-# Copyright 2020 Gentoo Authors
+# Copyright 2020-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=7
 
 PYTHON_COMPAT=( python3_{7,8,9} )
 
-inherit cmake python-any-r1
+inherit cmake python-any-r1 toolchain-funcs
 
 # yes, it needs SOURCE, not just installed one
 GTEST_COMMIT="aee0f9d9b5b87796ee8a0ab26b7587ec30e8858e"
@@ -34,6 +34,10 @@ BDEPEND="
 
 RESTRICT="!test? ( test )"
 
+PATCHES=(
+       "${FILESDIR}/${PN}-20200923-arm_no_crypto.patch"
+)
+
 src_prepare() {
        cmake_src_prepare
 
@@ -53,6 +57,12 @@ src_prepare() {
 }
 
 src_configure() {
+       if use arm || use arm64; then
+               if [[ $($(tc-getCXX) ${CXXFLAGS} -E -P - <<<$'#if 
defined(__ARM_FEATURE_CRYPTO)\nHAVE_ARM_FEATURE_CRYPTO\n#endif') != 
*HAVE_ARM_FEATURE_CRYPTO* ]]; then
+                       append-cxxflags -DABSL_ARCH_ARM_NO_CRYPTO
+               fi
+       fi
+
        local mycmakeargs=(
                -DABSL_ENABLE_INSTALL=TRUE
                
-DABSL_LOCAL_GOOGLETEST_DIR="${WORKDIR}/googletest-${GTEST_COMMIT}"

diff --git a/dev-cpp/abseil-cpp/files/abseil-cpp-20200923-arm_no_crypto.patch 
b/dev-cpp/abseil-cpp/files/abseil-cpp-20200923-arm_no_crypto.patch
new file mode 100644
index 00000000000..b74a6c70e90
--- /dev/null
+++ b/dev-cpp/abseil-cpp/files/abseil-cpp-20200923-arm_no_crypto.patch
@@ -0,0 +1,16 @@
+--- /absl/random/internal/randen_hwaes.cc
++++ /absl/random/internal/randen_hwaes.cc
+@@ -50,8 +50,11 @@
+     (defined(__ARM_NEON) && defined(__ARM_FEATURE_CRYPTO))
+ #define ABSL_RANDEN_HWAES_IMPL 1
+ 
+-#elif ABSL_RANDOM_INTERNAL_AES_DISPATCH && !defined(__APPLE__) && \
+-    (defined(__GNUC__) && __GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ > 9)
++// When ABSL_ARCH_ARM_NO_CRYPTO is defined, then ARM CPU without
++// crypto extension is assumed.
++#elif !defined(ABSL_ARCH_ARM_NO_CRYPTO) && \
++    (ABSL_RANDOM_INTERNAL_AES_DISPATCH && !defined(__APPLE__) && \
++    (defined(__GNUC__) && __GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ > 
9))
+ // ...or, on GCC, we can use an ASM directive to
+ // instruct the assember to allow crypto instructions.
+ #define ABSL_RANDEN_HWAES_IMPL 1

Reply via email to