diff --git a/CMakeLists.txt b/CMakeLists.txt index c9ce99d..cecaafe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,6 @@ endif() add_definitions(-DLIBRESSL_INTERNAL) add_definitions(-DOPENSSL_NO_HW_PADLOCK) -add_definitions(-DOPENSSL_NO_ASM) set(CMAKE_POSITION_INDEPENDENT_CODE true) @@ -182,6 +181,14 @@ if(HAVE_ERR_H) add_definitions(-DHAVE_ERR_H) endif() +if("${CMAKE_C_COMPILER_ABI}" STREQUAL "ELF" AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" AND ENABLE_ASM) + set(HOST_ASM_ELF_X86_64 true) +endif() + +if(APPLE AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" AND ENABLE_ASM) + set(HOST_ASM_MACOSX_X86_64 true) +endif() + set(OPENSSL_LIBS ssl crypto) if(CMAKE_HOST_WIN32) set(OPENSSL_LIBS ${OPENSSL_LIBS} ws2_32) diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 24c6821..4086168 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -8,16 +8,107 @@ include_directories( modes ) +if(HOST_ASM_ELF_X86_64) + set( + ASM_X86_64_ELF_SRC + aes/aes-elf-x86_64.s + aes/bsaes-elf-x86_64.s + aes/vpaes-elf-x86_64.s + aes/aesni-elf-x86_64.s + aes/aesni-sha1-elf-x86_64.s + bn/modexp512-elf-x86_64.s + bn/mont-elf-x86_64.s + bn/mont5-elf-x86_64.s + bn/gf2m-elf-x86_64.s + camellia/cmll-elf-x86_64.s + md5/md5-elf-x86_64.s + modes/ghash-elf-x86_64.s + rc4/rc4-elf-x86_64.s + rc4/rc4-md5-elf-x86_64.s + sha/sha1-elf-x86_64.s + sha/sha256-elf-x86_64.S + sha/sha512-elf-x86_64.S + whrlpool/wp-elf-x86_64.s + cpuid-elf-x86_64.S + ) + add_definitions(-DAES_ASM) + add_definitions(-DBSAES_ASM) + add_definitions(-DVPAES_ASM) + add_definitions(-DOPENSSL_IA32_SSE2) + add_definitions(-DOPENSSL_BN_ASM_MONT) + add_definitions(-DOPENSSL_BN_ASM_MONT5) + add_definitions(-DOPENSSL_BN_ASM_GF2m) + add_definitions(-DMD5_ASM) + add_definitions(-DGHASH_ASM) + add_definitions(-DRSA_ASM) + add_definitions(-DSHA1_ASM) + add_definitions(-DSHA256_ASM) + add_definitions(-DSHA512_ASM) + add_definitions(-DWHIRLPOOL_ASM) + add_definitions(-DOPENSSL_CPUID_OBJ) + set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_ELF_SRC}) + set_property(SOURCE ${ASM_X86_64_ELF_SRC} PROPERTY LANGUAGE C) +endif() + +if(HOST_ASM_MACOSX_X86_64) + set( + ASM_X86_64_MACOSX_SRC + aes/aes-macosx-x86_64.s + aes/bsaes-macosx-x86_64.s + aes/vpaes-macosx-x86_64.s + aes/aesni-macosx-x86_64.s + aes/aesni-sha1-macosx-x86_64.s + bn/modexp512-macosx-x86_64.s + bn/mont-macosx-x86_64.s + bn/mont5-macosx-x86_64.s + bn/gf2m-macosx-x86_64.s + camellia/cmll-macosx-x86_64.s + md5/md5-macosx-x86_64.s + modes/ghash-macosx-x86_64.s + rc4/rc4-macosx-x86_64.s + rc4/rc4-md5-macosx-x86_64.s + sha/sha1-macosx-x86_64.s + sha/sha256-macosx-x86_64.S + sha/sha512-macosx-x86_64.S + whrlpool/wp-macosx-x86_64.s + cpuid-macosx-x86_64.S + ) + add_definitions(-DAES_ASM) + add_definitions(-DBSAES_ASM) + add_definitions(-DVPAES_ASM) + add_definitions(-DOPENSSL_IA32_SSE2) + add_definitions(-DOPENSSL_BN_ASM_MONT) + add_definitions(-DOPENSSL_BN_ASM_MONT5) + add_definitions(-DOPENSSL_BN_ASM_GF2m) + add_definitions(-DMD5_ASM) + add_definitions(-DGHASH_ASM) + add_definitions(-DRSA_ASM) + add_definitions(-DSHA1_ASM) + add_definitions(-DSHA256_ASM) + add_definitions(-DSHA512_ASM) + add_definitions(-DWHIRLPOOL_ASM) + add_definitions(-DOPENSSL_CPUID_OBJ) + set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_MACOSX_SRC}) + set_property(SOURCE ${ASM_X86_64_MACOSX_SRC} PROPERTY LANGUAGE C) +endif() + +if((NOT HOST_ASM_ELF_X86_64) AND (NOT HOST_ASM_MACOSX_X86_64)) + set( + CRYPTO_SRC + ${CRYPTO_SRC} + aes/aes_cbc.c + aes/aes_core.c + camellia/camellia.c + camellia/cmll_cbc.c + rc4/rc4_enc.c + rc4/rc4_skey.c + whrlpool/wp_block.c + ) +endif() + set( CRYPTO_SRC - - aes/aes_cbc.c - aes/aes_core.c - camellia/camellia.c - camellia/cmll_cbc.c - rc4/rc4_enc.c - rc4/rc4_skey.c - whrlpool/wp_block.c + ${CRYPTO_SRC} cpt_err.c cryptlib.c cversion.c @@ -643,6 +734,14 @@ if(NOT HAVE_TIMINGSAFE_MEMCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_memcmp.c) endif() +if(NOT ENABLE_ASM) + add_definitions(-DOPENSSL_NO_ASM) +else() + if(CMAKE_HOST_WIN32) + add_definitions(-DOPENSSL_NO_ASM) + endif() +endif() + if (BUILD_SHARED) add_library(crypto-objects OBJECT ${CRYPTO_SRC}) add_library(crypto STATIC $)