diff options
author | Martin Baulig <mabaul@microsoft.com> | 2018-10-09 19:39:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-09 19:39:21 +0300 |
commit | 134e5e64b336574ab07dd8912724378594b7680c (patch) | |
tree | e0b9cc5dd6e3311fa5297df25375eaa2ac949d55 | |
parent | 8f8db5fac5bf94a82114bd1dc04912fc160f362a (diff) | |
parent | 8201e5607cc52f6fdc0cb2c1b596c360bdaf5bd9 (diff) |
Merge pull request #13 from lateralusX/lateralusX/fix-no-asm-support
Reduce build dependencies when building with OPENSSL_NO_ASM.
-rw-r--r-- | CMakeLists.txt | 14 | ||||
-rw-r--r-- | crypto/CMakeLists.txt | 104 |
2 files changed, 66 insertions, 52 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5da9df33..59f46808 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,10 +15,14 @@ enable_language(CXX) if(ANDROID) # Android-NDK CMake files reconfigure the path and so Go and Perl won't be # found. However, ninja will still find them in $PATH if we just name them. - set(PERL_EXECUTABLE "perl") + if(NOT OPENSSL_NO_ASM) + set(PERL_EXECUTABLE "perl") + endif() # set(GO_EXECUTABLE "go") else() - find_package(Perl REQUIRED) + if(NOT OPENSSL_NO_ASM) + find_package(Perl REQUIRED) + endif() # find_program(GO_EXECUTABLE go) endif() @@ -82,6 +86,8 @@ elseif(MSVC) # (performance warning) "C4820" # 'bytes' bytes padding added after construct 'member_name' "C5027" # move assignment operator was implicitly defined as deleted + "C5045" # compiler will insert Spectre mitigation for memory load + # if /Qspectre switch specified ) set(MSVC_LEVEL4_WARNINGS_LIST # See https://connect.microsoft.com/VisualStudio/feedback/details/1217660/warning-c4265-when-using-functional-header @@ -185,7 +191,9 @@ if (ANDROID AND ${ARCH} STREQUAL "arm") # The Android-NDK CMake files somehow fail to set the -march flag for # assembly files. Without this flag, the compiler believes that it's # building for ARMv5. - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=${CMAKE_SYSTEM_PROCESSOR}") + if (NOT OPENSSL_NO_ASM) + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=${CMAKE_SYSTEM_PROCESSOR}") + endif() endif() # if (${ARCH} STREQUAL "x86" AND APPLE) diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 94e47ea1..f034e9e5 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -1,59 +1,65 @@ include_directories(../include) -if(APPLE) - if (${ARCH} STREQUAL "x86") - set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2") - endif() - set(PERLASM_STYLE macosx) - set(ASM_EXT S) - enable_language(ASM) -elseif(UNIX) - if (${ARCH} STREQUAL "aarch64") - # The "armx" Perl scripts look for "64" in the style argument - # in order to decide whether to generate 32- or 64-bit asm. - set(PERLASM_STYLE linux64) - elseif (${ARCH} STREQUAL "arm") - set(PERLASM_STYLE linux32) - elseif (${ARCH} STREQUAL "x86") - set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2") - set(PERLASM_STYLE elf) - else() - set(PERLASM_STYLE elf) - endif() - set(ASM_EXT S) - enable_language(ASM) - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack") -else() - if (CMAKE_CL_64) - message("Using nasm") - set(PERLASM_STYLE nasm) +if(NOT OPENSSL_NO_ASM) + if(APPLE) + if (${ARCH} STREQUAL "x86") + set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2") + endif() + set(PERLASM_STYLE macosx) + set(ASM_EXT S) + enable_language(ASM) + elseif(UNIX) + if (${ARCH} STREQUAL "aarch64") + # The "armx" Perl scripts look for "64" in the style argument + # in order to decide whether to generate 32- or 64-bit asm. + set(PERLASM_STYLE linux64) + elseif (${ARCH} STREQUAL "arm") + set(PERLASM_STYLE linux32) + elseif (${ARCH} STREQUAL "x86") + set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2") + set(PERLASM_STYLE elf) + else() + set(PERLASM_STYLE elf) + endif() + set(ASM_EXT S) + enable_language(ASM) + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack") else() - message("Using win32n") - set(PERLASM_STYLE win32n) - set(PERLASM_FLAGS "-DOPENSSL_IA32_SSE2") + if (CMAKE_CL_64) + message("Using nasm") + set(PERLASM_STYLE nasm) + else() + message("Using win32n") + set(PERLASM_STYLE win32n) + set(PERLASM_FLAGS "-DOPENSSL_IA32_SSE2") + endif() + + # On Windows, we use the NASM output, specifically built with Yasm. + set(ASM_EXT asm) + enable_language(ASM_NASM) endif() - # On Windows, we use the NASM output, specifically built with Yasm. - set(ASM_EXT asm) - enable_language(ASM_NASM) + function(perlasm dest src) + add_custom_command( + OUTPUT ${dest} + COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${PERLASM_FLAGS} ${ARGN} > ${dest} + DEPENDS + ${src} + ${PROJECT_SOURCE_DIR}/crypto/perlasm/arm-xlate.pl + ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl + ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl + ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl + ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86masm.pl + ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86nasm.pl + WORKING_DIRECTORY . + ) + endfunction() +else() + function(perlasm dest src) + # Disabled since OPENSSL_NO_ASM has been defined. + endfunction() endif() -function(perlasm dest src) - add_custom_command( - OUTPUT ${dest} - COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${PERLASM_FLAGS} ${ARGN} > ${dest} - DEPENDS - ${src} - ${PROJECT_SOURCE_DIR}/crypto/perlasm/arm-xlate.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86masm.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86nasm.pl - WORKING_DIRECTORY . - ) -endfunction() - # Level 0.1 - depends on nothing outside this set. add_subdirectory(stack) add_subdirectory(lhash) |