e4c11fd8aa
So far there was a runtime basename extraction of filenames passed to mbedTLS debug hook. This has both runtime penalty as well as code size penalty. Introduce a buildtime support of extracting basename of source filenames logged using logging subsystem, so that there is no need to do it at runtime. Provide Kconfig options for both buildtime and runtime basename extraction, as in some cases the buildtime basename extraction might not work, depending on toolchain used for building Zephyr. Default to buildtime when using Zephyr SDK, as that is proven to work. Use runtime basename extraction in other cases (other toolchains used). This saves approximately 204 bytes of code footprint for sample application with native TLS sockets built for nRF52840. Signed-off-by: Marcin Niestroj <m.niestroj@emb.dev>
85 lines
3 KiB
CMake
85 lines
3 KiB
CMake
if(CONFIG_MBEDTLS)
|
|
zephyr_interface_library_named(mbedTLS)
|
|
|
|
if(CONFIG_MBEDTLS_BUILTIN)
|
|
target_compile_definitions(mbedTLS INTERFACE
|
|
MBEDTLS_CONFIG_FILE="${CONFIG_MBEDTLS_CFG_FILE}"
|
|
)
|
|
|
|
target_include_directories(mbedTLS INTERFACE
|
|
${ZEPHYR_CURRENT_MODULE_DIR}/include
|
|
# mbedTLS v3.1.0 has psa_crypto_cipher.c including an internal header using <>.
|
|
# This line ensures the header can be found in Zephyr.
|
|
# When updating to mbedTLS > v3.1.0, please check if this has been corrected,
|
|
# and if so remove this include path.
|
|
${ZEPHYR_CURRENT_MODULE_DIR}/library
|
|
configs
|
|
include
|
|
)
|
|
|
|
zephyr_library()
|
|
|
|
file(GLOB
|
|
mbedtls_sources # This is an output parameter
|
|
${ZEPHYR_CURRENT_MODULE_DIR}/library/*.c
|
|
)
|
|
|
|
if(CONFIG_MBEDTLS_DEBUG_EXTRACT_BASENAME_AT_BUILDTIME)
|
|
zephyr_cc_option(-fmacro-prefix-map=${ZEPHYR_CURRENT_MODULE_DIR}/library/=)
|
|
endif()
|
|
|
|
zephyr_library_sources(
|
|
zephyr_init.c
|
|
${mbedtls_sources}
|
|
)
|
|
|
|
zephyr_library_sources_ifdef(CONFIG_MBEDTLS_DEBUG debug.c)
|
|
zephyr_library_sources_ifdef(CONFIG_MBEDTLS_SHELL shell.c)
|
|
|
|
# mbedTLS v3.1.0 is having unused variables and functions in /library/ssl_msg.c
|
|
# To avoid compilation warnings, which are treated as errors in CI, we disable unused variables and functions.
|
|
# Please check when mbedTLS is updated to version >v3.1.0 if those flags are still needed.
|
|
# If mbedTLS has fixed the mentioned issue, then please remove the flags.
|
|
set_source_files_properties(${ZEPHYR_CURRENT_MODULE_DIR}/library/ssl_msg.c
|
|
PROPERTIES COMPILE_OPTIONS "-Wno-unused-variable;-Wno-unused-function")
|
|
|
|
zephyr_library_app_memory(k_mbedtls_partition)
|
|
if(CONFIG_ARCH_POSIX AND CONFIG_ASAN AND NOT CONFIG_64BIT)
|
|
# i386 assembly code used in MBEDTLS does not compile with size optimization
|
|
# if address sanitizer is enabled, as such switch default optimization level
|
|
# to speed
|
|
set_property(SOURCE ${ZEPHYR_CURRENT_MODULE_DIR}/mbedtls/library/bignum.c APPEND PROPERTY COMPILE_OPTIONS
|
|
"${OPTIMIZE_FOR_SPEED_FLAG}")
|
|
endif ()
|
|
|
|
if(CONFIG_MBEDTLS_ZEPHYR_ENTROPY AND NOT CONFIG_ENTROPY_HAS_DRIVER)
|
|
message(WARNING "No entropy device on the system, using fake entropy source!")
|
|
endif()
|
|
|
|
zephyr_library_link_libraries(mbedTLS)
|
|
elseif (CONFIG_MBEDTLS_LIBRARY)
|
|
|
|
# NB: CONFIG_MBEDTLS_LIBRARY is not regression tested and is
|
|
# therefore susceptible to bit rot
|
|
|
|
target_include_directories(mbedTLS INTERFACE
|
|
${CONFIG_MBEDTLS_INSTALL_PATH}
|
|
)
|
|
|
|
zephyr_link_libraries(
|
|
mbedtls_external
|
|
-L${CONFIG_MBEDTLS_INSTALL_PATH}
|
|
gcc
|
|
)
|
|
# Lib mbedtls_external depends on libgcc (I assume?) so to allow
|
|
# mbedtls_external to link with gcc we need to ensure it is placed
|
|
# after mbedtls_external on the linkers command line.
|
|
else()
|
|
# If none of either CONFIG_MBEDTLS_BUILTIN or CONFIG_MBEDTLS_LIBRARY
|
|
# are defined the users need add a custom Kconfig choice to the
|
|
# MBEDTLS_IMPLEMENTATION and manually add the mbedtls library and
|
|
# included the required directories for mbedtls in their projects.
|
|
endif()
|
|
|
|
endif()
|