diff --git a/CMakeLists.txt b/CMakeLists.txt index 21c9925786..a83721a9ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,11 +101,14 @@ 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 24c4de6f18..da635db832 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -6,62 +6,8 @@ if(NOT DEFINED MBEDTLS_DIR) endif() set(TF_PSA_CRYPTO_CORE_DIR ../tf-psa-crypto/core) -set(TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR ../tf-psa-crypto/drivers/builtin/src) set(src_crypto - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/aes.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/aesni.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/aesce.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/aria.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/asn1parse.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/asn1write.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/base64.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/bignum.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/bignum_core.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/bignum_mod.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/bignum_mod_raw.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/block_cipher.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/camellia.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ccm.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/chacha20.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/chachapoly.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/cipher.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/cipher_wrap.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/constant_time.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/cmac.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ctr_drbg.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/des.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/dhm.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ecdh.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ecdsa.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ecjpake.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ecp.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ecp_curves.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ecp_curves_new.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/entropy.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/entropy_poll.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/error.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/gcm.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/hkdf.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/hmac_drbg.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/lmots.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/lms.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/md.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/md5.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/memory_buffer_alloc.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/nist_kw.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/oid.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pem.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pk.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pk_ecc.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pk_wrap.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pkcs12.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pkcs5.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pkparse.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/pkwrite.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/platform.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/platform_util.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/poly1305.c ${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 @@ -78,17 +24,6 @@ set(src_crypto ${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 - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/ripemd160.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/rsa.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/rsa_alt_helpers.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/sha1.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/sha256.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/sha512.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/sha3.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/threading.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/timing.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/version.c - ${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/version_features.c ) set(src_x509 @@ -125,42 +60,6 @@ set(src_tls ) if(GEN_FILES) - find_package(Perl REQUIRED) - - file(GLOB crypto_error_headers ${CMAKE_CURRENT_SOURCE_DIR}/../tf-psa-crypto/drivers/builtin/include/mbedtls/*.h) - file(GLOB tls_error_headers ${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls/*.h) - add_custom_command( - OUTPUT - ${CMAKE_CURRENT_BINARY_DIR}/${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/error.c - COMMAND - ${PERL_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_errors.pl - ${CMAKE_CURRENT_SOURCE_DIR}/../tf-psa-crypto/drivers/builtin/include/mbedtls - ${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files - ${CMAKE_CURRENT_BINARY_DIR}/${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/error.c - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_errors.pl - ${crypto_error_headers} - ${tls_error_headers} - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/error.fmt - ) - - add_custom_command( - OUTPUT - ${CMAKE_CURRENT_BINARY_DIR}/${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_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}/${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_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 @@ -188,8 +87,6 @@ if(GEN_FILES) ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers_no_static.c.jinja ) else() - link_to_source(${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/error.c) - link_to_source(${TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_DIR}/version_features.c) 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) @@ -215,10 +112,6 @@ if(CMAKE_COMPILER_IS_MSVC) endif() endif() -if(WIN32) - set(libs ${libs} ws2_32 bcrypt) -endif(WIN32) - if(CMAKE_C_COMPILER_ID MATCHES "AppleClang") set(CMAKE_C_ARCHIVE_CREATE " Scr ") set(CMAKE_C_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") @@ -275,6 +168,8 @@ if(USE_STATIC_MBEDTLS_LIBRARY) 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() @@ -298,6 +193,8 @@ if(USE_SHARED_MBEDTLS_LIBRARY) 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() diff --git a/tf-psa-crypto/drivers/CMakeLists.txt b/tf-psa-crypto/drivers/CMakeLists.txt index 517b6dfd9f..3642e02deb 100644 --- a/tf-psa-crypto/drivers/CMakeLists.txt +++ b/tf-psa-crypto/drivers/CMakeLists.txt @@ -1,3 +1,3 @@ -add_subdirectory(builtin) add_subdirectory(everest) add_subdirectory(p256-m) +add_subdirectory(builtin) diff --git a/tf-psa-crypto/drivers/builtin/CMakeLists.txt b/tf-psa-crypto/drivers/builtin/CMakeLists.txt index febd4f0ab6..ab9895f3ac 100644 --- a/tf-psa-crypto/drivers/builtin/CMakeLists.txt +++ b/tf-psa-crypto/drivers/builtin/CMakeLists.txt @@ -1 +1,162 @@ add_subdirectory(src) + +file(GLOB src_builtin RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/*.c) +if(NOT "src/error.c" IN_LIST "${src_builtin}") + list(APPEND src_builtin src/error.c) +endif() +if(NOT "src/version_features.c" IN_LIST "${src_builtin}") + list(APPEND src_builtin src/version_features.c) +endif() + +if(GEN_FILES) + find_package(Perl REQUIRED) + + file(GLOB crypto_error_headers ${CMAKE_CURRENT_SOURCE_DIR}/include/mbedtls/*.h) + file(GLOB tls_error_headers ${MBEDTLS_DIR}/include/mbedtls/*.h) + add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/src/error.c + COMMAND + ${PERL_EXECUTABLE} + ${MBEDTLS_DIR}/scripts/generate_errors.pl + ${CMAKE_CURRENT_SOURCE_DIR}/include/mbedtls + ${MBEDTLS_DIR}/include/mbedtls + ${MBEDTLS_DIR}/scripts/data_files + ${CMAKE_CURRENT_BINARY_DIR}/src/error.c + DEPENDS + ${MBEDTLS_DIR}/scripts/generate_errors.pl + ${crypto_error_headers} + ${tls_error_headers} + ${MBEDTLS_DIR}/scripts/data_files/error.fmt + ) + + add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/src/version_features.c + COMMAND + ${PERL_EXECUTABLE} + ${MBEDTLS_DIR}/scripts/generate_features.pl + ${MBEDTLS_DIR}/include/mbedtls + ${MBEDTLS_DIR}/scripts/data_files + ${CMAKE_CURRENT_BINARY_DIR}/src/version_features.c + DEPENDS + ${MBEDTLS_DIR}/scripts/generate_features.pl + ${MBEDTLS_DIR}/include/mbedtls/mbedtls_config.h + ${MBEDTLS_DIR}/scripts/data_files/version_features.fmt + ) +else() + link_to_source(src/error.c) + link_to_source(src/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(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 bcrypt) +endif(WIN32) + +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() + +set(builtin_target ${MBEDTLS_TARGET_PREFIX}builtin) +if (USE_STATIC_MBEDTLS_LIBRARY) + set(builtin_static_target ${builtin_target}) +endif() +set(target_libraries ${builtin_target}) +if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) + string(APPEND builtin_static_target "_static") + list(APPEND target_libraries ${builtin_static_target}) +endif() + +set(p256m_target "${MBEDTLS_TARGET_PREFIX}p256m") +set(everest_target "${MBEDTLS_TARGET_PREFIX}everest") + +if(USE_STATIC_MBEDTLS_LIBRARY) + add_library(${builtin_static_target} STATIC ${src_builtin}) + target_link_libraries(${builtin_static_target} PUBLIC ${libs}) + if(TARGET ${everest_target}) + target_link_libraries(${builtin_static_target} PUBLIC ${everest_target}) + endif() + + if(TARGET ${p256m_target}) + target_link_libraries(${builtin_static_target} PUBLIC ${p256m_target}) + endif() +endif(USE_STATIC_MBEDTLS_LIBRARY) + +if(USE_SHARED_MBEDTLS_LIBRARY) + add_library(${builtin_target} SHARED ${src_builtin}) + target_link_libraries(${builtin_target} PUBLIC ${libs}) + if(TARGET ${everest_target}) + target_link_libraries(${builtin_target} PUBLIC ${everest_target}) + endif() + + if(TARGET ${p256m_target}) + target_link_libraries(${builtin_target} PUBLIC ${p256m_target}) + endif() +endif(USE_SHARED_MBEDTLS_LIBRARY) + +foreach (target IN LISTS target_libraries) + target_include_directories(${target} + PUBLIC $ + $ + $ + $ + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../core) + + # Pass-through MBEDTLS_CONFIG_FILE and MBEDTLS_USER_CONFIG_FILE + # This must be duplicated from library/CMakeLists.txt because + # everest is not directly linked against any mbedtls targets + # so does not inherit the compile definitions. + 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() + + if(INSTALL_MBEDTLS_HEADERS) + + install(DIRECTORY include/mbedtls + DESTINATION include + FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + FILES_MATCHING PATTERN "*.h") + + endif(INSTALL_MBEDTLS_HEADERS) + + install(TARGETS ${target} + EXPORT MbedTLSTargets + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +endforeach(target)