option(USE_STATIC_MBEDTLS_LIBRARY "Build mbed TLS static library." ON) | |
option(USE_SHARED_MBEDTLS_LIBRARY "Build mbed TLS shared library." OFF) | |
option(LINK_WITH_PTHREAD "Explicitly link mbed TLS library to pthread." OFF) | |
option(LINK_WITH_TRUSTED_STORAGE "Explicitly link mbed TLS library to trusted_storage." OFF) | |
# Set the project root directory if it's not already defined, as may happen if | |
# the library folder is included directly by a parent project, without | |
# including the top level CMakeLists.txt. | |
if(NOT DEFINED MBEDTLS_DIR) | |
set(MBEDTLS_DIR ${CMAKE_SOURCE_DIR}) | |
endif() | |
set(src_crypto | |
aes.c | |
aesni.c | |
arc4.c | |
aria.c | |
asn1parse.c | |
asn1write.c | |
base64.c | |
bignum.c | |
blowfish.c | |
camellia.c | |
ccm.c | |
chacha20.c | |
chachapoly.c | |
cipher.c | |
cipher_wrap.c | |
cmac.c | |
ctr_drbg.c | |
des.c | |
dhm.c | |
ecdh.c | |
ecdsa.c | |
ecjpake.c | |
ecp.c | |
ecp_curves.c | |
entropy.c | |
entropy_poll.c | |
gcm.c | |
havege.c | |
hkdf.c | |
hmac_drbg.c | |
md.c | |
md2.c | |
md4.c | |
md5.c | |
memory_buffer_alloc.c | |
nist_kw.c | |
oid.c | |
padlock.c | |
pem.c | |
pk.c | |
pk_wrap.c | |
pkcs12.c | |
pkcs5.c | |
pkparse.c | |
pkwrite.c | |
platform.c | |
platform_util.c | |
poly1305.c | |
psa_crypto.c | |
psa_crypto_se.c | |
psa_crypto_slot_management.c | |
psa_crypto_storage.c | |
psa_its_file.c | |
ripemd160.c | |
rsa.c | |
rsa_internal.c | |
sha1.c | |
sha256.c | |
sha512.c | |
threading.c | |
timing.c | |
xtea.c | |
) | |
# For files generated by the parent project (Mbed TLS) when building Mbed | |
# Crypto as a submodule, ensure that the parent project instance is used. | |
if(USE_CRYPTO_SUBMODULE) | |
set(src_crypto | |
${src_crypto} | |
${MBEDTLS_DIR}/library/version.c | |
${MBEDTLS_DIR}/library/version_features.c | |
${MBEDTLS_DIR}/library/error.c | |
) | |
else() | |
set(src_crypto | |
${src_crypto} | |
version.c | |
version_features.c | |
error.c | |
) | |
endif() | |
list(APPEND src_crypto ${thirdparty_src}) | |
if(CMAKE_COMPILER_IS_GNUCC) | |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes") | |
endif(CMAKE_COMPILER_IS_GNUCC) | |
if(CMAKE_COMPILER_IS_CLANG) | |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code") | |
endif(CMAKE_COMPILER_IS_CLANG) | |
if(UNSAFE_BUILD) | |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error") | |
set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS_ASAN} -Wno-error") | |
set(CMAKE_C_FLAGS_ASANDBG "${CMAKE_C_FLAGS_ASANDBG} -Wno-error") | |
endif(UNSAFE_BUILD) | |
if(WIN32) | |
set(libs ${libs} ws2_32) | |
endif(WIN32) | |
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") | |
SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") | |
SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") | |
SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") | |
SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") | |
endif() | |
if(HAIKU) | |
set(libs ${libs} network) | |
endif(HAIKU) | |
if(LINK_WITH_PTHREAD) | |
set(libs ${libs} pthread) | |
endif() | |
if(LINK_WITH_TRUSTED_STORAGE) | |
set(libs ${libs} trusted_storage) | |
endif() | |
if (NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) | |
message(FATAL_ERROR "Need to choose static or shared mbedtls build!") | |
endif(NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) | |
if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) | |
set(mbedcrypto_static_target "mbedcrypto_static") | |
elseif(USE_STATIC_MBEDTLS_LIBRARY) | |
set(mbedcrypto_static_target "mbedcrypto") | |
endif() | |
if(USE_STATIC_MBEDTLS_LIBRARY) | |
add_library(${mbedcrypto_static_target} STATIC ${src_crypto}) | |
set_target_properties(${mbedcrypto_static_target} PROPERTIES OUTPUT_NAME mbedcrypto) | |
target_link_libraries(${mbedcrypto_static_target} ${libs}) | |
target_include_directories(${mbedcrypto_static_target} | |
PUBLIC ${MBEDTLS_DIR}/include/ | |
PUBLIC ${MBEDTLS_DIR}/crypto/include/) | |
install(TARGETS ${mbedcrypto_static_target} | |
DESTINATION ${LIB_INSTALL_DIR} | |
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) | |
endif(USE_STATIC_MBEDTLS_LIBRARY) | |
if(USE_SHARED_MBEDTLS_LIBRARY) | |
add_library(mbedcrypto SHARED ${src_crypto}) | |
set_target_properties(mbedcrypto PROPERTIES VERSION 2.20.0 SOVERSION 4) | |
target_link_libraries(mbedcrypto ${libs}) | |
target_include_directories(mbedcrypto | |
PUBLIC ${MBEDTLS_DIR}/include/ | |
PUBLIC ${MBEDTLS_DIR}/crypto/include/) | |
install(TARGETS mbedcrypto | |
DESTINATION ${LIB_INSTALL_DIR} | |
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) | |
endif(USE_SHARED_MBEDTLS_LIBRARY) | |
if(USE_CRYPTO_SUBMODULE) | |
add_custom_target(crypto_lib DEPENDS mbedcrypto) | |
if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) | |
add_dependencies(crypto_lib mbedcrypto_static) | |
endif() | |
else() | |
add_custom_target(lib DEPENDS mbedcrypto) | |
if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) | |
add_dependencies(lib mbedcrypto_static) | |
endif() | |
endif() |