Revert "Fix CMake compiler feature misdetection on under SunCC (GH #472)"

This reverts commit 64def346cd. 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.
pull/474/head
Jeffrey Walton 2017-08-26 18:47:04 -04:00
parent 64def346cd
commit 052c06b2ea
1 changed files with 205 additions and 228 deletions

View File

@ -59,12 +59,19 @@ 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 # 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}) 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. # Don't use RPATH's. The resulting binary could fail a security audit.
if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
set(CMAKE_MACOSX_RPATH 0) 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) add_definitions(-wd68 -wd186 -wd279 -wd327 -wd161 -wd3180)
endif() endif()
@ -92,39 +99,10 @@ endif ()
############################################################################### ###############################################################################
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) function(DumpMachine output pattern)
execute_process( execute_process(
COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" 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_VARIABLE ${output}
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
set(${output} "${${output}}" PARENT_SCOPE) set(${output} "${${output}}" PARENT_SCOPE)
@ -145,7 +123,7 @@ DumpMachine(CRYPTOPP_ARM "\\<arm\\>|armhf|arm7l") # http://stackoverflow.com/q/
set(CRYPTOPP_SOLARIS 0) set(CRYPTOPP_SOLARIS 0)
# Test SunCC for a string like 'CC: Sun C++ 5.13 SunOS_i386' # 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" execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1"
COMMAND egrep -i -c "SunOS" COMMAND egrep -i -c "SunOS"
OUTPUT_VARIABLE CRYPTOPP_SOLARIS OUTPUT_VARIABLE CRYPTOPP_SOLARIS
@ -153,7 +131,7 @@ if (${CRYPTOPP_SOLARIS} STREQUAL "0")
endif() endif()
# Test GCC for a string like 'i386-pc-solaris2.11' # 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" execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1"
COMMAND egrep -i -c "Solaris" COMMAND egrep -i -c "Solaris"
OUTPUT_VARIABLE CRYPTOPP_SOLARIS OUTPUT_VARIABLE CRYPTOPP_SOLARIS
@ -161,7 +139,7 @@ if (${CRYPTOPP_SOLARIS} STREQUAL "0")
endif() endif()
# DumpMachine SunCC style # 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 # SunCC is 32-bit, but it builds both 32 and 64 bit. Use
execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1"
@ -194,18 +172,16 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "SunPro")
OUTPUT_VARIABLE KERNEL_SPARC64 OUTPUT_VARIABLE KERNEL_SPARC64
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
# Build for 32-bit on 64-bit kernels unless Native Arch is if(CRYPTOPP_NATIVE_ARCH MATCHES "1" AND KERNEL_I386)
# specified. Note that this is a policy provided by Sun.
if (${CRYPTOPP_NATIVE_ARCH} STREQUAL "1" AND KERNEL_I386)
unset(CRYPTOPP_AMD64) unset(CRYPTOPP_AMD64)
set(CRYPTOPP_I386 1) 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) unset(CRYPTOPP_I386)
set(CRYPTOPP_AMD64 1) 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) unset(KERNEL_SPARC64)
set(KERNEL_SPARC 1) 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) unset(KERNEL_SPARC)
set(KERNEL_SPARC64 1) set(KERNEL_SPARC64 1)
endif() endif()
@ -213,7 +189,7 @@ 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" execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} --version 2>&1"
COMMAND egrep -i -c "macports" COMMAND egrep -i -c "macports"
@ -279,37 +255,43 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
endif() endif()
# TODO: what about ICC and LLVM on Windows? # TODO: what about ICC and LLVM on Windows?
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC") if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
if (${CMAKE_SYSTEM_VERSION} MATCHES "10\\.0.*") if("${CMAKE_SYSTEM_VERSION}" MATCHES "10\\.0.*")
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D\"_WIN32_WINNT=0x0A00\"" ) SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D\"_WIN32_WINNT=0x0A00\"" )
endif() endif()
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FI\"winapifamily.h\"" ) 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) if (NOT CRYPTOPP_I386)
SET(CMAKE_POSITION_INDEPENDENT_CODE 1) SET(CMAKE_POSITION_INDEPENDENT_CODE 1)
endif() endif()
# Solaris specific # 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 # 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") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
else() else()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
endif() endif()
# SunCC needs -template=no%extdef # SunCC needs -template=no%extdef
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "SunPro")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -template=no%extdef") 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() endif()
# GCC needs to enable use of '/' # GCC needs to enable use of '/'
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,--divide") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,--divide")
endif ()
endif() endif()
@ -325,11 +307,6 @@ endif ()
# Library headers # Library headers
file(GLOB cryptopp_HEADERS *.h) 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`. # 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) 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)
@ -384,92 +361,92 @@ endif ()
#============================================================================ #============================================================================
# New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. # 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) CHECK_CXX_COMPILER_FLAG("-mssse3" CRYPTOPP_IA32_SSSE3)
CheckCompilerOption("-msse4.2" CRYPTOPP_IA32_SSE4) CHECK_CXX_COMPILER_FLAG("-msse4.2" CRYPTOPP_IA32_SSE4)
CheckCompilerOption("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL) CHECK_CXX_COMPILER_FLAG("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL)
CheckCompilerOption("-msse4.1 -maes" CRYPTOPP_IA32_AES) CHECK_CXX_COMPILER_FLAG("-msse4.1 -maes" CRYPTOPP_IA32_AES)
CheckCompilerOption("-msse4.2 -msha" CRYPTOPP_IA32_SHA) CHECK_CXX_COMPILER_FLAG("-msse4.2 -msha" CRYPTOPP_IA32_SHA)
CheckCompilerOption("-march=native" CRYPTOPP_IA32_NATIVE) CHECK_CXX_COMPILER_FLAG("-march=native" CRYPTOPP_IA32_NATIVE)
# Deferred native arch; added to all CXXFLAGS # 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") 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") 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") 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(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2")
set_source_files_properties(crc-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") set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -mpclmul")
endif() endif()
if (${CRYPTOPP_IA32_AES} STREQUAL "1" AND NOT DISABLE_AES) if ("${CRYPTOPP_IA32_AES}" STREQUAL "1" AND NOT DISABLE_AES)
set_source_files_properties(rijndael-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes") set_source_files_properties(rijndael-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes")
endif() endif()
if (${CRYPTOPP_IA32_SHA} STREQUAL "1" AND NOT DISABLE_SHA) 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(sha-simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha")
set_source_files_properties(shacal2-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) CHECK_CXX_COMPILER_FLAG("-march=armv8-a" CRYPTOPP_ARMV8A_ASIMD)
CheckCompilerOption("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC) CHECK_CXX_COMPILER_FLAG("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC)
CheckCompilerOption("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO) CHECK_CXX_COMPILER_FLAG("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO)
CheckCompilerOption("-march=armv8-a" CRYPTOPP_ARMV8A_NATIVE) CHECK_CXX_COMPILER_FLAG("-march=armv8-a" CRYPTOPP_ARMV8A_NATIVE)
# Deferred native arch; added to all CXXFLAGS # 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") 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") 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(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(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a")
set_source_files_properties(neon-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") set_source_files_properties(neon-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a")
endif() endif()
if (${CRYPTOPP_ARMV8A_CRC} STREQUAL "1") if ("${CRYPTOPP_ARMV8A_CRC}" STREQUAL "1")
set_source_files_properties(crc-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crc") set_source_files_properties(crc-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crc")
endif() endif()
if (${CRYPTOPP_ARMV8A_CRYPTO} STREQUAL "1") if ("${CRYPTOPP_ARMV8A_CRYPTO}" STREQUAL "1")
set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") 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(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(sha-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto")
set_source_files_properties(shacal2-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) CHECK_CXX_COMPILER_FLAG("-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=softfp -mfpu=neon" CRYPTOPP_ARMV7A_SOFTFP)
# Deferred native arch; added to all CXXFLAGS # 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") 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") 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") 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"). # 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(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(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(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") 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"). # 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(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(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon")
@ -480,55 +457,55 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQU
endif() endif()
# New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. # 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) CHECK_CXX_COMPILER_FLAG("-xarch=ssse3" CRYPTOPP_IA32_SSSE3)
CheckCompilerOption("-xarch=sse4_2" CRYPTOPP_IA32_SSE4) CHECK_CXX_COMPILER_FLAG("-xarch=sse4_2" CRYPTOPP_IA32_SSE4)
CheckCompilerOption("-xarch=aes" CRYPTOPP_IA32_CLMUL) CHECK_CXX_COMPILER_FLAG("-xarch=aes" CRYPTOPP_IA32_CLMUL)
CheckCompilerOption("-xarch=aes" CRYPTOPP_IA32_AES) CHECK_CXX_COMPILER_FLAG("-xarch=aes" CRYPTOPP_IA32_AES)
CheckCompilerOption("-xarch=sha" CRYPTOPP_IA32_SHA) CHECK_CXX_COMPILER_FLAG("-xarch=sha" CRYPTOPP_IA32_SHA)
CheckCompilerOption("-native" CRYPTOPP_IA32_NATIVE) CHECK_CXX_COMPILER_FLAG("-native" CRYPTOPP_IA32_NATIVE)
# Deferred native arch; added to all CXXFLAGS # 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") 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") 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") 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(blake2-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_2")
set_source_files_properties(crc-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") set_source_files_properties(gcm-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes")
endif() endif()
if (${CRYPTOPP_IA32_AES} STREQUAL "1" AND NOT DISABLE_AES) if (CRYPTOPP_IA32_AES MATCHES "1" AND NOT DISABLE_AES)
set_source_files_properties(rijndael-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") set_source_files_properties(rijndael-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes")
endif() endif()
if (${CRYPTOPP_IA32_SHA} STREQUAL "1" AND NOT DISABLE_SHA) 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(sha-simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha")
set_source_files_properties(shacal2-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 # 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") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xmemalign=4i")
endif() endif()
# Deferred native arch; added to all CXXFLAGS # 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") 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") message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture")
endif() endif()