https://github.com/python/cpython/commit/41e7992e319faba91b0c75a767b36ff8628a8368
commit: 41e7992e319faba91b0c75a767b36ff8628a8368
branch: main
author: Malcolm Smith <[email protected]>
committer: freakboy3742 <[email protected]>
date: 2024-09-23T13:28:03-07:00
summary:

gh-99108: Disable HACL SIMD code on older versions of Android (#124304)

Disable HACL SIMD code on older versions of Android

files:
M configure
M configure.ac

diff --git a/configure b/configure
index 8c69b44ed7318e..56b923b764ec46 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 d3cdeb8a252a24..c4df726cd6a8ae 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])
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to