mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-01-28 00:35:21 +00:00
e90e405e15
When the option is On, CMake will have rules to generate the generated files using scripts etc. When the option is Off, CMake will assume the files are available from the source tree; in that mode, it won't require any extra tools (Perl for example) compared to when we committed the files to git. The intention is that users will never need to adjust this option: - in the development branch (and features branches etc.) the option is always On (development mode); - in released tarballs, which include the generated files, we'll switch the option to Off (release mode) in the same commit that re-adds the generated files. Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
271 lines
8.4 KiB
CMake
271 lines
8.4 KiB
CMake
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
|
|
aria.c
|
|
asn1parse.c
|
|
asn1write.c
|
|
base64.c
|
|
bignum.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
|
|
error.c
|
|
gcm.c
|
|
hkdf.c
|
|
hmac_drbg.c
|
|
md.c
|
|
md5.c
|
|
memory_buffer_alloc.c
|
|
mps_reader.c
|
|
mps_trace.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_aead.c
|
|
psa_crypto_cipher.c
|
|
psa_crypto_client.c
|
|
psa_crypto_driver_wrappers.c
|
|
psa_crypto_ecp.c
|
|
psa_crypto_hash.c
|
|
psa_crypto_mac.c
|
|
psa_crypto_rsa.c
|
|
psa_crypto_se.c
|
|
psa_crypto_slot_management.c
|
|
psa_crypto_storage.c
|
|
psa_its_file.c
|
|
ripemd160.c
|
|
rsa.c
|
|
rsa_alt_helpers.c
|
|
sha1.c
|
|
sha256.c
|
|
sha512.c
|
|
threading.c
|
|
timing.c
|
|
version.c
|
|
version_features.c
|
|
)
|
|
|
|
set(src_x509
|
|
x509.c
|
|
x509_create.c
|
|
x509_crl.c
|
|
x509_crt.c
|
|
x509_csr.c
|
|
x509write_crt.c
|
|
x509write_csr.c
|
|
)
|
|
|
|
set(src_tls
|
|
debug.c
|
|
net_sockets.c
|
|
ssl_cache.c
|
|
ssl_ciphersuites.c
|
|
ssl_cli.c
|
|
ssl_cookie.c
|
|
ssl_msg.c
|
|
ssl_srv.c
|
|
ssl_ticket.c
|
|
ssl_tls.c
|
|
ssl_tls13_keys.c
|
|
ssl_tls13_server.c
|
|
ssl_tls13_client.c
|
|
ssl_tls13_generic.c
|
|
)
|
|
|
|
if(DEV_MODE)
|
|
find_package(Perl REQUIRED)
|
|
|
|
file(GLOB error_headers ${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls/*.h)
|
|
add_custom_command(
|
|
OUTPUT
|
|
${CMAKE_CURRENT_BINARY_DIR}/error.c
|
|
COMMAND
|
|
${PERL_EXECUTABLE}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_errors.pl
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files
|
|
${CMAKE_CURRENT_BINARY_DIR}/error.c
|
|
DEPENDS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_errors.pl
|
|
${error_headers}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/error.fmt
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
${CMAKE_CURRENT_BINARY_DIR}/version_features.c
|
|
COMMAND
|
|
${PERL_EXECUTABLE}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_features.pl
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files
|
|
${CMAKE_CURRENT_BINARY_DIR}/version_features.c
|
|
DEPENDS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_features.pl
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls/mbedtls_config.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/version_features.fmt
|
|
)
|
|
else()
|
|
link_to_source(error.c)
|
|
link_to_source(version_features.c)
|
|
endif()
|
|
|
|
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(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)
|
|
|
|
set(mbedtls_target "${MBEDTLS_TARGET_PREFIX}mbedtls")
|
|
set(mbedx509_target "${MBEDTLS_TARGET_PREFIX}mbedx509")
|
|
set(mbedcrypto_target "${MBEDTLS_TARGET_PREFIX}mbedcrypto")
|
|
|
|
set(mbedtls_target ${mbedtls_target} PARENT_SCOPE)
|
|
set(mbedx509_target ${mbedx509_target} PARENT_SCOPE)
|
|
set(mbedcrypto_target ${mbedcrypto_target} PARENT_SCOPE)
|
|
|
|
if (USE_STATIC_MBEDTLS_LIBRARY)
|
|
set(mbedtls_static_target ${mbedtls_target})
|
|
set(mbedx509_static_target ${mbedx509_target})
|
|
set(mbedcrypto_static_target ${mbedcrypto_target})
|
|
endif()
|
|
|
|
set(target_libraries ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target})
|
|
|
|
if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
|
|
string(APPEND mbedtls_static_target "_static")
|
|
string(APPEND mbedx509_static_target "_static")
|
|
string(APPEND mbedcrypto_static_target "_static")
|
|
|
|
list(APPEND target_libraries
|
|
${mbedcrypto_static_target}
|
|
${mbedx509_static_target}
|
|
${mbedtls_static_target})
|
|
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} PUBLIC ${libs})
|
|
|
|
if(TARGET everest)
|
|
target_link_libraries(${mbedcrypto_static_target} PUBLIC everest)
|
|
endif()
|
|
|
|
add_library(${mbedx509_static_target} STATIC ${src_x509})
|
|
set_target_properties(${mbedx509_static_target} PROPERTIES OUTPUT_NAME mbedx509)
|
|
target_link_libraries(${mbedx509_static_target} PUBLIC ${libs} ${mbedcrypto_static_target})
|
|
|
|
add_library(${mbedtls_static_target} STATIC ${src_tls})
|
|
set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls)
|
|
target_link_libraries(${mbedtls_static_target} PUBLIC ${libs} ${mbedx509_static_target})
|
|
endif(USE_STATIC_MBEDTLS_LIBRARY)
|
|
|
|
if(USE_SHARED_MBEDTLS_LIBRARY)
|
|
add_library(${mbedcrypto_target} SHARED ${src_crypto})
|
|
set_target_properties(${mbedcrypto_target} PROPERTIES VERSION 3.0.0 SOVERSION 10)
|
|
target_link_libraries(${mbedcrypto_target} PUBLIC ${libs})
|
|
|
|
if(TARGET everest)
|
|
target_link_libraries(${mbedcrypto_target} PUBLIC everest)
|
|
endif()
|
|
|
|
add_library(${mbedx509_target} SHARED ${src_x509})
|
|
set_target_properties(${mbedx509_target} PROPERTIES VERSION 3.0.0 SOVERSION 4)
|
|
target_link_libraries(${mbedx509_target} PUBLIC ${libs} ${mbedcrypto_target})
|
|
|
|
add_library(${mbedtls_target} SHARED ${src_tls})
|
|
set_target_properties(${mbedtls_target} PROPERTIES VERSION 3.0.0 SOVERSION 16)
|
|
target_link_libraries(${mbedtls_target} PUBLIC ${libs} ${mbedx509_target})
|
|
endif(USE_SHARED_MBEDTLS_LIBRARY)
|
|
|
|
foreach(target IN LISTS target_libraries)
|
|
# Include public header files from /include and other directories
|
|
# declared by /3rdparty/**/CMakeLists.txt. Include private header files
|
|
# from /library and others declared by /3rdparty/**/CMakeLists.txt.
|
|
# /library needs to be listed explicitly when building .c files outside
|
|
# of /library (which currently means: under /3rdparty).
|
|
target_include_directories(${target}
|
|
PUBLIC $<BUILD_INTERFACE:${MBEDTLS_DIR}/include/>
|
|
$<INSTALL_INTERFACE:include/>
|
|
PRIVATE ${MBEDTLS_DIR}/library/)
|
|
install(
|
|
TARGETS ${target}
|
|
EXPORT MbedTLSTargets
|
|
DESTINATION ${LIB_INSTALL_DIR}
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
endforeach(target)
|
|
|
|
set(lib_target "${MBEDTLS_TARGET_PREFIX}lib")
|
|
|
|
add_custom_target(${lib_target} DEPENDS ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target})
|
|
if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
|
|
add_dependencies(${lib_target} ${mbedcrypto_static_target} ${mbedx509_static_target} ${mbedtls_static_target})
|
|
endif()
|