diff --git a/CMakeLists.txt b/CMakeLists.txt index a83721a9ae..21c9925786 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,14 +101,11 @@ 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(mbedcrypto_target "${MBEDTLS_TARGET_PREFIX}mbedcrypto") -set(builtin_target "${MBEDTLS_TARGET_PREFIX}builtin") if (USE_STATIC_MBEDTLS_LIBRARY) set(mbedcrypto_static_target ${mbedcrypto_target}) - set(builtin_static_target ${builtin_target}) endif() if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) string(APPEND mbedcrypto_static_target "_static") - string(APPEND builtin_static_target "_static") endif() # Warning string - created as a list for compatibility with CMake 2.8 diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index da635db832..007aa35707 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -5,27 +5,6 @@ if(NOT DEFINED MBEDTLS_DIR) set(MBEDTLS_DIR ${CMAKE_SOURCE_DIR}) endif() -set(TF_PSA_CRYPTO_CORE_DIR ../tf-psa-crypto/core) - -set(src_crypto - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_aead.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_cipher.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_client.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_driver_wrappers_no_static.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_ecp.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_ffdh.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_hash.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_mac.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_pake.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_rsa.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_se.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_slot_management.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_storage.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_its_file.c - ${TF_PSA_CRYPTO_CORE_DIR}/psa_util.c -) - set(src_x509 pkcs7.c x509.c @@ -72,24 +51,8 @@ if(GEN_FILES) ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_ssl_debug_helpers.py ${tls_error_headers} ) - - add_custom_command( - OUTPUT - ${CMAKE_CURRENT_BINARY_DIR}/${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_driver_wrappers.h - ${CMAKE_CURRENT_BINARY_DIR}/${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_driver_wrappers_no_static.c - COMMAND - ${MBEDTLS_PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py - ${CMAKE_CURRENT_BINARY_DIR}/${TF_PSA_CRYPTO_CORE_DIR} - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.h.jinja - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers_no_static.c.jinja - ) else() link_to_source(ssl_debug_helpers_generated.c) - link_to_source(${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_driver_wrappers.h) - link_to_source(${TF_PSA_CRYPTO_CORE_DIR}/psa_crypto_driver_wrappers_no_static.c) endif() if(CMAKE_COMPILER_IS_GNUCC) @@ -129,10 +92,6 @@ if(LINK_WITH_PTHREAD) set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT}) 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) @@ -148,36 +107,18 @@ if (USE_STATIC_MBEDTLS_LIBRARY) set(mbedx509_static_target ${mbedx509_target}) endif() -set(target_libraries ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target}) +set(target_libraries ${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") list(APPEND target_libraries - ${mbedcrypto_static_target} ${mbedx509_static_target} ${mbedtls_static_target}) endif() -set(p256m_target "${MBEDTLS_TARGET_PREFIX}p256m") -set(everest_target "${MBEDTLS_TARGET_PREFIX}everest") - 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}) - - target_link_libraries(${mbedcrypto_static_target} PUBLIC ${builtin_static_target}) - - if(TARGET ${everest_target}) - target_link_libraries(${mbedcrypto_static_target} PUBLIC ${everest_target}) - endif() - - if(TARGET ${p256m_target}) - target_link_libraries(${mbedcrypto_static_target} PUBLIC ${p256m_target}) - 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}) @@ -188,21 +129,6 @@ if(USE_STATIC_MBEDTLS_LIBRARY) 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 4.0.0 SOVERSION 16) - target_link_libraries(${mbedcrypto_target} PUBLIC ${libs}) - - target_link_libraries(${mbedcrypto_target} PUBLIC ${builtin_target}) - - if(TARGET ${everest_target}) - target_link_libraries(${mbedcrypto_target} PUBLIC ${everest_target}) - endif() - - if(TARGET ${p256m_target}) - target_link_libraries(${mbedcrypto_target} PUBLIC ${p256m_target}) - endif() - add_library(${mbedx509_target} SHARED ${src_x509}) set_target_properties(${mbedx509_target} PROPERTIES VERSION 4.0.0 SOVERSION 7) target_link_libraries(${mbedx509_target} PUBLIC ${libs} ${mbedcrypto_target}) @@ -224,9 +150,7 @@ foreach(target IN LISTS target_libraries) $ PRIVATE ${MBEDTLS_DIR}/library/ ${MBEDTLS_DIR}/tf-psa-crypto/core - ${MBEDTLS_DIR}/tf-psa-crypto/drivers/builtin/src - # Needed to include psa_crypto_driver_wrappers.h - ${CMAKE_CURRENT_BINARY_DIR}/../tf-psa-crypto/core) + ${MBEDTLS_DIR}/tf-psa-crypto/drivers/builtin/src) # Pass-through MBEDTLS_CONFIG_FILE and MBEDTLS_USER_CONFIG_FILE if(MBEDTLS_CONFIG_FILE) target_compile_definitions(${target} @@ -247,7 +171,7 @@ endforeach(target) set(lib_target "${MBEDTLS_TARGET_PREFIX}lib") -add_custom_target(${lib_target} DEPENDS ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target}) +add_custom_target(${lib_target} DEPENDS ${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}) + add_dependencies(${lib_target} ${mbedx509_static_target} ${mbedtls_static_target}) endif() diff --git a/tf-psa-crypto/core/CMakeLists.txt b/tf-psa-crypto/core/CMakeLists.txt index e69de29bb2..1e4a8c73b0 100644 --- a/tf-psa-crypto/core/CMakeLists.txt +++ b/tf-psa-crypto/core/CMakeLists.txt @@ -0,0 +1,187 @@ +set(src_crypto + psa_crypto.c + psa_crypto_aead.c + psa_crypto_cipher.c + psa_crypto_client.c + psa_crypto_driver_wrappers_no_static.c + psa_crypto_ecp.c + psa_crypto_ffdh.c + psa_crypto_hash.c + psa_crypto_mac.c + psa_crypto_pake.c + psa_crypto_rsa.c + psa_crypto_se.c + psa_crypto_slot_management.c + psa_crypto_storage.c + psa_its_file.c + psa_util.c +) + +if(GEN_FILES) + add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/psa_crypto_driver_wrappers.h + ${CMAKE_CURRENT_BINARY_DIR}/psa_crypto_driver_wrappers_no_static.c + COMMAND + ${MBEDTLS_PYTHON_EXECUTABLE} + ${MBEDTLS_DIR}/scripts/generate_driver_wrappers.py + ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS + ${MBEDTLS_DIR}/scripts/generate_driver_wrappers.py + ${MBEDTLS_DIR}/scripts/data_files/driver_templates/psa_crypto_driver_wrappers.h.jinja + ${MBEDTLS_DIR}/scripts/data_files/driver_templates/psa_crypto_driver_wrappers_no_static.c.jinja + ) +else() + link_to_source(psa_crypto_driver_wrappers.h) + link_to_source(psa_crypto_driver_wrappers_no_static.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(CMAKE_C_COMPILER_ID MATCHES "AppleClang") + set(CMAKE_C_ARCHIVE_CREATE " Scr ") + set(CMAKE_C_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") +endif() +if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + set(CMAKE_CXX_ARCHIVE_CREATE " Scr ") + set(CMAKE_CXX_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") +endif() + +if(LINK_WITH_PTHREAD) + set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT}) +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(mbedcrypto_target "${MBEDTLS_TARGET_PREFIX}mbedcrypto") +set(builtin_target "${MBEDTLS_TARGET_PREFIX}builtin") + +if (USE_STATIC_MBEDTLS_LIBRARY) + set(mbedcrypto_static_target ${mbedcrypto_target}) + set(builtin_static_target ${builtin_target}) +endif() + +set(target_libraries ${mbedcrypto_target}) + +if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) + string(APPEND mbedcrypto_static_target "_static") + string(APPEND builtin_static_target "_static") + + list(APPEND target_libraries + ${mbedcrypto_static_target}) +endif() + +set(p256m_target "${MBEDTLS_TARGET_PREFIX}p256m") +set(everest_target "${MBEDTLS_TARGET_PREFIX}everest") + +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}) + + target_link_libraries(${mbedcrypto_static_target} PUBLIC ${builtin_static_target}) + + if(TARGET ${everest_target}) + target_link_libraries(${mbedcrypto_static_target} PUBLIC ${everest_target}) + endif() + + if(TARGET ${p256m_target}) + target_link_libraries(${mbedcrypto_static_target} PUBLIC ${p256m_target}) + endif() +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 4.0.0 SOVERSION 16) + target_link_libraries(${mbedcrypto_target} PUBLIC ${libs}) + + target_link_libraries(${mbedcrypto_target} PUBLIC ${builtin_target}) + + if(TARGET ${everest_target}) + target_link_libraries(${mbedcrypto_target} PUBLIC ${everest_target}) + endif() + + if(TARGET ${p256m_target}) + target_link_libraries(${mbedcrypto_target} PUBLIC ${p256m_target}) + endif() +endif(USE_SHARED_MBEDTLS_LIBRARY) + +foreach(target IN LISTS target_libraries) + add_library(MbedTLS::${target} ALIAS ${target}) # add_subdirectory support + # Include public header files include/, drivers/builtin/include/ and + # ${MBEDTLS_DIR}/include/ as we still need it. Include private header files + # from core/ and drivers/builtin/src/. + target_include_directories(${target} + PUBLIC $ + $ + $ + $ + PRIVATE ${MBEDTLS_DIR}/tf-psa-crypto/core + ${MBEDTLS_DIR}/tf-psa-crypto/drivers/builtin/src + # Needed to include psa_crypto_driver_wrappers.h + ${CMAKE_CURRENT_BINARY_DIR}) + # Pass-through MBEDTLS_CONFIG_FILE and MBEDTLS_USER_CONFIG_FILE + if(MBEDTLS_CONFIG_FILE) + target_compile_definitions(${target} + PUBLIC MBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}") + endif() + if(MBEDTLS_USER_CONFIG_FILE) + target_compile_definitions(${target} + PUBLIC MBEDTLS_USER_CONFIG_FILE="${MBEDTLS_USER_CONFIG_FILE}") + endif() + 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) + +if(USE_STATIC_MBEDTLS_LIBRARY) + add_custom_command( + TARGET ${mbedcrypto_static_target} + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy $ ${CMAKE_BINARY_DIR}/library) +endif(USE_STATIC_MBEDTLS_LIBRARY) + +if(USE_SHARED_MBEDTLS_LIBRARY) + add_custom_command( + TARGET ${mbedcrypto_target} + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy $ + ${CMAKE_BINARY_DIR}/library/$) + add_custom_command( + TARGET ${mbedcrypto_target} + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy $ + ${CMAKE_BINARY_DIR}/library/$) +endif(USE_SHARED_MBEDTLS_LIBRARY) diff --git a/tf-psa-crypto/tests/CMakeLists.txt b/tf-psa-crypto/tests/CMakeLists.txt index e7800c9d2a..88f12f8b57 100644 --- a/tf-psa-crypto/tests/CMakeLists.txt +++ b/tf-psa-crypto/tests/CMakeLists.txt @@ -294,7 +294,7 @@ function(add_test_suite suite_name) ${CMAKE_CURRENT_SOURCE_DIR}/suites/main_test.function ${CMAKE_CURRENT_SOURCE_DIR}/suites/host_test.function ${CMAKE_CURRENT_SOURCE_DIR}/suites/helpers.function - ${mbedtls_target} + ${mbedcrypto_target} BYPRODUCTS test_suite_${data_name}.datax )