externals: Switch to newer cryptopp-cmake. (#6242)
This commit is contained in:
parent
bd1cabce86
commit
a298e4969b
|
@ -15,7 +15,7 @@ export ASM="clang"
|
|||
ccache -s
|
||||
|
||||
mkdir build && cd build
|
||||
# TODO: CryptoPP and LibreSSL ASM disabled due to platform detection issues in build.
|
||||
# TODO: LibreSSL ASM disabled due to platform detection issues in build.
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
|
||||
-DENABLE_QT_TRANSLATION=ON \
|
||||
|
@ -24,7 +24,6 @@ cmake .. -DCMAKE_BUILD_TYPE=Release \
|
|||
-DUSE_DISCORD_PRESENCE=ON \
|
||||
-DENABLE_FFMPEG_AUDIO_DECODER=ON \
|
||||
-DENABLE_FFMPEG_VIDEO_DUMPER=ON \
|
||||
-DCRYPTOPP_OPT_DISABLE_ASM=ON \
|
||||
-DENABLE_ASM=OFF \
|
||||
-GNinja
|
||||
ninja
|
||||
|
|
6
.gitmodules
vendored
6
.gitmodules
vendored
|
@ -16,9 +16,6 @@
|
|||
[submodule "xbyak"]
|
||||
path = externals/xbyak
|
||||
url = https://github.com/herumi/xbyak.git
|
||||
[submodule "cryptopp"]
|
||||
path = externals/cryptopp/cryptopp
|
||||
url = https://github.com/weidai11/cryptopp.git
|
||||
[submodule "fmt"]
|
||||
path = externals/fmt
|
||||
url = https://github.com/fmtlib/fmt.git
|
||||
|
@ -58,3 +55,6 @@
|
|||
[submodule "sdl2"]
|
||||
path = externals/sdl2/SDL
|
||||
url = https://github.com/libsdl-org/SDL
|
||||
[submodule "cryptopp-cmake"]
|
||||
path = externals/cryptopp-cmake
|
||||
url = https://github.com/abdes/cryptopp-cmake.git
|
||||
|
|
19
externals/CMakeLists.txt
vendored
19
externals/CMakeLists.txt
vendored
|
@ -29,7 +29,24 @@ set(CATCH_INSTALL_EXTRAS OFF)
|
|||
add_subdirectory(catch2)
|
||||
|
||||
# Crypto++
|
||||
add_subdirectory(cryptopp)
|
||||
set(CRYPTOPP_BUILD_DOCUMENTATION OFF)
|
||||
set(CRYPTOPP_BUILD_TESTING OFF)
|
||||
set(CRYPTOPP_INSTALL OFF)
|
||||
add_subdirectory(cryptopp-cmake)
|
||||
|
||||
# HACK: The logic to set up the base include directory for CryptoPP does not work with Android SDK CMake 3.22.1.
|
||||
# Until there is a fixed version available, this code will detect and add in the proper include if it does not exist.
|
||||
if(ANDROID)
|
||||
message(STATUS "Applying CryptoPP include fix.")
|
||||
get_target_property(CRYPTOPP_INCLUDES cryptopp INTERFACE_INCLUDE_DIRECTORIES)
|
||||
foreach(CRYPTOPP_INCLUDE ${CRYPTOPP_INCLUDES})
|
||||
if("${CRYPTOPP_INCLUDE}" MATCHES "\\$<BUILD_INTERFACE:(.*)/cryptopp>")
|
||||
message(STATUS "Fixed include path: ${CMAKE_MATCH_1}")
|
||||
target_include_directories(cryptopp PUBLIC $<BUILD_INTERFACE:${CMAKE_MATCH_1}>)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# fmt and Xbyak need to be added before dynarmic
|
||||
# libfmt
|
||||
|
|
1
externals/cryptopp-cmake
vendored
Submodule
1
externals/cryptopp-cmake
vendored
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 15798ac9c2611d5c7f9ba832e2c9159bdd8945f2
|
449
externals/cryptopp/CMakeLists.txt
vendored
449
externals/cryptopp/CMakeLists.txt
vendored
|
@ -1,449 +0,0 @@
|
|||
# A trimmed down version of the CMakeLists.txt from noloader/cryptopp-cmake
|
||||
# The differences are:
|
||||
# - removed support for legacy CMake versions
|
||||
# - removed support for 32-bit
|
||||
# - added prefix "CRYPTOPP_OPT_" to all option names
|
||||
# - disabled testing
|
||||
# - disabled installation
|
||||
# - disabled documentation
|
||||
# - configured to build a static library only
|
||||
# - adds include directories to the library target
|
||||
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
if (POLICY CMP0048)
|
||||
cmake_policy(SET CMP0048 NEW)
|
||||
endif ()
|
||||
project(cryptopp VERSION 8.5.0)
|
||||
if (POLICY CMP0054)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
endif ()
|
||||
|
||||
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cryptopp)
|
||||
|
||||
include(TestBigEndian)
|
||||
include(GNUInstallDirs)
|
||||
include(CheckCXXCompilerFlag)
|
||||
|
||||
set(TEST_PROG_DIR ${SRC_DIR}/TestPrograms)
|
||||
set(TEST_CXX_FILE ${TEST_PROG_DIR}/test_cxx.cxx)
|
||||
|
||||
#============================================================================
|
||||
# Settable options
|
||||
#============================================================================
|
||||
|
||||
option(CRYPTOPP_OPT_DISABLE_ASM "Disable ASM" OFF)
|
||||
option(CRYPTOPP_OPT_DISABLE_SSSE3 "Disable SSSE3" OFF)
|
||||
option(CRYPTOPP_OPT_DISABLE_SSE4 "Disable SSE4" OFF)
|
||||
option(CRYPTOPP_OPT_DISABLE_AESNI "Disable AES-NI" OFF)
|
||||
option(CRYPTOPP_OPT_DISABLE_SHA "Disable SHA" OFF)
|
||||
option(CRYPTOPP_OPT_DISABLE_AVX "Disable AVX" OFF)
|
||||
option(CRYPTOPP_OPT_DISABLE_AVX2 "Disable AVX2" OFF)
|
||||
|
||||
#============================================================================
|
||||
# Compiler options
|
||||
#============================================================================
|
||||
|
||||
# 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()
|
||||
|
||||
set(CRYPTOPP_COMPILE_DEFINITIONS)
|
||||
set(CRYPTOPP_COMPILE_OPTIONS)
|
||||
|
||||
# Don't use RPATH's. The resulting binary could fail a security audit.
|
||||
set(CMAKE_MACOSX_RPATH 0)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS -wd68 -wd186 -wd279 -wd327 -wd161 -wd3180)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
# Disable C4390: empty controlled statement found: is this the intent?
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4390")
|
||||
endif()
|
||||
|
||||
# Endianness
|
||||
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
|
||||
if(IS_BIG_ENDIAN)
|
||||
add_definitions(-DIS_BIG_ENDIAN)
|
||||
endif()
|
||||
|
||||
if (CRYPTOPP_OPT_DISABLE_ASM)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ASM)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_SSSE3)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE3)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_SSE4)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE4)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_CLMUL)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_CLMUL)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_AESNI)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AESNI)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_RDRAND)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_RDRAND)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_RDSEED)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_RDSEED)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_AVX)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AVX)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_AVX2)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AVX2)
|
||||
endif ()
|
||||
if (CRYPTOPP_OPT_DISABLE_SHA)
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SHA)
|
||||
endif ()
|
||||
|
||||
# We need the output 'uname -s' for Unix and Linux system detection
|
||||
if (NOT CRYPTOPP_CROSS_COMPILE)
|
||||
set (UNAME_CMD "uname")
|
||||
set (UNAME_ARG "-s")
|
||||
execute_process(COMMAND ${UNAME_CMD} ${UNAME_ARG}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
RESULT_VARIABLE UNAME_RESULT
|
||||
OUTPUT_VARIABLE UNAME_SYSTEM)
|
||||
string(REGEX REPLACE "\n$" "" UNAME_SYSTEM "${UNAME_SYSTEM}")
|
||||
endif()
|
||||
|
||||
# We need the output 'uname -m' for Unix and Linux platform detection
|
||||
if (NOT CRYPTOPP_CROSS_COMPILE)
|
||||
set (UNAME_CMD "uname")
|
||||
set (UNAME_ARG "-m")
|
||||
execute_process(COMMAND ${UNAME_CMD} ${UNAME_ARG}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
RESULT_VARIABLE UNAME_RESULT
|
||||
OUTPUT_VARIABLE UNAME_MACHINE)
|
||||
string(REGEX REPLACE "\n$" "" UNAME_MACHINE "${UNAME_MACHINE}")
|
||||
endif()
|
||||
|
||||
###############################################################################
|
||||
|
||||
# Try to find a Posix compatible grep and sed. Solaris, Digital Unix,
|
||||
# Tru64, HP-UX and a few others need tweaking
|
||||
|
||||
if (EXISTS /usr/xpg4/bin/grep)
|
||||
set(GREP_CMD /usr/xpg4/bin/grep)
|
||||
elseif (EXISTS /usr/gnu/bin/grep)
|
||||
set(GREP_CMD /usr/gnu/bin/grep)
|
||||
elseif (EXISTS /usr/linux/bin/grep)
|
||||
set(GREP_CMD /usr/linux/bin/grep)
|
||||
else ()
|
||||
set(GREP_CMD grep)
|
||||
endif ()
|
||||
|
||||
if (EXISTS /usr/xpg4/bin/sed)
|
||||
set(SED_CMD /usr/xpg4/bin/sed)
|
||||
elseif (EXISTS /usr/gnu/bin/sed)
|
||||
set(SED_CMD /usr/gnu/bin/sed)
|
||||
elseif (EXISTS /usr/linux/bin/sed)
|
||||
set(SED_CMD /usr/linux/bin/sed)
|
||||
else ()
|
||||
set(SED_CMD sed)
|
||||
endif ()
|
||||
|
||||
###############################################################################
|
||||
|
||||
function(CheckCompileOption opt var)
|
||||
CHECK_CXX_COMPILER_FLAG(${opt} ${var})
|
||||
endfunction(CheckCompileOption)
|
||||
|
||||
function(CheckCompileLinkOption opt var prog)
|
||||
|
||||
if (MSVC)
|
||||
|
||||
# TODO: improve this...
|
||||
CHECK_CXX_COMPILER_FLAG(${opt} ${var})
|
||||
|
||||
elseif (APPLE)
|
||||
|
||||
message(STATUS "Performing Test ${var}")
|
||||
try_compile(COMMAND_SUCCESS ${CMAKE_BINARY_DIR} ${prog} COMPILE_DEFINITIONS ${opt})
|
||||
if (COMMAND_SUCCESS)
|
||||
set(${var} 1 PARENT_SCOPE)
|
||||
message(STATUS "Performing Test ${var} - Success")
|
||||
else ()
|
||||
set(${var} 0 PARENT_SCOPE)
|
||||
message(STATUS "Performing Test ${var} - Failed")
|
||||
endif ()
|
||||
|
||||
else ()
|
||||
|
||||
message(STATUS "Performing Test ${var}")
|
||||
try_compile(COMMAND_SUCCESS ${CMAKE_BINARY_DIR} ${prog} COMPILE_DEFINITIONS ${opt})
|
||||
if (COMMAND_SUCCESS)
|
||||
set(${var} 1 PARENT_SCOPE)
|
||||
message(STATUS "Performing Test ${var} - Success")
|
||||
else ()
|
||||
set(${var} 0 PARENT_SCOPE)
|
||||
message(STATUS "Performing Test ${var} - Failed")
|
||||
endif ()
|
||||
|
||||
endif ()
|
||||
|
||||
endfunction(CheckCompileLinkOption)
|
||||
|
||||
function(AddCompileOption opt)
|
||||
|
||||
if ("${COMMAND_OUTPUT}" NOT STREQUAL "")
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "${opt}")
|
||||
endif ()
|
||||
|
||||
endfunction(AddCompileOption)
|
||||
|
||||
###############################################################################
|
||||
|
||||
function(DumpMachine output pattern)
|
||||
|
||||
if (MSVC)
|
||||
|
||||
# CMake does not provide a generic shell/terminal mechanism
|
||||
# and Microsoft environments don't know what 'sh' is.
|
||||
set(${output} 0 PARENT_SCOPE)
|
||||
|
||||
else ()
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES ${pattern})
|
||||
set(${output} TRUE PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endfunction(DumpMachine)
|
||||
|
||||
# Thansk to Anonimal for MinGW; see http://github.com/weidai11/cryptopp/issues/466
|
||||
DumpMachine(CRYPTOPP_AMD64 "(x86_64|AMD64|amd64)")
|
||||
DumpMachine(CRYPTOPP_I386 "(i.86)")
|
||||
DumpMachine(CRYPTOPP_MINGW64 "(w64-mingw32)|(mingw64)")
|
||||
DumpMachine(CRYPTOPP_ARMV8 "(armv8|aarch64)")
|
||||
|
||||
###############################################################################
|
||||
|
||||
if(MSVC)
|
||||
if(CMAKE_SYSTEM_VERSION MATCHES "10\\.0.*")
|
||||
list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "_WIN32_WINNT=0x0A00")
|
||||
endif()
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS /FI winapifamily.h)
|
||||
endif()
|
||||
|
||||
# Enable PIC for all targets except Windows and 32-bit x86.
|
||||
# Avoid on 32-bit x86 due to register pressures.
|
||||
if ((NOT CRYPTOPP_CROSS_COMPILE) AND (NOT (WINDOWS OR WINDOWS_STORE OR WINDOWS_PHONE)))
|
||||
# Use Regex; match i386, i486, i586 and i686
|
||||
if (NOT (${UNAME_MACHINE} MATCHES "i.86"))
|
||||
SET(CMAKE_POSITION_INDEPENDENT_CODE 1)
|
||||
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()
|
||||
|
||||
#============================================================================
|
||||
# Sources & headers
|
||||
#============================================================================
|
||||
|
||||
# Library headers
|
||||
file(GLOB cryptopp_HEADERS ${SRC_DIR}/*.h)
|
||||
|
||||
# Remove headers used to build test suite
|
||||
list(REMOVE_ITEM cryptopp_HEADERS
|
||||
${SRC_DIR}/bench.h
|
||||
${SRC_DIR}/validate.h
|
||||
)
|
||||
|
||||
# Library sources.
|
||||
# These have been trimmed to include only things Citra uses. This speeds up
|
||||
# compiles and reduces the amount of compilation breakage.
|
||||
set(cryptopp_SOURCES
|
||||
# The Crypto++ readme says you should put these 3 object files first,
|
||||
# to avoid "problems associated with C++ static initialization order",
|
||||
# but doesn't actually tell what could go wrong. Better safe than sorry
|
||||
# I guess...
|
||||
${SRC_DIR}/cryptlib.cpp
|
||||
${SRC_DIR}/cpu.cpp
|
||||
${SRC_DIR}/integer.cpp
|
||||
|
||||
${SRC_DIR}/algparam.cpp
|
||||
${SRC_DIR}/allocate.cpp
|
||||
${SRC_DIR}/asn.cpp
|
||||
${SRC_DIR}/authenc.cpp
|
||||
${SRC_DIR}/base64.cpp
|
||||
${SRC_DIR}/basecode.cpp
|
||||
${SRC_DIR}/ccm.cpp
|
||||
${SRC_DIR}/crc_simd.cpp
|
||||
${SRC_DIR}/des.cpp
|
||||
${SRC_DIR}/dessp.cpp
|
||||
${SRC_DIR}/dll.cpp
|
||||
${SRC_DIR}/ec2n.cpp
|
||||
${SRC_DIR}/ecp.cpp
|
||||
${SRC_DIR}/filters.cpp
|
||||
${SRC_DIR}/fips140.cpp
|
||||
${SRC_DIR}/gcm_simd.cpp
|
||||
${SRC_DIR}/gf2n_simd.cpp
|
||||
${SRC_DIR}/gf2n.cpp
|
||||
${SRC_DIR}/gfpcrypt.cpp
|
||||
${SRC_DIR}/hex.cpp
|
||||
${SRC_DIR}/hmac.cpp
|
||||
${SRC_DIR}/hrtimer.cpp
|
||||
${SRC_DIR}/iterhash.cpp
|
||||
${SRC_DIR}/md5.cpp
|
||||
${SRC_DIR}/misc.cpp
|
||||
${SRC_DIR}/modes.cpp
|
||||
${SRC_DIR}/mqueue.cpp
|
||||
${SRC_DIR}/nbtheory.cpp
|
||||
${SRC_DIR}/neon_simd.cpp
|
||||
${SRC_DIR}/oaep.cpp
|
||||
${SRC_DIR}/osrng.cpp
|
||||
${SRC_DIR}/ppc_power7.cpp
|
||||
${SRC_DIR}/ppc_power8.cpp
|
||||
${SRC_DIR}/ppc_power9.cpp
|
||||
${SRC_DIR}/ppc_simd.cpp
|
||||
${SRC_DIR}/pubkey.cpp
|
||||
${SRC_DIR}/queue.cpp
|
||||
${SRC_DIR}/randpool.cpp
|
||||
${SRC_DIR}/rdtables.cpp
|
||||
${SRC_DIR}/rijndael_simd.cpp
|
||||
${SRC_DIR}/rijndael.cpp
|
||||
${SRC_DIR}/rng.cpp
|
||||
${SRC_DIR}/sha_simd.cpp
|
||||
${SRC_DIR}/sha.cpp
|
||||
${SRC_DIR}/sse_simd.cpp
|
||||
)
|
||||
|
||||
if(ANDROID)
|
||||
include_directories(${ANDROID_NDK}/sources/android/cpufeatures)
|
||||
list(APPEND cryptopp_SOURCES ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c)
|
||||
endif()
|
||||
|
||||
set(cryptopp_SOURCES_ASM)
|
||||
|
||||
if (MSVC AND NOT DISABLE_ASM)
|
||||
if (${CMAKE_GENERATOR} MATCHES ".*ARM")
|
||||
message(STATUS "Disabling ASM because ARM is specified as target platform.")
|
||||
else ()
|
||||
enable_language(ASM_MASM)
|
||||
list(APPEND cryptopp_SOURCES_ASM
|
||||
${SRC_DIR}/rdrand.asm
|
||||
${SRC_DIR}/rdseed.asm
|
||||
)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
list(APPEND cryptopp_SOURCES_ASM
|
||||
${SRC_DIR}/x64dll.asm
|
||||
${SRC_DIR}/x64masm.asm
|
||||
)
|
||||
set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X64")
|
||||
else ()
|
||||
set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X86" COMPILE_FLAGS "/safeseh")
|
||||
endif ()
|
||||
set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES LANGUAGE ASM_MASM)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
#============================================================================
|
||||
# Architecture flags
|
||||
#============================================================================
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER MATCHES "xlC")
|
||||
|
||||
if (CRYPTOPP_AMD64 OR CRYPTOPP_I386)
|
||||
CheckCompileLinkOption("-msse2" CRYPTOPP_IA32_SSE2
|
||||
"${TEST_PROG_DIR}/test_x86_sse2.cxx")
|
||||
CheckCompileLinkOption("-mssse3" CRYPTOPP_IA32_SSSE3
|
||||
"${TEST_PROG_DIR}/test_x86_ssse3.cxx")
|
||||
CheckCompileLinkOption("-msse4.1" CRYPTOPP_IA32_SSE41
|
||||
"${TEST_PROG_DIR}/test_x86_sse41.cxx")
|
||||
CheckCompileLinkOption("-msse4.2" CRYPTOPP_IA32_SSE42
|
||||
"${TEST_PROG_DIR}/test_x86_sse42.cxx")
|
||||
CheckCompileLinkOption("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL
|
||||
"${TEST_PROG_DIR}/test_x86_clmul.cxx")
|
||||
CheckCompileLinkOption("-msse4.1 -maes" CRYPTOPP_IA32_AES
|
||||
"${TEST_PROG_DIR}/test_x86_aes.cxx")
|
||||
CheckCompileLinkOption("-mavx" CRYPTOPP_IA32_AVX
|
||||
"${TEST_PROG_DIR}/test_x86_avx.cxx")
|
||||
CheckCompileLinkOption("-mavx2" CRYPTOPP_IA32_AVX2
|
||||
"${TEST_PROG_DIR}/test_x86_avx2.cxx")
|
||||
CheckCompileLinkOption("-msse4.2 -msha" CRYPTOPP_IA32_SHA
|
||||
"${TEST_PROG_DIR}/test_x86_sha.cxx")
|
||||
if (EXISTS "${TEST_PROG_DIR}/test_asm_mixed.cxx")
|
||||
CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM
|
||||
"${TEST_PROG_DIR}/test_asm_mixed.cxx")
|
||||
else ()
|
||||
CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM
|
||||
"${TEST_PROG_DIR}/test_mixed_asm.cxx")
|
||||
endif ()
|
||||
|
||||
if (NOT CRYPTOPP_MIXED_ASM)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_MIXED_ASM")
|
||||
endif ()
|
||||
|
||||
if (NOT CRYPTOPP_IA32_SSE2 AND NOT CRYPTOPP_DISABLE_ASM)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ASM")
|
||||
elseif (CRYPTOPP_IA32_SSE2 AND NOT CRYPTOPP_DISABLE_ASM)
|
||||
set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2")
|
||||
endif ()
|
||||
if (NOT CRYPTOPP_IA32_SSSE3 AND NOT CRYPTOPP_DISABLE_SSSE3)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSSE3")
|
||||
elseif (CRYPTOPP_IA32_SSSE3 AND NOT CRYPTOPP_DISABLE_SSSE3)
|
||||
if (NOT CRYPTOPP_IA32_SSE41 AND NOT CRYPTOPP_DISABLE_SSE4)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4")
|
||||
endif ()
|
||||
if (NOT CRYPTOPP_IA32_SSE42 AND NOT CRYPTOPP_DISABLE_SSE4)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4")
|
||||
elseif (CRYPTOPP_IA32_SSE42 AND NOT CRYPTOPP_DISABLE_SSE4)
|
||||
set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2")
|
||||
if (NOT CRYPTOPP_IA32_CLMUL AND NOT CRYPTOPP_DISABLE_CLMUL)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_CLMUL")
|
||||
elseif (CRYPTOPP_IA32_CLMUL AND NOT CRYPTOPP_DISABLE_CLMUL)
|
||||
set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -mpclmul")
|
||||
set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-mpclmul")
|
||||
endif ()
|
||||
if (NOT CRYPTOPP_IA32_AES AND NOT CRYPTOPP_DISABLE_AES)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AESNI")
|
||||
elseif (CRYPTOPP_IA32_AES AND NOT CRYPTOPP_DISABLE_AES)
|
||||
set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes")
|
||||
endif ()
|
||||
if (NOT CRYPTOPP_IA32_AVX2 AND NOT CRYPTOPP_DISABLE_AVX2)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AVX2")
|
||||
endif ()
|
||||
if (NOT CRYPTOPP_IA32_SHA AND NOT CRYPTOPP_DISABLE_SHA)
|
||||
list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SHANI")
|
||||
elseif (CRYPTOPP_IA32_SHA AND NOT CRYPTOPP_DISABLE_SHA)
|
||||
set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha")
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
#============================================================================
|
||||
# Compile targets
|
||||
#============================================================================
|
||||
|
||||
set(cryptopp_LIBRARY_SOURCES ${cryptopp_SOURCES_ASM})
|
||||
list(APPEND cryptopp_LIBRARY_SOURCES ${cryptopp_SOURCES})
|
||||
|
||||
add_library(cryptopp STATIC ${cryptopp_LIBRARY_SOURCES})
|
||||
target_compile_definitions(cryptopp PUBLIC ${CRYPTOPP_COMPILE_DEFINITIONS})
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
|
||||
target_include_directories(cryptopp INTERFACE .)
|
||||
|
||||
#============================================================================
|
||||
# Third-party libraries
|
||||
#============================================================================
|
||||
|
||||
find_package(Threads)
|
||||
target_link_libraries(cryptopp PRIVATE ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
if(ANDROID)
|
||||
include(AndroidNdkModules)
|
||||
android_ndk_import_module_cpufeatures()
|
||||
target_link_libraries(cryptopp PRIVATE cpufeatures)
|
||||
endif()
|
1
externals/cryptopp/cryptopp
vendored
1
externals/cryptopp/cryptopp
vendored
|
@ -1 +0,0 @@
|
|||
Subproject commit f2102243e6fdd48c0b2a393a0993cca228f20573
|
|
@ -96,7 +96,7 @@ android {
|
|||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version "3.18.1"
|
||||
version "3.22.1"
|
||||
path "../../../CMakeLists.txt"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,3 +13,4 @@ org.gradle.jvmargs=-Xmx1536m
|
|||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
android.native.buildOutput=verbose
|
||||
|
|
Loading…
Reference in a new issue