@@ -7817,47 +7817,57 @@ case "$ac_sys_system" in
7817
7817
esac
7818
7818
AC_SUBST ( [ LIBHACL_CFLAGS] )
7819
7819
7820
- dnl This can be extended here to detect e.g. Power8, which HACL* should also support.
7821
- AX_CHECK_COMPILE_FLAG ( [ -msse -msse2 -msse3 -msse4.1 -msse4.2] ,[
7822
- [ LIBHACL_SIMD128_FLAGS="-msse -msse2 -msse3 -msse4.1 -msse4.2"]
7823
-
7824
- AC_DEFINE ( [ HACL_CAN_COMPILE_SIMD128] , [ 1] , [ HACL* library can compile SIMD128 implementations] )
7825
-
7826
- # macOS universal2 builds *support* the -msse etc flags because they're
7827
- # available on x86_64. However, performance of the HACL SIMD128 implementation
7828
- # isn't great, so it's disabled on ARM64.
7829
- AC_MSG_CHECKING ( [ for HACL* SIMD128 implementation] )
7830
- if test "$UNIVERSAL_ARCHS" == "universal2"; then
7831
- [ LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.o"]
7832
- AC_MSG_RESULT ( [ universal2] )
7833
- else
7834
- [ LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o"]
7835
- AC_MSG_RESULT ( [ standard] )
7836
- fi
7837
-
7838
- ] , [ ] , [ -Werror] )
7820
+ # The SIMD files use aligned_alloc, which is not available on older versions of
7821
+ # Android.
7822
+ if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then
7823
+ dnl This can be extended here to detect e.g. Power8, which HACL* should also support.
7824
+ AX_CHECK_COMPILE_FLAG ( [ -msse -msse2 -msse3 -msse4.1 -msse4.2] ,[
7825
+ [ LIBHACL_SIMD128_FLAGS="-msse -msse2 -msse3 -msse4.1 -msse4.2"]
7826
+
7827
+ AC_DEFINE ( [ HACL_CAN_COMPILE_SIMD128] , [ 1] , [ HACL* library can compile SIMD128 implementations] )
7828
+
7829
+ # macOS universal2 builds *support* the -msse etc flags because they're
7830
+ # available on x86_64. However, performance of the HACL SIMD128 implementation
7831
+ # isn't great, so it's disabled on ARM64.
7832
+ AC_MSG_CHECKING ( [ for HACL* SIMD128 implementation] )
7833
+ if test "$UNIVERSAL_ARCHS" == "universal2"; then
7834
+ [ LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.o"]
7835
+ AC_MSG_RESULT ( [ universal2] )
7836
+ else
7837
+ [ LIBHACL_SIMD128_OBJS="Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o"]
7838
+ AC_MSG_RESULT ( [ standard] )
7839
+ fi
7839
7840
7841
+ ] , [ ] , [ -Werror] )
7842
+ fi
7840
7843
AC_SUBST ( [ LIBHACL_SIMD128_FLAGS] )
7841
7844
AC_SUBST ( [ LIBHACL_SIMD128_OBJS] )
7842
7845
7843
- AX_CHECK_COMPILE_FLAG ( [ -mavx2] ,[
7844
- [ LIBHACL_SIMD256_FLAGS="-mavx2"]
7845
- AC_DEFINE ( [ HACL_CAN_COMPILE_SIMD256] , [ 1] , [ HACL* library can compile SIMD256 implementations] )
7846
-
7847
- # macOS universal2 builds *support* the -mavx2 compiler flag because it's
7848
- # available on x86_64; but the HACL SIMD256 build then fails because the
7849
- # implementation requires symbols that aren't available on ARM64. Use a
7850
- # wrapped implementation if we're building for universal2.
7851
- AC_MSG_CHECKING ( [ for HACL* SIMD256 implementation] )
7852
- if test "$UNIVERSAL_ARCHS" == "universal2"; then
7853
- [ LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.o"]
7854
- AC_MSG_RESULT ( [ universal2] )
7855
- else
7856
- [ LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o"]
7857
- AC_MSG_RESULT ( [ standard] )
7858
- fi
7859
- ] , [ ] , [ -Werror] )
7860
-
7846
+ # The SIMD files use aligned_alloc, which is not available on older versions of
7847
+ # Android.
7848
+ #
7849
+ # Although AVX support is not guaranteed on Android
7850
+ # (https://developer.android.com/ndk/guides/abis#86-64), this is safe because we do a
7851
+ # runtime CPUID check.
7852
+ if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then
7853
+ AX_CHECK_COMPILE_FLAG ( [ -mavx2] ,[
7854
+ [ LIBHACL_SIMD256_FLAGS="-mavx2"]
7855
+ AC_DEFINE ( [ HACL_CAN_COMPILE_SIMD256] , [ 1] , [ HACL* library can compile SIMD256 implementations] )
7856
+
7857
+ # macOS universal2 builds *support* the -mavx2 compiler flag because it's
7858
+ # available on x86_64; but the HACL SIMD256 build then fails because the
7859
+ # implementation requires symbols that aren't available on ARM64. Use a
7860
+ # wrapped implementation if we're building for universal2.
7861
+ AC_MSG_CHECKING ( [ for HACL* SIMD256 implementation] )
7862
+ if test "$UNIVERSAL_ARCHS" == "universal2"; then
7863
+ [ LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.o"]
7864
+ AC_MSG_RESULT ( [ universal2] )
7865
+ else
7866
+ [ LIBHACL_SIMD256_OBJS="Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o"]
7867
+ AC_MSG_RESULT ( [ standard] )
7868
+ fi
7869
+ ] , [ ] , [ -Werror] )
7870
+ fi
7861
7871
AC_SUBST ( [ LIBHACL_SIMD256_FLAGS] )
7862
7872
AC_SUBST ( [ LIBHACL_SIMD256_OBJS] )
7863
7873
0 commit comments