mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-02-03 20:54:00 +00:00
4772884133
Using static inline functions is bad for code size; the function from md_internal.h was already used from 3 different C files, so already was copied at least 3 times in the library, and this would only get worse over time. Use actual functions, and also share the actual data between them. Provide a consistent set of operations. Conversion to/from human-readable string was omitted for now but could be added later if needed. In the future, this can be used to replace other similar (inline) functions that are currently scattered, including (but perhaps not limited to): - mbedtls_psa_translate_md() from psa_util.h - mbedtls_md_info_from_psa() (indirectly) from psa_crypto_hash.h - get_md_alg_from_psa() from psa_crypto_rsa.c Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
320 lines
10 KiB
CMake
320 lines
10 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
|
|
constant_time.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
|
|
hash_info.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
|
|
ssl_debug_helpers_generated.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_client.c
|
|
ssl_cookie.c
|
|
ssl_msg.c
|
|
ssl_ticket.c
|
|
ssl_tls.c
|
|
ssl_tls12_client.c
|
|
ssl_tls12_server.c
|
|
ssl_tls13_keys.c
|
|
ssl_tls13_server.c
|
|
ssl_tls13_client.c
|
|
ssl_tls13_generic.c
|
|
)
|
|
|
|
if(GEN_FILES)
|
|
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
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
${CMAKE_CURRENT_BINARY_DIR}/ssl_debug_helpers_generated.c
|
|
COMMAND
|
|
${MBEDTLS_PYTHON_EXECUTABLE}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_ssl_debug_helpers.py
|
|
--mbedtls-root ${CMAKE_CURRENT_SOURCE_DIR}/..
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_ssl_debug_helpers.py
|
|
${error_headers}
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
${CMAKE_CURRENT_BINARY_DIR}/psa_crypto_driver_wrappers.c
|
|
COMMAND
|
|
${MBEDTLS_PYTHON_EXECUTABLE}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.c.jinja
|
|
)
|
|
|
|
|
|
else()
|
|
link_to_source(error.c)
|
|
link_to_source(version_features.c)
|
|
link_to_source(ssl_debug_helpers_generated.c)
|
|
link_to_source(psa_crypto_driver_wrappers.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(CMAKE_COMPILER_IS_MSVC)
|
|
option(MSVC_STATIC_RUNTIME "Build the libraries with /MT compiler flag" OFF)
|
|
if(MSVC_STATIC_RUNTIME)
|
|
foreach(flag_var
|
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
|
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
|
|
CMAKE_C_FLAGS_CHECK)
|
|
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
|
endforeach(flag_var)
|
|
endif()
|
|
endif()
|
|
|
|
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)
|
|
set(CMAKE_LIBRARY_PATH ${CMAKE_CURRENT_BINARY_DIR})
|
|
add_library(${mbedcrypto_target} SHARED ${src_crypto})
|
|
set_target_properties(${mbedcrypto_target} PROPERTIES VERSION 3.2.0 SOVERSION 12)
|
|
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.2.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.2.0 SOVERSION 18)
|
|
target_link_libraries(${mbedtls_target} PUBLIC ${libs} ${mbedx509_target})
|
|
endif(USE_SHARED_MBEDTLS_LIBRARY)
|
|
|
|
foreach(target IN LISTS target_libraries)
|
|
add_library(MbedTLS::${target} ALIAS ${target}) # add_subdirectory support
|
|
# 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
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
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()
|