312 lines
11 KiB
CMake
312 lines
11 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
project(matrixssl VERSION 4.6.0 LANGUAGES C)
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
option(MATRIXSSL_BUILD_SHARED "Build MatrixSSL as a shared library" ON)
|
|
option(MATRIXSSL_BUILD_STATIC "Build MatrixSSL as a static library" OFF)
|
|
option(MATRIXSSL_DISABLE_TLS13 "Disable TLS 1.3 in the generated CMake configuration" ON)
|
|
set(MATRIXSSL_CONFIG "default" CACHE STRING "MatrixSSL configuration directory under configs/")
|
|
set(MATRIXSSL_LIBRARY_PREFIX "" CACHE STRING "Prefix added to installed library output names, e.g. 'nw' for libnwmatrixssl")
|
|
set(MATRIXSSL_INSTALL_INCLUDE_SUBDIR "matrixssl" CACHE STRING "Header install subdirectory below CMAKE_INSTALL_INCLUDEDIR")
|
|
|
|
set(MATRIXSSL_CONFIG_DIR "${CMAKE_CURRENT_SOURCE_DIR}/configs/${MATRIXSSL_CONFIG}")
|
|
if(NOT EXISTS "${MATRIXSSL_CONFIG_DIR}/cryptoConfig.h" OR
|
|
NOT EXISTS "${MATRIXSSL_CONFIG_DIR}/matrixsslConfig.h" OR
|
|
NOT EXISTS "${MATRIXSSL_CONFIG_DIR}/coreConfig.h")
|
|
message(FATAL_ERROR "Unknown or incomplete MATRIXSSL_CONFIG='${MATRIXSSL_CONFIG}'")
|
|
endif()
|
|
|
|
set(MATRIXSSL_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
|
|
file(MAKE_DIRECTORY
|
|
"${MATRIXSSL_GENERATED_DIR}/crypto"
|
|
"${MATRIXSSL_GENERATED_DIR}/matrixssl"
|
|
"${MATRIXSSL_GENERATED_DIR}/core/config")
|
|
configure_file("${MATRIXSSL_CONFIG_DIR}/cryptoConfig.h"
|
|
"${MATRIXSSL_GENERATED_DIR}/crypto/cryptoConfig.h" COPYONLY)
|
|
configure_file("${MATRIXSSL_CONFIG_DIR}/coreConfig.h"
|
|
"${MATRIXSSL_GENERATED_DIR}/core/config/coreConfig.h" COPYONLY)
|
|
file(READ "${MATRIXSSL_CONFIG_DIR}/matrixsslConfig.h" MATRIXSSL_CONFIG_TEXT)
|
|
if(MATRIXSSL_DISABLE_TLS13)
|
|
string(APPEND MATRIXSSL_CONFIG_TEXT "\n/* Added by CMake build: keep MatrixSSL 4.6.0 TLS 1.2-only by default. */\n#ifndef DISABLE_TLS_1_3\n#define DISABLE_TLS_1_3\n#endif\n")
|
|
endif()
|
|
file(WRITE "${MATRIXSSL_GENERATED_DIR}/matrixssl/matrixsslConfig.h" "${MATRIXSSL_CONFIG_TEXT}")
|
|
|
|
set(MATRIXSSL_COMMON_INCLUDE_DIRS
|
|
"${MATRIXSSL_GENERATED_DIR}/core/config"
|
|
"${MATRIXSSL_GENERATED_DIR}/crypto"
|
|
"${MATRIXSSL_GENERATED_DIR}/matrixssl"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/crypto/aead/chacha20poly1305ietf"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/crypto/scalarmult/include/sodium"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/crypto/crypto_sign/include/sodium"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/core/include"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/core/config"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/core/include/sfzcl"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/core/osdep/include"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/crypto"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/matrixssl")
|
|
|
|
set(MATRIXSSL_CORE_SOURCES
|
|
core/src/memset_s.c
|
|
core/src/corelib_main.c
|
|
core/src/corelib_trace.c
|
|
core/src/corelib_date.c
|
|
core/src/corelib_strings.c
|
|
core/src/corelib_list.c
|
|
core/src/psbuf.c
|
|
core/src/psUtil.c
|
|
core/src/psStat.c
|
|
core/osdep/POSIX/osdep.c
|
|
core/osdep/ANSI/osdep_break.c
|
|
core/osdep/POSIX/psLog.c
|
|
core/osdep/POSIX/psPrnf.c
|
|
core/src/c_lib.c
|
|
core/src/cl_basic.c
|
|
core/src/debug_abort.c
|
|
core/src/debug_printf.c
|
|
core/src/psprintf.c
|
|
core/src/psmalloc.c
|
|
core/src/psmalloc_ext.c
|
|
core/src/sfzclbuffer.c
|
|
core/src/sfzclcalendar.c
|
|
core/src/sfzclfastalloc.c
|
|
core/src/sfzclfileio.c
|
|
core/src/sfzclmalloc.c
|
|
core/src/sfzclmemparser.c
|
|
core/src/sfzcltimemeasure.c
|
|
core/src/sfzclobstack.c
|
|
core/src/sfzclsnprintf.c
|
|
core/src/sfzclbase64.c
|
|
core/src/sfzclstr.c
|
|
core/src/sfzcltime.c
|
|
core/osdep/ANSI/spal_memory_ansi.c
|
|
core/src/utils.c
|
|
core/osdep/POSIX/spal_posix_mutex.c
|
|
core/osdep/POSIX/spal_posix_semaphore.c
|
|
core/osdep/POSIX/spal_posix_sleep.c
|
|
core/osdep/POSIX/spal_posix_thread.c
|
|
core/src/sl_cpu.c
|
|
core/src/sl_neon.c
|
|
core/osdep/src/cl_memset.c
|
|
core/osdep/src/runtime.c)
|
|
|
|
set(MATRIXSSL_CRYPTO_SOURCES
|
|
crypto/common/alg_info.c
|
|
crypto/common/digest_info.c
|
|
crypto/symmetric/aes.c
|
|
crypto/symmetric/aesCBC.c
|
|
crypto/symmetric/aesGCM.c
|
|
crypto/symmetric/aes_aesni.c
|
|
crypto/symmetric/arc4.c
|
|
crypto/symmetric/des3.c
|
|
crypto/symmetric/idea.c
|
|
crypto/symmetric/rc2.c
|
|
crypto/symmetric/seed.c
|
|
crypto/digest/hash.c
|
|
crypto/digest/sha256_standalone.c
|
|
crypto/digest/sha1.c
|
|
crypto/digest/sha256.c
|
|
crypto/digest/sha512.c
|
|
crypto/digest/md5sha1.c
|
|
crypto/digest/md5.c
|
|
crypto/digest/hmac.c
|
|
crypto/digest/md4.c
|
|
crypto/digest/md2.c
|
|
crypto/digest/hkdf.c
|
|
crypto/keyformat/asn1.c
|
|
crypto/keyformat/asn1fmt.c
|
|
crypto/keyformat/base64.c
|
|
crypto/keyformat/crl.c
|
|
crypto/keyformat/pem_decode_mem.c
|
|
crypto/keyformat/pem_decode_file.c
|
|
crypto/keyformat/pkcs.c
|
|
crypto/keyformat/pbkdf2.c
|
|
crypto/keyformat/x509.c
|
|
crypto/layer/matrix.c
|
|
crypto/math/pstm.c
|
|
crypto/math/pstmnt.c
|
|
crypto/math/pstm_montgomery_reduce.c
|
|
crypto/math/pstm_mul_comba.c
|
|
crypto/math/pstm_sqr_comba.c
|
|
crypto/prng/prng.c
|
|
crypto/prng/yarrow.c
|
|
crypto/pubkey/dh.c
|
|
crypto/pubkey/dh_params.c
|
|
crypto/pubkey/dh_export.c
|
|
crypto/pubkey/dh_import.c
|
|
crypto/pubkey/dh_gen_key.c
|
|
crypto/pubkey/dh_gen_secret.c
|
|
crypto/pubkey/dh_import_priv.c
|
|
crypto/pubkey/ecc.c
|
|
crypto/pubkey/ecc_curve.c
|
|
crypto/pubkey/ecc_curve_data.c
|
|
crypto/pubkey/ecc_curve_config.c
|
|
crypto/pubkey/ecc_math.c
|
|
crypto/pubkey/ecc_priv.c
|
|
crypto/pubkey/ecc_priv_el_gamal.c
|
|
crypto/pubkey/ecc_pub.c
|
|
crypto/pubkey/ecc_keygen.c
|
|
crypto/pubkey/ecc_gen_shared.c
|
|
crypto/pubkey/ecc_parse_file.c
|
|
crypto/pubkey/ecc_parse_mem.c
|
|
crypto/pubkey/ecc_write_mem.c
|
|
crypto/pubkey/ecc_write_file.c
|
|
crypto/pubkey/ecc_export.c
|
|
crypto/pubkey/ecc_import.c
|
|
crypto/pubkey/pubkey.c
|
|
crypto/pubkey/pubkey_sign.c
|
|
crypto/pubkey/pubkey_verify.c
|
|
crypto/pubkey/pubkey_parse_mem.c
|
|
crypto/pubkey/pubkey_parse_file.c
|
|
crypto/pubkey/rsa.c
|
|
crypto/pubkey/rsa_priv.c
|
|
crypto/pubkey/rsa_pub.c
|
|
crypto/pubkey/rsa_keygen.c
|
|
crypto/pubkey/rsa_parse_mem.c
|
|
crypto/pubkey/rsa_parse_file.c
|
|
crypto/pubkey/rsa_write_mem.c
|
|
crypto/pubkey/rsa_write_file.c
|
|
crypto/aead/chacha20poly1305ietf/sse2/poly1305_sse2.c
|
|
crypto/aead/chacha20poly1305ietf/donna/poly1305_donna.c
|
|
crypto/aead/chacha20poly1305ietf/dolbeau/chacha20_dolbeau-avx2.c
|
|
crypto/aead/chacha20poly1305ietf/dolbeau/chacha20_dolbeau-ssse3.c
|
|
crypto/aead/chacha20poly1305ietf/ref/chacha20_ref.c
|
|
crypto/aead/chacha20poly1305ietf/stream_chacha20.c
|
|
crypto/aead/chacha20poly1305ietf/onetimeauth_poly1305.c
|
|
crypto/aead/chacha20poly1305ietf/ps_chacha20poly1305ietf.c
|
|
crypto/aead/chacha20poly1305ietf/aead_chacha20poly1305.c
|
|
crypto/aead/chacha20poly1305ietf/utils.c
|
|
crypto/aead/chacha20poly1305ietf/verify.c
|
|
crypto/aead/chacha20poly1305ietf/runtime.c
|
|
crypto/scalarmult/curve25519/scalarmult_curve25519.c
|
|
crypto/scalarmult/curve25519/ref10/x25519_ref10.c
|
|
crypto/scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c
|
|
crypto/scalarmult/crypto_scalarmult.c
|
|
crypto/scalarmult/crypto_core/ed25519/core_ed25519.c
|
|
crypto/scalarmult/crypto_core/ed25519/ref10/ed25519_ref10.c
|
|
crypto/scalarmult/ps_x25519.c
|
|
crypto/crypto_sign/crypto_sign.c
|
|
crypto/crypto_sign/ed25519/ref10/sign.c
|
|
crypto/crypto_sign/ed25519/ref10/open.c
|
|
crypto/crypto_sign/ps_ed25519.c)
|
|
|
|
set(MATRIXSSL_TLS_SOURCES
|
|
matrixssl/matrixsslGetSet.c
|
|
matrixssl/cipherSuite.c
|
|
matrixssl/dtls.c
|
|
matrixssl/extDecode.c
|
|
matrixssl/hsDecode.c
|
|
matrixssl/hsHash.c
|
|
matrixssl/hsHashBuffered.c
|
|
matrixssl/hsNegotiateVersion.c
|
|
matrixssl/matrixssl.c
|
|
matrixssl/matrixsslKeys.c
|
|
matrixssl/matrixsslApi.c
|
|
matrixssl/matrixsslInitVer.c
|
|
matrixssl/matrixsslSecConfig.c
|
|
matrixssl/prf.c
|
|
matrixssl/psk.c
|
|
matrixssl/sslDecode.c
|
|
matrixssl/sslEncode.c
|
|
matrixssl/tlsDefaults.c
|
|
matrixssl/tlsSelectKeys.c
|
|
matrixssl/tlsSigVer.c
|
|
matrixssl/tlsTrace.c
|
|
matrixssl/tls13Adapter.c
|
|
matrixssl/tls13Authenticate.c
|
|
matrixssl/tls13CipherSuite.c
|
|
matrixssl/tls13Encode.c
|
|
matrixssl/tls13EncodeExt.c
|
|
matrixssl/tls13Decode.c
|
|
matrixssl/tls13DecodeExt.c
|
|
matrixssl/tls13KeyAgree.c
|
|
matrixssl/tls13KeySchedule.c
|
|
matrixssl/tls13Negotiate.c
|
|
matrixssl/tls13Psk.c
|
|
matrixssl/tls13Resume.c
|
|
matrixssl/tls13SigVer.c
|
|
matrixssl/tls13TrHash.c
|
|
matrixssl/tls13TrHashBuffered.c
|
|
matrixssl/sslv3.c
|
|
matrixssl/tls.c)
|
|
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|amd64|AMD64|i[3-6]86)$")
|
|
set_source_files_properties(crypto/symmetric/aes_aesni.c
|
|
PROPERTIES COMPILE_OPTIONS "-maes;-msse4.1;-mpclmul")
|
|
set_source_files_properties(crypto/aead/chacha20poly1305ietf/sse2/poly1305_sse2.c
|
|
PROPERTIES COMPILE_OPTIONS "-msse2")
|
|
set_source_files_properties(crypto/aead/chacha20poly1305ietf/dolbeau/chacha20_dolbeau-ssse3.c
|
|
PROPERTIES COMPILE_OPTIONS "-mssse3")
|
|
set_source_files_properties(crypto/aead/chacha20poly1305ietf/dolbeau/chacha20_dolbeau-avx2.c
|
|
PROPERTIES COMPILE_OPTIONS "-mavx2")
|
|
endif()
|
|
|
|
set(MATRIXSSL_ALL_SOURCES
|
|
${MATRIXSSL_CORE_SOURCES}
|
|
${MATRIXSSL_CRYPTO_SOURCES}
|
|
${MATRIXSSL_TLS_SOURCES})
|
|
|
|
function(matrixssl_configure_target target_name)
|
|
target_sources(${target_name} PRIVATE ${MATRIXSSL_ALL_SOURCES})
|
|
target_include_directories(${target_name}
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/matrixssl>
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/crypto>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${MATRIXSSL_INSTALL_INCLUDE_SUBDIR}>
|
|
PRIVATE
|
|
${MATRIXSSL_COMMON_INCLUDE_DIRS})
|
|
target_compile_features(${target_name} PRIVATE c_std_99)
|
|
target_compile_options(${target_name} PRIVATE -ffunction-sections -fdata-sections -fno-math-errno)
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|amd64|AMD64|i[3-6]86)$")
|
|
target_compile_options(${target_name} PRIVATE -maes)
|
|
endif()
|
|
if(UNIX AND NOT APPLE)
|
|
target_link_libraries(${target_name} PUBLIC pthread m)
|
|
endif()
|
|
set_target_properties(${target_name} PROPERTIES
|
|
OUTPUT_NAME "${MATRIXSSL_LIBRARY_PREFIX}matrixssl")
|
|
endfunction()
|
|
|
|
if(MATRIXSSL_BUILD_SHARED)
|
|
add_library(matrixssl SHARED)
|
|
matrixssl_configure_target(matrixssl)
|
|
add_library(MATRIXSSL::matrixssl ALIAS matrixssl)
|
|
endif()
|
|
|
|
if(MATRIXSSL_BUILD_STATIC)
|
|
add_library(matrixssl_static STATIC)
|
|
matrixssl_configure_target(matrixssl_static)
|
|
set_target_properties(matrixssl_static PROPERTIES OUTPUT_NAME "${MATRIXSSL_LIBRARY_PREFIX}matrixssl")
|
|
if(NOT MATRIXSSL_BUILD_SHARED)
|
|
add_library(MATRIXSSL::matrixssl ALIAS matrixssl_static)
|
|
endif()
|
|
endif()
|
|
|
|
if(MATRIXSSL_BUILD_SHARED)
|
|
install(TARGETS matrixssl EXPORT matrixsslTargets
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
endif()
|
|
if(MATRIXSSL_BUILD_STATIC)
|
|
install(TARGETS matrixssl_static EXPORT matrixsslTargets
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
endif()
|
|
|
|
install(FILES
|
|
matrixssl/matrixsslApi.h
|
|
matrixssl/matrixsslApiLimits.h
|
|
matrixssl/matrixsslApiPre.h
|
|
matrixssl/matrixsslApiRet.h
|
|
matrixssl/matrixsslApiTypes.h
|
|
matrixssl/matrixsslApiVer.h
|
|
matrixssl/matrixssllib.h
|
|
crypto/cryptoApi.h
|
|
crypto/cryptolib.h
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${MATRIXSSL_INSTALL_INCLUDE_SUBDIR})
|
|
install(EXPORT matrixsslTargets
|
|
NAMESPACE MATRIXSSL::
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/matrixssl)
|