From 052c06b2eac0f3b58810b90b98f3e40aedcbc720 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sat, 26 Aug 2017 18:47:04 -0400 Subject: [PATCH] Revert "Fix CMake compiler feature misdetection on under SunCC (GH #472)" This reverts commit 64def346cd8e. It broke AppVeyor and Travis builds (it tested good locally on Intel, Aarch and Solaris i86). CMake is so fucked up. I regret the day we added it to the project. --- CMakeLists.txt | 433 +++++++++++++++++++++++-------------------------- 1 file changed, 205 insertions(+), 228 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2ab9f8f..15321e86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_CXX_FLAGS AND CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(CMAKE_BUILD_TYPE RelWithDebInfo) -endif () +endif() set(cryptopp_VERSION_MAJOR 6) set(cryptopp_VERSION_MINOR 0) @@ -36,10 +36,10 @@ option(BUILD_TESTING "Build library tests" ON) option(BUILD_DOCUMENTATION "Use Doxygen to create the HTML based API documentation" OFF) option(USE_INTERMEDIATE_OBJECTS_TARGET "Use a common intermediate objects target for the static and shared library targets" ON) -if (CMAKE_VERSION VERSION_LESS 2.8.8 AND USE_INTERMEDIATE_OBJECTS_TARGET) +if(CMAKE_VERSION VERSION_LESS 2.8.8 AND USE_INTERMEDIATE_OBJECTS_TARGET) message(STATUS "Forcing USE_INTERMEDIATE_OBJECTS_TARGET to OFF - requires CMake >= 2.8.8") set(USE_INTERMEDIATE_OBJECTS_TARGET OFF CACHE BOOL "Use a common intermediate objects target for the static and shared library targets" FORCE) -endif () +endif() option(DISABLE_ASM "Disable ASM" OFF) option(DISABLE_SSSE3 "Disable SSSE3" OFF) @@ -59,72 +59,50 @@ set(CRYPTOPP_DATA_DIR "" CACHE PATH "Crypto++ test data directory") # Always 1 ahead in Master. Also see http://groups.google.com/forum/#!topic/cryptopp-users/SFhqLDTQPG4 set(LIB_VER ${cryptopp_VERSION_MAJOR}${cryptopp_VERSION_MINOR}${cryptopp_VERSION_PATCH}) +# Only set when cross-compiling, http://www.vtk.org/Wiki/CMake_Cross_Compiling +if (NOT (CMAKE_SYSTEM_VERSION AND CMAKE_SYSTEM_PROCESSOR)) + set(CRYPTOPP_CROSS_COMPILE 1) +else() + set(CRYPTOPP_CROSS_COMPILE 0) +endif() + # Don't use RPATH's. The resulting binary could fail a security audit. if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) set(CMAKE_MACOSX_RPATH 0) -endif () +endif() -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") +if(CMAKE_CXX_COMPILER_ID MATCHES "Intel") add_definitions(-wd68 -wd186 -wd279 -wd327 -wd161 -wd3180) -endif () +endif() # Also see http://github.com/weidai11/cryptopp/issues/395 -if (DISABLE_ASM) +if(DISABLE_ASM) add_definitions(-DCRYPTOPP_DISABLE_ASM) -endif () -if (DISABLE_SSSE3) +endif() +if(DISABLE_SSSE3) add_definitions(-DCRYPTOPP_DISABLE_SSSE3) -endif () -if (DISABLE_SSE4) +endif() +if(DISABLE_SSE4) add_definitions(-DCRYPTOPP_DISABLE_SSE4) -endif () -if (DISABLE_AESNI) +endif() +if(DISABLE_AESNI) add_definitions(-DCRYPTOPP_DISABLE_AESNI) -endif () -if (DISABLE_SHA) +endif() +if(DISABLE_SHA) add_definitions(-DCRYPTOPP_DISABLE_SHA) -endif () -if (NOT CRYPTOPP_DATA_DIR STREQUAL "") +endif() +if(NOT CRYPTOPP_DATA_DIR STREQUAL "") add_definitions(-DCRYPTOPP_DATA_DIR="${CRYPTOPP_DATA_DIR}") -endif () +endif() # CRYPTOPP_NATIVE_ARCH is set below once we know what it means to be "native" ############################################################################### -function(CheckCompilerOption option variable) - - if (${CMAKE_CXX_COMPILER_ID} STREQUAL "SunPro") - - message(STATUS "Performing Test ${variable}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${option} -E -xdumpmacros /dev/null 2>&1" - COMMAND egrep -i -c "illegal value ignored" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if (${COMMAND_RESULT} STREQUAL "1" AND ${COMMAND_OUTPUT} STREQUAL "0") - set("${${variable}}" 0 PARENT_SCOPE) - message(STATUS "Performing Test ${variable} - Success") - else () - set("${${variable}}" 1 PARENT_SCOPE) - message(STATUS "Performing Test ${variable} - Failed") - endif () - - else () - - CHECK_CXX_COMPILER_FLAG(${option} ${variable}) - - endif () -endfunction(CheckCompilerOption) - -############################################################################### - function(DumpMachine output pattern) execute_process( COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" - COMMAND egrep -i -c "${pattern}" + COMMAND egrep -i -c "${pattern}" # grep cmd intentionally not set/expanded, see http://github.com/weidai11/cryptopp/issues/466 OUTPUT_VARIABLE ${output} OUTPUT_STRIP_TRAILING_WHITESPACE) set(${output} "${${output}}" PARENT_SCOPE) @@ -145,23 +123,23 @@ DumpMachine(CRYPTOPP_ARM "\\|armhf|arm7l") # http://stackoverflow.com/q/ set(CRYPTOPP_SOLARIS 0) # Test SunCC for a string like 'CC: Sun C++ 5.13 SunOS_i386' -if (${CRYPTOPP_SOLARIS} STREQUAL "0") +if (CRYPTOPP_SOLARIS MATCHES "0") execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" COMMAND egrep -i -c "SunOS" OUTPUT_VARIABLE CRYPTOPP_SOLARIS OUTPUT_STRIP_TRAILING_WHITESPACE) -endif () +endif() # Test GCC for a string like 'i386-pc-solaris2.11' -if (${CRYPTOPP_SOLARIS} STREQUAL "0") +if (CRYPTOPP_SOLARIS MATCHES "0") execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" COMMAND egrep -i -c "Solaris" OUTPUT_VARIABLE CRYPTOPP_SOLARIS OUTPUT_STRIP_TRAILING_WHITESPACE) -endif () +endif() # DumpMachine SunCC style -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "SunPro") +if (CMAKE_CXX_COMPILER_ID MATCHES "SunPro") # SunCC is 32-bit, but it builds both 32 and 64 bit. Use execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" @@ -194,26 +172,24 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "SunPro") OUTPUT_VARIABLE KERNEL_SPARC64 OUTPUT_STRIP_TRAILING_WHITESPACE) - # Build for 32-bit on 64-bit kernels unless Native Arch is - # specified. Note that this is a policy provided by Sun. - if (${CRYPTOPP_NATIVE_ARCH} STREQUAL "1" AND KERNEL_I386) + if(CRYPTOPP_NATIVE_ARCH MATCHES "1" AND KERNEL_I386) unset(CRYPTOPP_AMD64) set(CRYPTOPP_I386 1) - elseif (${CRYPTOPP_NATIVE_ARCH} STREQUAL "1" AND KERNEL_AMD64) + elseif(CRYPTOPP_NATIVE_ARCH MATCHES "1" AND KERNEL_AMD64) unset(CRYPTOPP_I386) set(CRYPTOPP_AMD64 1) - elseif (${CRYPTOPP_NATIVE_ARCH} STREQUAL "1" AND KERNEL_SPARC) + elseif(CRYPTOPP_NATIVE_ARCH MATCHES "1" AND KERNEL_SPARC) unset(KERNEL_SPARC64) set(KERNEL_SPARC 1) - elseif (${CRYPTOPP_NATIVE_ARCH} STREQUAL "1" AND KERNEL_SPARC64) + elseif(CRYPTOPP_NATIVE_ARCH MATCHES "1" AND KERNEL_SPARC64) unset(KERNEL_SPARC) set(KERNEL_SPARC64 1) - endif () -endif () + endif() +endif() ############################################################################### -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") +if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} --version 2>&1" COMMAND egrep -i -c "macports" @@ -239,7 +215,7 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") if (GAS210_OR_LATER EQUAL 0) add_definitions(-DCRYPTOPP_DISABLE_ASM) set(DISABLE_ASM 1) - endif () + endif() execute_process(COMMAND echo ${GAS_STRING} COMMAND egrep -i -c "GNU assembler version (2\\.1[7-9]|2\\.[2-9]|[3-9])" @@ -247,7 +223,7 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") if (GAS217_OR_LATER EQUAL 0) add_definitions(-DCRYPTOPP_DISABLE_SSSE3) set(DISABLE_SSSE3 1) - endif () + endif() # OpenBSD and CentOS 5 needed this one due to ARIA and BLAKE2 execute_process(COMMAND echo ${GAS_STRING} @@ -256,7 +232,7 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") if (GAS218_OR_LATER EQUAL 0) add_definitions(-DCRYPTOPP_DISABLE_SSE4) set(DISABLE_SSE4 1) - endif () + endif() execute_process(COMMAND echo ${GAS_STRING} COMMAND egrep -i -c "GNU assembler version (2\\.19|2\\.[2-9]|[3-9])" @@ -264,7 +240,7 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") if (GAS219_OR_LATER EQUAL 0) add_definitions(-DCRYPTOPP_DISABLE_AESNI) set(DISABLE_AESNI 1) - endif () + endif() # Ubuntu 10 and Ubuntu 12 needed this one execute_process(COMMAND echo ${GAS_STRING} @@ -273,51 +249,57 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") if (GAS223_OR_LATER EQUAL 0) add_definitions(-DCRYPTOPP_DISABLE_SHA) set(DISABLE_SHA 1) - endif () - endif () - endif () -endif () + endif() + endif() + endif() +endif() # TODO: what about ICC and LLVM on Windows? -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC") - if (${CMAKE_SYSTEM_VERSION} MATCHES "10\\.0.*") +if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + if("${CMAKE_SYSTEM_VERSION}" MATCHES "10\\.0.*") SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D\"_WIN32_WINNT=0x0A00\"" ) - endif () + endif() SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FI\"winapifamily.h\"" ) -endif () +endif() -# Enable PIC for all target machines except 32-bit i386 due to register pressures. +# Enable PIC for all targets except 32-bit x86. +# Avoid on 32-bit x86 due to register pressures. if (NOT CRYPTOPP_I386) SET(CMAKE_POSITION_INDEPENDENT_CODE 1) -endif () +endif() # Solaris specific -if (${CRYPTOPP_SOLARIS} STREQUAL "1") +if(CRYPTOPP_SOLARIS MATCHES "1" AND CMAKE_CXX_COMPILER_ID MATCHES "SunPro") # Determine 32-bit vs 64-bit - if (${CRYPTOPP_AMD64} STREQUAL "1" OR ${CRYPTOPP_SPARC64} STREQUAL "1") + if (CRYPTOPP_AMD64 MATCHES "1" OR CRYPTOPP_SPARC64 MATCHES "1") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") - else () + else() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") - endif () + endif() # SunCC needs -template=no%extdef - if (${CMAKE_CXX_COMPILER_ID} STREQUAL "SunPro") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -template=no%extdef") - endif () + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -template=no%extdef") + +elseif(CRYPTOPP_SOLARIS MATCHES "1" AND CMAKE_CXX_COMPILER_ID MATCHES "GNU") + + # Determine 32-bit vs 64-bit + if (CRYPTOPP_AMD64 MATCHES "1" OR CRYPTOPP_SPARC64 MATCHES "1") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") + else() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") + endif() # GCC needs to enable use of '/' - if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,--divide") - endif () + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,--divide") -endif () +endif() # Link is driven through the compiler, but CXXFLAGS are not used. Also see # http://public.kitware.com/pipermail/cmake/2003-June/003967.html if (NOT (WINDOWS OR WINDOWS_STORE OR WINDOWS_PHONE)) SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_FLAGS}") -endif () +endif() #============================================================================ # Sources & headers @@ -325,11 +307,6 @@ endif () # Library headers file(GLOB cryptopp_HEADERS *.h) -# Remove headers used to build test suite -list(REMOVE_ITEM cryptopp_HEADERS - ${CMAKE_CURRENT_SOURCE_DIR}/bench.h - ${CMAKE_CURRENT_SOURCE_DIR}/validate.h - ) # Test sources. You can use the GNUmakefile to generate the list: `make sources`. file(GLOB cryptopp_SOURCES_TEST test.cpp bench1.cpp bench2.cpp validat0.cpp validat1.cpp validat2.cpp validat3.cpp adhoc.cpp datatest.cpp regtest1.cpp regtest2.cpp regtest3.cpp fipsalgt.cpp dlltest.cpp fipstest.cpp) @@ -355,298 +332,298 @@ set(cryptopp_SOURCES ${cryptopp_SOURCES} ) -if (MINGW OR WIN32) +if(MINGW OR WIN32) list(APPEND cryptopp_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/winpipes.cpp) -endif () +endif() -if (MSVC AND NOT DISABLE_ASM) - if (${CMAKE_GENERATOR} MATCHES ".*ARM") +if(MSVC AND NOT DISABLE_ASM) + if(${CMAKE_GENERATOR} MATCHES ".*ARM") message(STATUS "Disabling ASM because ARM is specified as target platform.") - else () - if (CMAKE_SIZEOF_VOID_P EQUAL 8) + else() + if(CMAKE_SIZEOF_VOID_P EQUAL 8) list(APPEND cryptopp_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/x64dll.asm) list(APPEND cryptopp_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/x64masm.asm) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/x64dll.asm PROPERTIES COMPILE_FLAGS "/D_M_X64") set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/x64masm.asm PROPERTIES COMPILE_FLAGS "/D_M_X64") set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/rdrand.asm PROPERTIES COMPILE_FLAGS "/D_M_X64") - else () + else() set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/x64dll.asm PROPERTIES COMPILE_FLAGS "/D_M_X86 /safeseh") set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/x64masm.asm PROPERTIES COMPILE_FLAGS "/D_M_X86 /safeseh") set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/rdrand.asm PROPERTIES COMPILE_FLAGS "/D_M_X86 /safeseh") - endif () + endif() list(APPEND cryptopp_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/rdrand.asm) enable_language(ASM_MASM) - endif () -endif () + endif() +endif() #============================================================================ # Architecture flags #============================================================================ # New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") +if (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")) - if (${CRYPTOPP_AMD64} STREQUAL "1" OR ${CRYPTOPP_I386} STREQUAL "1" OR ${CRYPTOPP_X32} STREQUAL "1") + if (("${CRYPTOPP_AMD64}" STREQUAL "1") OR ("${CRYPTOPP_I386}" STREQUAL "1") OR ("${CRYPTOPP_X32}" STREQUAL "1")) - CheckCompilerOption("-mssse3" CRYPTOPP_IA32_SSSE3) - CheckCompilerOption("-msse4.2" CRYPTOPP_IA32_SSE4) - CheckCompilerOption("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL) - CheckCompilerOption("-msse4.1 -maes" CRYPTOPP_IA32_AES) - CheckCompilerOption("-msse4.2 -msha" CRYPTOPP_IA32_SHA) - CheckCompilerOption("-march=native" CRYPTOPP_IA32_NATIVE) + CHECK_CXX_COMPILER_FLAG("-mssse3" CRYPTOPP_IA32_SSSE3) + CHECK_CXX_COMPILER_FLAG("-msse4.2" CRYPTOPP_IA32_SSE4) + CHECK_CXX_COMPILER_FLAG("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL) + CHECK_CXX_COMPILER_FLAG("-msse4.1 -maes" CRYPTOPP_IA32_AES) + CHECK_CXX_COMPILER_FLAG("-msse4.2 -msha" CRYPTOPP_IA32_SHA) + CHECK_CXX_COMPILER_FLAG("-march=native" CRYPTOPP_IA32_NATIVE) # Deferred native arch; added to all CXXFLAGS - if (${CRYPTOPP_NATIVE_ARCH} AND CRYPTOPP_IA32_NATIVE STREQUAL "1") + if (CRYPTOPP_NATIVE_ARCH AND "${CRYPTOPP_IA32_NATIVE}" STREQUAL "1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") - elseif (${CRYPTOPP_NATIVE_ARCH}) + elseif(CRYPTOPP_NATIVE_ARCH) message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture") - endif () + endif() - if (${CRYPTOPP_IA32_SSSE3} STREQUAL "1" AND NOT DISABLE_SSSE3) + if ("${CRYPTOPP_IA32_SSSE3}" STREQUAL "1" AND NOT DISABLE_SSSE3) set_source_files_properties(aria-simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - if (${CRYPTOPP_IA32_SSE4} STREQUAL "1" AND NOT DISABLE_SSE4) + if ("${CRYPTOPP_IA32_SSE4}" STREQUAL "1" AND NOT DISABLE_SSE4) set_source_files_properties(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2") set_source_files_properties(crc-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2") - if (${CRYPTOPP_IA32_CLMUL} STREQUAL "1" AND NOT DISABLE_AES) + if ("${CRYPTOPP_IA32_CLMUL}" STREQUAL "1" AND NOT DISABLE_AES) set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -mpclmul") - endif () - if (${CRYPTOPP_IA32_AES} STREQUAL "1" AND NOT DISABLE_AES) + endif() + if ("${CRYPTOPP_IA32_AES}" STREQUAL "1" AND NOT DISABLE_AES) set_source_files_properties(rijndael-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes") - endif () - if (${CRYPTOPP_IA32_SHA} STREQUAL "1" AND NOT DISABLE_SHA) + endif() + if ("${CRYPTOPP_IA32_SHA}" STREQUAL "1" AND NOT DISABLE_SHA) set_source_files_properties(sha-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") set_source_files_properties(shacal2-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") - endif () - endif () - endif () + endif() + endif() + endif() - elseif (${CRYPTOPP_AARCH32} STREQUAL "1" OR ${CRYPTOPP_AARCH64} STREQUAL "1") + elseif (("${CRYPTOPP_AARCH32}" STREQUAL "1") OR ("${CRYPTOPP_AARCH64}" STREQUAL "1") OR ("${CRYPTOPP_ARMV8}" STREQUAL "1")) - CheckCompilerOption("-march=armv8-a" CRYPTOPP_ARMV8A_BASE) - CheckCompilerOption("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC) - CheckCompilerOption("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO) - CheckCompilerOption("-march=armv8-a" CRYPTOPP_ARMV8A_NATIVE) + CHECK_CXX_COMPILER_FLAG("-march=armv8-a" CRYPTOPP_ARMV8A_ASIMD) + CHECK_CXX_COMPILER_FLAG("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC) + CHECK_CXX_COMPILER_FLAG("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO) + CHECK_CXX_COMPILER_FLAG("-march=armv8-a" CRYPTOPP_ARMV8A_NATIVE) # Deferred native arch; added to all CXXFLAGS - if (${CRYPTOPP_NATIVE_ARCH} AND ${CRYPTOPP_ARMV8A_NATIVE} STREQUAL "1") + if (CRYPTOPP_NATIVE_ARCH AND "${CRYPTOPP_ARMV8A_NATIVE}" STREQUAL "1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a") - elseif (${CRYPTOPP_NATIVE_ARCH}) + elseif(CRYPTOPP_NATIVE_ARCH) message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture") - endif () + endif() - if (${CRYPTOPP_ARMV8A_BASE} STREQUAL "1") + if ("${CRYPTOPP_ARMV8A_ASIMD}" STREQUAL "1") set_source_files_properties(aria-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") set_source_files_properties(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") set_source_files_properties(neon-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - endif () - if (${CRYPTOPP_ARMV8A_CRC} STREQUAL "1") + endif() + if ("${CRYPTOPP_ARMV8A_CRC}" STREQUAL "1") set_source_files_properties(crc-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crc") - endif () - if (${CRYPTOPP_ARMV8A_CRYPTO} STREQUAL "1") + endif() + if ("${CRYPTOPP_ARMV8A_CRYPTO}" STREQUAL "1") set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") set_source_files_properties(rijndael-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") set_source_files_properties(sha-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") set_source_files_properties(shacal2-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - endif () + endif() - elseif (${CRYPTOPP_ARM} STREQUAL "1" OR ${CRYPTOPP_ARMHF} STREQUAL "1") + elseif (("${CRYPTOPP_ARM}" STREQUAL "1") OR ("${CRYPTOPP_ARMHF}" STREQUAL "1")) - CheckCompilerOption("-march=armv7-a -mfloat-abi=hard -mfpu=neon" CRYPTOPP_ARMV7A_HARD) - CheckCompilerOption("-march=armv7-a -mfloat-abi=softfp -mfpu=neon" CRYPTOPP_ARMV7A_SOFTFP) + CHECK_CXX_COMPILER_FLAG("-march=armv7-a -mfloat-abi=hard -mfpu=neon" CRYPTOPP_ARMV7A_HARD) + CHECK_CXX_COMPILER_FLAG("-march=armv7-a -mfloat-abi=softfp -mfpu=neon" CRYPTOPP_ARMV7A_SOFTFP) # Deferred native arch; added to all CXXFLAGS - if (${CRYPTOPP_NATIVE_ARCH} AND ${CRYPTOPP_ARMV7A_HARD} STREQUAL "1") + if (CRYPTOPP_NATIVE_ARCH AND "${CRYPTOPP_ARMV7A_HARD}" STREQUAL "1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfloat-abi=hard -mfpu=neon") - elseif (${CRYPTOPP_NATIVE_ARCH} AND ${CRYPTOPP_ARMV7A_SOFTFP} STREQUAL "1") + elseif (CRYPTOPP_NATIVE_ARCH AND "${CRYPTOPP_ARMV7A_SOFTFP}" STREQUAL "1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp -mfpu=neon") - elseif (CRYPTOPP_NATIVE_ARCH) + elseif(CRYPTOPP_NATIVE_ARCH) message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture") - endif () + endif() - if (${CRYPTOPP_ARMV7A_HARD} STREQUAL "1") + if ("${CRYPTOPP_ARMV7A_HARD}" STREQUAL "1") # Need to set floating point ABI to something, like "hard" of "softfp". Most Linux use hard floats ("hard"). set_source_files_properties(aria-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon") set_source_files_properties(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon") set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon") set_source_files_properties(neon-simd.cpp PROPERTIES COMPILE_FLAGS "-mfloat-abi=hard -mfpu=neon") - elseif (${CRYPTOPP_ARMV7A_SOFTFP} STREQUAL "1") + elseif ("${CRYPTOPP_ARMV7A_SOFTFP}" STREQUAL "1") # Need to set floating point ABI to something, like "hard" of "softfp". Most Linux use hard floats ("hard"). set_source_files_properties(aria-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") set_source_files_properties(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") set_source_files_properties(neon-simd.cpp PROPERTIES COMPILE_FLAGS "-mfloat-abi=softfp -mfpu=neon") - endif () - endif () -endif () + endif() + endif() +endif() # New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "SunPro") +if (CMAKE_CXX_COMPILER_ID MATCHES "SunPro") - if (${CRYPTOPP_AMD64} STREQUAL "1" OR ${CRYPTOPP_I386} STREQUAL "1" OR ${CRYPTOPP_X32} STREQUAL "1") + if ((CRYPTOPP_AMD64 MATCHES "1") OR (CRYPTOPP_I386 MATCHES "1") OR (CRYPTOPP_X32 MATCHES "1")) - CheckCompilerOption("-xarch=ssse3" CRYPTOPP_IA32_SSSE3) - CheckCompilerOption("-xarch=sse4_2" CRYPTOPP_IA32_SSE4) - CheckCompilerOption("-xarch=aes" CRYPTOPP_IA32_CLMUL) - CheckCompilerOption("-xarch=aes" CRYPTOPP_IA32_AES) - CheckCompilerOption("-xarch=sha" CRYPTOPP_IA32_SHA) - CheckCompilerOption("-native" CRYPTOPP_IA32_NATIVE) + CHECK_CXX_COMPILER_FLAG("-xarch=ssse3" CRYPTOPP_IA32_SSSE3) + CHECK_CXX_COMPILER_FLAG("-xarch=sse4_2" CRYPTOPP_IA32_SSE4) + CHECK_CXX_COMPILER_FLAG("-xarch=aes" CRYPTOPP_IA32_CLMUL) + CHECK_CXX_COMPILER_FLAG("-xarch=aes" CRYPTOPP_IA32_AES) + CHECK_CXX_COMPILER_FLAG("-xarch=sha" CRYPTOPP_IA32_SHA) + CHECK_CXX_COMPILER_FLAG("-native" CRYPTOPP_IA32_NATIVE) # Deferred native arch; added to all CXXFLAGS - if (${CRYPTOPP_NATIVE_ARCH} AND CRYPTOPP_IA32_NATIVE STREQUAL "1") + if (CRYPTOPP_NATIVE_ARCH AND CRYPTOPP_IA32_NATIVE MATCHES "1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -native") - elseif (${CRYPTOPP_NATIVE_ARCH}) + elseif(CRYPTOPP_NATIVE_ARCH) message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture") - endif () + endif() - if (${CRYPTOPP_IA32_SSSE3} STREQUAL "1" AND NOT DISABLE_SSSE3) + if (CRYPTOPP_IA32_SSSE3 STREQUAL "1" AND NOT DISABLE_SSSE3) set_source_files_properties(aria-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - if (${CRYPTOPP_IA32_SSE4} STREQUAL "1" AND NOT DISABLE_SSE4) + if (CRYPTOPP_IA32_SSE4 MATCHES "1" AND NOT DISABLE_SSE4) set_source_files_properties(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_2") set_source_files_properties(crc-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_2") - if (${CRYPTOPP_IA32_CLMUL} STREQUAL "1" AND NOT DISABLE_AES) + if (CRYPTOPP_IA32_CLMUL MATCHES "1" AND NOT DISABLE_AES) set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - endif () - if (${CRYPTOPP_IA32_AES} STREQUAL "1" AND NOT DISABLE_AES) + endif() + if (CRYPTOPP_IA32_AES MATCHES "1" AND NOT DISABLE_AES) set_source_files_properties(rijndael-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - endif () - if (${CRYPTOPP_IA32_SHA} STREQUAL "1" AND NOT DISABLE_SHA) + endif() + if (CRYPTOPP_IA32_SHA MATCHES "1" AND NOT DISABLE_SHA) set_source_files_properties(sha-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") set_source_files_properties(shacal2-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") - endif () - endif () - endif () + endif() + endif() + endif() - elseif (${CRYPTOPP_SPARC} STREQUAL "1" OR ${CRYPTOPP_SPARC64} STREQUAL "1") + elseif (CRYPTOPP_SPARC MATCHES "1" OR CRYPTOPP_SPARC64 MATCHES "1") # Sparc's need -xmemalign=4i - CheckCompilerOption("-xmemalign=4i" CRYPTOPP_SPARC_MEMALIGN) + CHECK_CXX_COMPILER_FLAG("-xmemalign=4i" CRYPTOPP_SPARC_MEMALIGN) - if (${CRYPTOPP_SPARC}_MEMALIGN STREQUAL "1") + if (CRYPTOPP_SPARC_MEMALIGN MATCHES "1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xmemalign=4i") - endif () + endif() # Deferred native arch; added to all CXXFLAGS - if (${CRYPTOPP_NATIVE_ARCH} AND "${CRYPTOPP_SPARC_NATIVE}" STREQUAL "1") + if (CRYPTOPP_NATIVE_ARCH AND "${CRYPTOPP_SPARC_NATIVE}" STREQUAL "1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -native") - elseif (${CRYPTOPP_NATIVE_ARCH}) + elseif(CRYPTOPP_NATIVE_ARCH) message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture") - endif () + endif() - endif () -endif () + endif() +endif() #============================================================================ # Compile targets #============================================================================ # Set global includes BEFORE adding any targets for legacy CMake versions -if (CMAKE_VERSION VERSION_LESS 2.8.12) +if(CMAKE_VERSION VERSION_LESS 2.8.12) include_directories("${CMAKE_CURRENT_SOURCE_DIR}") -endif () +endif() -if (USE_INTERMEDIATE_OBJECTS_TARGET) +if(USE_INTERMEDIATE_OBJECTS_TARGET) add_library(cryptopp-object OBJECT ${cryptopp_SOURCES}) -endif () +endif() if (BUILD_STATIC) - if (USE_INTERMEDIATE_OBJECTS_TARGET) + if(USE_INTERMEDIATE_OBJECTS_TARGET) add_library(cryptopp-static STATIC $) - else () + else() add_library(cryptopp-static STATIC ${cryptopp_SOURCES}) - endif () + endif() if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) target_include_directories(cryptopp-static PUBLIC $ $) - endif () -endif () + endif() +endif() if (BUILD_SHARED) - if (USE_INTERMEDIATE_OBJECTS_TARGET) + if(USE_INTERMEDIATE_OBJECTS_TARGET) add_library(cryptopp-shared SHARED $) - else () + else() add_library(cryptopp-shared SHARED ${cryptopp_SOURCES}) - endif () + endif() if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) target_include_directories(cryptopp-shared PUBLIC $ $) - endif () -endif () + endif() +endif() # Set filenames for targets to be "cryptopp" -if (NOT MSVC) +if(NOT MSVC) set(COMPAT_VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}) if (BUILD_STATIC) set_target_properties(cryptopp-static PROPERTIES OUTPUT_NAME cryptopp) - endif () + endif() if (BUILD_SHARED) set_target_properties(cryptopp-shared PROPERTIES SOVERSION ${COMPAT_VERSION} OUTPUT_NAME cryptopp) - endif () -endif () + endif() +endif() # Targets, compatible with Crypto++ GNUMakefile if (BUILD_STATIC) add_custom_target(static) add_dependencies(static cryptopp-static) -endif () +endif() if (BUILD_SHARED) add_custom_target(dynamic) add_dependencies(dynamic cryptopp-shared) -endif () +endif() #============================================================================ # Third-party libraries #============================================================================ -if (WIN32) +if(WIN32) if (BUILD_STATIC) target_link_libraries(cryptopp-static ws2_32) - endif () + endif() if (BUILD_SHARED) target_link_libraries(cryptopp-shared ws2_32) - endif () -endif () + endif() +endif() # This may need to be expanded to "Solaris" if ("${UNAME_SYSTEM}" STREQUAL "SunOS") if (BUILD_STATIC) target_link_libraries(cryptopp-static nsl socket) - endif () + endif() if (BUILD_SHARED) target_link_libraries(cryptopp-shared nsl socket) - endif () -endif () + endif() +endif() find_package(Threads) if (BUILD_STATIC) target_link_libraries(cryptopp-static ${CMAKE_THREAD_LIBS_INIT}) -endif () +endif() if (BUILD_SHARED) target_link_libraries(cryptopp-shared ${CMAKE_THREAD_LIBS_INIT}) -endif () +endif() #============================================================================ # Tests #============================================================================ enable_testing() -if (BUILD_TESTING) +if(BUILD_TESTING) add_executable(cryptest ${cryptopp_SOURCES_TEST}) target_link_libraries(cryptest cryptopp-static) # Setting "cryptest" binary name to "cryptest.exe" - if (NOT WIN32) + if(NOT WIN32) set_target_properties(cryptest PROPERTIES OUTPUT_NAME cryptest.exe) - endif () - if (NOT TARGET cryptest.exe) + endif() + if(NOT TARGET cryptest.exe) add_custom_target(cryptest.exe) add_dependencies(cryptest.exe cryptest) - endif () + endif() file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/TestData DESTINATION ${PROJECT_BINARY_DIR}) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/TestVectors DESTINATION ${PROJECT_BINARY_DIR}) @@ -654,13 +631,13 @@ if (BUILD_TESTING) add_test(NAME build_cryptest COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target cryptest) add_test(NAME cryptest COMMAND $ v) set_tests_properties(cryptest PROPERTIES DEPENDS build_cryptest) -endif () +endif() #============================================================================ # Doxygen documentation #============================================================================ -if (BUILD_DOCUMENTATION) +if(BUILD_DOCUMENTATION) find_package(Doxygen REQUIRED) set(in_source_DOCS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/html-docs") @@ -672,14 +649,14 @@ if (BUILD_DOCUMENTATION) SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ) - if (NOT ${in_source_DOCS_DIR} STREQUAL ${out_source_DOCS_DIR}) + if(NOT ${in_source_DOCS_DIR} STREQUAL ${out_source_DOCS_DIR}) add_custom_command( TARGET docs POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${in_source_DOCS_DIR}" "${out_source_DOCS_DIR}" COMMAND ${CMAKE_COMMAND} -E remove_directory "${in_source_DOCS_DIR}" ) - endif () -endif () + endif() +endif() #============================================================================ # Install @@ -697,33 +674,33 @@ if (BUILD_SHARED) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) -endif () +endif() # Development package if (BUILD_STATIC) install(TARGETS cryptopp-static EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif () +endif() install(FILES ${cryptopp_HEADERS} DESTINATION include/cryptopp) # CMake Package -if (NOT CMAKE_VERSION VERSION_LESS 2.8.8) # CMakePackageConfigHelpers is supported from 2.8.8 +if(NOT CMAKE_VERSION VERSION_LESS 2.8.8) # CMakePackageConfigHelpers is supported from 2.8.8 include(CMakePackageConfigHelpers) write_basic_package_version_file("${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake" VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}.${cryptopp_VERSION_PATCH} COMPATIBILITY SameMajorVersion) install(FILES cryptopp-config.cmake ${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake DESTINATION "lib/cmake/cryptopp") install(EXPORT ${export_name} DESTINATION "lib/cmake/cryptopp") -endif () +endif() # Tests -if (BUILD_TESTING) +if(BUILD_TESTING) install(TARGETS cryptest DESTINATION ${CMAKE_INSTALL_BINDIR}) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/TestData DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/TestVectors DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) -endif () +endif() # Documentation -if (BUILD_DOCUMENTATION) +if(BUILD_DOCUMENTATION) install(DIRECTORY "${out_source_DOCS_DIR}" DESTINATION ${CMAKE_INSTALL_DOCDIR}) -endif () +endif() # Print a configuration summary. We want CXX and CXXFLAGS, but they are not includd in ALL. if (NOT CMAKE_VERSION VERSION_LESS 3.0.2) @@ -734,4 +711,4 @@ if (NOT CMAKE_VERSION VERSION_LESS 3.0.2) feature_summary(WHAT ALL VAR cryptoppFeatures) message(STATUS "${cryptoppFeatures}") -endif () +endif()