summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMalcolm Smith <smith@chaquo.com>2024-09-23 20:28:03 (GMT)
committerGitHub <noreply@github.com>2024-09-23 20:28:03 (GMT)
commit41e7992e319faba91b0c75a767b36ff8628a8368 (patch)
tree1815f753856b36cb6b00170964cf660ffa3f054b
parent7ee99217345af3010bf05b1f5241c661a5e0ea9b (diff)
downloadcpython-41e7992e319faba91b0c75a767b36ff8628a8368.zip
cpython-41e7992e319faba91b0c75a767b36ff8628a8368.tar.gz
cpython-41e7992e319faba91b0c75a767b36ff8628a8368.tar.bz2
gh-99108: Disable HACL SIMD code on older versions of Android (#124304)
Disable HACL SIMD code on older versions of Android
-rwxr-xr-xconfigure68
-rw-r--r--configure.ac84
2 files changed, 86 insertions, 66 deletions
diff --git a/configure b/configure
index 8c69b44..56b923b 100755
--- a/configure
+++ b/configure
@@ -30654,7 +30654,10 @@ case "$ac_sys_system" in
esac
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse -msse2 -msse3 -msse4.1 -msse4.2" >&5
+# The SIMD files use aligned_alloc, which is not available on older versions of
+# Android.
+if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse -msse2 -msse3 -msse4.1 -msse4.2" >&5
printf %s "checking whether C compiler accepts -msse -msse2 -msse3 -msse4.1 -msse4.2... " >&6; }
if test ${ax_cv_check_cflags__Werror__msse__msse2__msse3__msse4_1__msse4_2+y}
then :
@@ -30688,37 +30691,44 @@ printf "%s\n" "$ax_cv_check_cflags__Werror__msse__msse2__msse3__msse4_1__msse4_2
if test "x$ax_cv_check_cflags__Werror__msse__msse2__msse3__msse4_1__msse4_2" = xyes
then :
- LIBHACL_SIMD128_FLAGS="-msse -msse2 -msse3 -msse4.1 -msse4.2"
+ LIBHACL_SIMD128_FLAGS="-msse -msse2 -msse3 -msse4.1 -msse4.2"
printf "%s\n" "#define HACL_CAN_COMPILE_SIMD128 1" >>confdefs.h
- # macOS universal2 builds *support* the -msse etc flags because they're
- # available on x86_64. However, performance of the HACL SIMD128 implementation
- # isn't great, so it's disabled on ARM64.
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for HACL* SIMD128 implementation" >&5
+ # macOS universal2 builds *support* the -msse etc flags because they're
+ # available on x86_64. However, performance of the HACL SIMD128 implementation
+ # isn't great, so it's disabled on ARM64.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for HACL* SIMD128 implementation" >&5
printf %s "checking for HACL* SIMD128 implementation... " >&6; }
- if test "$UNIVERSAL_ARCHS" == "universal2"; then
- LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.o"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: universal2" >&5
+ if test "$UNIVERSAL_ARCHS" == "universal2"; then
+ LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.o"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: universal2" >&5
printf "%s\n" "universal2" >&6; }
- else
- LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: standard" >&5
+ else
+ LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: standard" >&5
printf "%s\n" "standard" >&6; }
- fi
+ fi
else $as_nop
:
fi
+fi
-
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mavx2" >&5
+# The SIMD files use aligned_alloc, which is not available on older versions of
+# Android.
+#
+# Although AVX support is not guaranteed on Android
+# (https://developer.android.com/ndk/guides/abis#86-64), this is safe because we do a
+# runtime CPUID check.
+if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mavx2" >&5
printf %s "checking whether C compiler accepts -mavx2... " >&6; }
if test ${ax_cv_check_cflags__Werror__mavx2+y}
then :
@@ -30752,32 +30762,32 @@ printf "%s\n" "$ax_cv_check_cflags__Werror__mavx2" >&6; }
if test "x$ax_cv_check_cflags__Werror__mavx2" = xyes
then :
- LIBHACL_SIMD256_FLAGS="-mavx2"
+ LIBHACL_SIMD256_FLAGS="-mavx2"
printf "%s\n" "#define HACL_CAN_COMPILE_SIMD256 1" >>confdefs.h
- # macOS universal2 builds *support* the -mavx2 compiler flag because it's
- # available on x86_64; but the HACL SIMD256 build then fails because the
- # implementation requires symbols that aren't available on ARM64. Use a
- # wrapped implementation if we're building for universal2.
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for HACL* SIMD256 implementation" >&5
+ # macOS universal2 builds *support* the -mavx2 compiler flag because it's
+ # available on x86_64; but the HACL SIMD256 build then fails because the
+ # implementation requires symbols that aren't available on ARM64. Use a
+ # wrapped implementation if we're building for universal2.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for HACL* SIMD256 implementation" >&5
printf %s "checking for HACL* SIMD256 implementation... " >&6; }
- if test "$UNIVERSAL_ARCHS" == "universal2"; then
- LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.o"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: universal2" >&5
+ if test "$UNIVERSAL_ARCHS" == "universal2"; then
+ LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.o"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: universal2" >&5
printf "%s\n" "universal2" >&6; }
- else
- LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: standard" >&5
+ else
+ LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: standard" >&5
printf "%s\n" "standard" >&6; }
- fi
+ fi
else $as_nop
:
fi
-
+fi
diff --git a/configure.ac b/configure.ac
index d3cdeb8..c4df726 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7817,47 +7817,57 @@ case "$ac_sys_system" in
esac
AC_SUBST([LIBHACL_CFLAGS])
-dnl This can be extended here to detect e.g. Power8, which HACL* should also support.
-AX_CHECK_COMPILE_FLAG([-msse -msse2 -msse3 -msse4.1 -msse4.2],[
- [LIBHACL_SIMD128_FLAGS="-msse -msse2 -msse3 -msse4.1 -msse4.2"]
-
- AC_DEFINE([HACL_CAN_COMPILE_SIMD128], [1], [HACL* library can compile SIMD128 implementations])
-
- # macOS universal2 builds *support* the -msse etc flags because they're
- # available on x86_64. However, performance of the HACL SIMD128 implementation
- # isn't great, so it's disabled on ARM64.
- AC_MSG_CHECKING([for HACL* SIMD128 implementation])
- if test "$UNIVERSAL_ARCHS" == "universal2"; then
- [LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.o"]
- AC_MSG_RESULT([universal2])
- else
- [LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o"]
- AC_MSG_RESULT([standard])
- fi
-
-], [], [-Werror])
+# The SIMD files use aligned_alloc, which is not available on older versions of
+# Android.
+if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then
+ dnl This can be extended here to detect e.g. Power8, which HACL* should also support.
+ AX_CHECK_COMPILE_FLAG([-msse -msse2 -msse3 -msse4.1 -msse4.2],[
+ [LIBHACL_SIMD128_FLAGS="-msse -msse2 -msse3 -msse4.1 -msse4.2"]
+
+ AC_DEFINE([HACL_CAN_COMPILE_SIMD128], [1], [HACL* library can compile SIMD128 implementations])
+
+ # macOS universal2 builds *support* the -msse etc flags because they're
+ # available on x86_64. However, performance of the HACL SIMD128 implementation
+ # isn't great, so it's disabled on ARM64.
+ AC_MSG_CHECKING([for HACL* SIMD128 implementation])
+ if test "$UNIVERSAL_ARCHS" == "universal2"; then
+ [LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.o"]
+ AC_MSG_RESULT([universal2])
+ else
+ [LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o"]
+ AC_MSG_RESULT([standard])
+ fi
+ ], [], [-Werror])
+fi
AC_SUBST([LIBHACL_SIMD128_FLAGS])
AC_SUBST([LIBHACL_SIMD128_OBJS])
-AX_CHECK_COMPILE_FLAG([-mavx2],[
- [LIBHACL_SIMD256_FLAGS="-mavx2"]
- AC_DEFINE([HACL_CAN_COMPILE_SIMD256], [1], [HACL* library can compile SIMD256 implementations])
-
- # macOS universal2 builds *support* the -mavx2 compiler flag because it's
- # available on x86_64; but the HACL SIMD256 build then fails because the
- # implementation requires symbols that aren't available on ARM64. Use a
- # wrapped implementation if we're building for universal2.
- AC_MSG_CHECKING([for HACL* SIMD256 implementation])
- if test "$UNIVERSAL_ARCHS" == "universal2"; then
- [LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.o"]
- AC_MSG_RESULT([universal2])
- else
- [LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o"]
- AC_MSG_RESULT([standard])
- fi
-], [], [-Werror])
-
+# The SIMD files use aligned_alloc, which is not available on older versions of
+# Android.
+#
+# Although AVX support is not guaranteed on Android
+# (https://developer.android.com/ndk/guides/abis#86-64), this is safe because we do a
+# runtime CPUID check.
+if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then
+ AX_CHECK_COMPILE_FLAG([-mavx2],[
+ [LIBHACL_SIMD256_FLAGS="-mavx2"]
+ AC_DEFINE([HACL_CAN_COMPILE_SIMD256], [1], [HACL* library can compile SIMD256 implementations])
+
+ # macOS universal2 builds *support* the -mavx2 compiler flag because it's
+ # available on x86_64; but the HACL SIMD256 build then fails because the
+ # implementation requires symbols that aren't available on ARM64. Use a
+ # wrapped implementation if we're building for universal2.
+ AC_MSG_CHECKING([for HACL* SIMD256 implementation])
+ if test "$UNIVERSAL_ARCHS" == "universal2"; then
+ [LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.o"]
+ AC_MSG_RESULT([universal2])
+ else
+ [LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o"]
+ AC_MSG_RESULT([standard])
+ fi
+ ], [], [-Werror])
+fi
AC_SUBST([LIBHACL_SIMD256_FLAGS])
AC_SUBST([LIBHACL_SIMD256_OBJS])