Files
mtgodot-poc/extension/third_party/cryptopp/CMakeLists.txt
T

61 lines
2.6 KiB
CMake

# Crypto++ 8.4.0 — vendored from the 40250 client tree
# (ClientVS22/extern/include/cryptopp, CRYPTOPP_VERSION 840). Needed for the
# MT_PROTOCOL=classic backend's _IMPROVED_PACKET_ENCRYPTION_ cipher:
# DH2 key agreement + hint-selected block ciphers (Twofish default) in CTR mode.
# The server links this exact version (Server/.../extern/cryptopp_8_4_0.tar.gz).
#
# No upstream CMakeLists — we glob the library TUs and drop the test / bench /
# adhoc / FIPS-selftest ones. ASM is disabled everywhere (CRYPTOPP_DISABLE_ASM)
# so the same pure-C++/intrinsics build works on the Android NDK and iOS SDK;
# the classic cipher doesn't need AES-NI / SHA-ext.
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
file(GLOB CRYPTOPP_SRC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
# TUs that are the cryptest program / benchmarks / dev scratch, not the library.
set(_cp_exclude
adhoc bench1 bench2 bench3 datatest dlltest fipsalgt fipstest pch
regtest1 regtest2 regtest3 regtest4 test
validat0 validat1 validat2 validat3 validat4 validat5
validat6 validat7 validat8 validat9 validat10)
foreach(_n ${_cp_exclude})
list(REMOVE_ITEM CRYPTOPP_SRC "${CMAKE_CURRENT_SOURCE_DIR}/${_n}.cpp")
endforeach()
# Android: cpu.cpp does `#include "cpu-features.h"` (unconditionally on __ANDROID__)
# and calls android_getCpuFeatures() etc. — those live in the NDK's cpufeatures
# helper, which isn't on the sysroot include path by default.
if(ANDROID)
set(_ndk "${CMAKE_ANDROID_NDK}")
if(NOT _ndk)
set(_ndk "$ENV{ANDROID_NDK_HOME}")
endif()
set(_cpufeat "${_ndk}/sources/android/cpufeatures")
if(EXISTS "${_cpufeat}/cpu-features.c")
list(APPEND CRYPTOPP_SRC "${_cpufeat}/cpu-features.c")
else()
message(FATAL_ERROR "cryptopp/Android: cpu-features.c not found under ${_cpufeat}")
endif()
endif()
add_library(cryptopp STATIC ${CRYPTOPP_SRC})
target_include_directories(cryptopp SYSTEM PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
if(ANDROID)
target_include_directories(cryptopp SYSTEM PRIVATE "${_cpufeat}")
endif()
target_compile_features(cryptopp PUBLIC cxx_std_17)
target_compile_definitions(cryptopp PUBLIC
CRYPTOPP_DISABLE_ASM
CRYPTOPP_DISABLE_SSSE3
CRYPTOPP_DISABLE_AESNI)
# Upstream is not warning-clean under -Wall; this is vendored 3rd-party code.
target_compile_options(cryptopp PRIVATE -w)
if(NOT MSVC)
target_compile_options(cryptopp PRIVATE -fno-strict-aliasing)
endif()
# Consumers include <cryptopp/sha.h> etc. — parent dir is on the include path
# above (third_party/), so the "cryptopp/" prefix resolves.
add_library(mt3p::cryptopp ALIAS cryptopp)