diff --git a/src/secp256k1/CMakeLists.txt b/src/secp256k1/CMakeLists.txt --- a/src/secp256k1/CMakeLists.txt +++ b/src/secp256k1/CMakeLists.txt @@ -65,9 +65,10 @@ set(USE_SCALAR_INV_BUILTIN 1) endif() +set(SECP256K1_USE_ASM "x86_64" CACHE STRING "Attempt to use the target ASM implementation. Can be x86_64 or ARM") + # We check if amd64 asm is supported. -option(SECP256K1_USE_ASM "Use assembly if available" ON) -if($SECP256K1_USE_ASM) +if(SECP256K1_USE_ASM MATCHES "x86_64") check_c_source_compiles(" #include int main() { @@ -76,8 +77,11 @@ return 0; } " USE_ASM_X86_64) -else() - set(USE_ASM_X86_64 0) +elseif(SECP256K1_USE_ASM MATCHES "ARM") + enable_language(ASM) + set(USE_EXTERNAL_ASM 1) + add_library(secp256k1_common src/asm/field_10x26_arm.s) + target_link_libraries(secp256k1 secp256k1_common) endif() # We make sure __int128 is defined diff --git a/src/secp256k1/src/libsecp256k1-config.h.cmake.in b/src/secp256k1/src/libsecp256k1-config.h.cmake.in --- a/src/secp256k1/src/libsecp256k1-config.h.cmake.in +++ b/src/secp256k1/src/libsecp256k1-config.h.cmake.in @@ -20,6 +20,7 @@ #cmakedefine USE_FIELD_10X26 #cmakedefine USE_ASM_X86_64 +#cmakedefine USE_EXTERNAL_ASM #cmakedefine USE_ENDOMORPHISM #cmakedefine USE_EXTERNAL_DEFAULT_CALLBACKS