I am building an application for the nRF52840 on Linux just using west . I have been struggling with this issue for some time now. The linker can't find any mbedtls_ccm functions no matter what.
I am including the following headers in my source file
#include <mbedtls/aes.h> #include <mbedtls/ccm.h> #include <mbedtls/sha256.h>
My proj.conf file looks like this :
# Configurations # SUBSYSTEM-ACCEL CONFIG_CTR_ACCEL=y # SUBSYSTEM-BATT # @erich CONFIG_CTR_BATT=y # SUBSYSTEM-BLUETOOTH CONFIG_CTR_BLE=y # SUBSYSTEM-BUF CONFIG_CTR_BUF=y # SUBSYSTEM-BUTTON CONFIG_CTR_BUTTON=y # SUBSYSTEM-CLOUD CONFIG_CTR_CLOUD=y CONFIG_SETTINGS_SHELL=y CONFIG_SETTINGS_FCB=y CONFIG_FCB=y CONFIG_IMG_MANAGER=y CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE=0x8000 CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y CONFIG_SPI=y CONFIG_DFU_TARGET=y CONFIG_DFU_TARGET_STREAM=y CONFIG_DFU_TARGET_MCUBOOT=y CONFIG_DFU_TARGET_LOG_LEVEL_DBG=y CONFIG_STREAM_FLASH_ERASE=y CONFIG_STREAM_FLASH=y CONFIG_FILE_SYSTEM=y CONFIG_FILE_SYSTEM_LITTLEFS=y CONFIG_FILE_SYSTEM_MKFS=y CONFIG_FILE_SYSTEM_SHELL=y CONFIG_SETTINGS_FILE=y CONFIG_SETTINGS_FILE_PATH="/lfs1/settings/run" CONFIG_PM_PARTITION_REGION_LITTLEFS_EXTERNAL=y # SUBSYSTEM-CONFIG CONFIG_CTR_CONFIG=y # SUBSYSTEM-DEFAULTS CONFIG_CTR_DEFAULTS=y # SUBSYSTEM-ENTROPY-GENERATOR CONFIG_ENTROPY_GENERATOR=y # SUBSYSTEM-GNSS CONFIG_CTR_GNSS=y # SUBSYSTEM-INFO CONFIG_CTR_INFO=y # SUBSYSTEM-LED CONFIG_CTR_LED=y # SUBSYSTEM-LOG CONFIG_CTR_LOG=y # SUBSYSTEM-LTE-V2 CONFIG_CTR_LTE_V2=y # SUBSYSTEM-RTC CONFIG_CTR_RTC=y # SUBSYSTEM-SHELL CONFIG_CTR_SHELL=y # SUBSYSTEM-THERM CONFIG_CTR_THERM=y # SUBSYSTEM-TINYCRYPT CONFIG_TINYCRYPT=y # SUBSYSTEM-TINYCRYPT-SHA256 CONFIG_TINYCRYPT_SHA256=y # SUBSYSTEM-WDOG CONFIG_CTR_WDOG=y # SUBSYSTEM-ZCBOR CONFIG_ZCBOR=y CONFIG_ZCBOR_STOP_ON_ERROR=y # Extra configurations CONFIG_ADC_NRFX_SAADC=n CONFIG_ADC_SHELL=n CONFIG_ADC_TLA2021_INIT_PRIORITY=60 CONFIG_CTR_LTE_V2_GNSS=y CONFIG_NEWLIB_LIBC_NANO=n CONFIG_CTR_GNSS_LOG_LEVEL_DBG=y CONFIG_GNSS_M8_LOG_LEVEL_DBG=y CONFIG_CTR_GNSS_M8=y CONFIG_CTR_GPIO=y CONFIG_BT=y CONFIG_BT_PERIPHERAL=y #CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS=n CONFIG_BT_BONDABLE=n CONFIG_BT_SMP=n CONFIG_BT_SETTINGS=y CONFIG_BT_DEVICE_NAME="Belter GATT Server" # GATT dynamic DB support CONFIG_BT_GATT_DYNAMIC_DB=y # Optional: Change MTU size CONFIG_BT_L2CAP_TX_MTU=247 CONFIG_BT_BUF_ACL_RX_SIZE=251 CONFIG_BT_BUF_ACL_TX_SIZE=251 # Logging (optional but useful) CONFIG_LOG=y CONFIG_LOG_MODE_IMMEDIATE=y CONFIG_MBEDTLS=y CONFIG_MBEDTLS_BUILTIN=y CONFIG_MBEDTLS_AES_C=y CONFIG_MBEDTLS_CCM_C=y CONFIG_MBEDTLS_BUILTIN=y CONFIG_MBEDTLS_ENABLE_HEAP=y CONFIG_MBEDTLS_HEAP_SIZE=34000 CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=4096 CONFIG_NET_SOCKETS_SOCKOPT_TLS=y CONFIG_MBEDTLS_SHA256_C=y CONFIG_POSIX_API=y CONFIG_POSIX_TIMERS=y #CONFIG_MBEDTLS_SHA256_ALT=n # Use software SHA256 implementation # ### Preserved code "config" (begin) # ^^^ Preserved code "config" (end)
When I do a west build get the following linker errors. The application builds fine when i disable any mbedtls calls. What am I missing or doing wrong?
/home/user/firmware/src/app_ble_auth.c:147: undefined reference to `mbedtls_ccm_init' /home/user/zephyr-sdk-0.17.0/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: /home/user/firmware/src/app_ble_auth.c:151: undefined reference to `mbedtls_ccm_setkey' /home/user/zephyr-sdk-0.17.0/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: /home/user/firmware/src/app_ble_auth.c:157: undefined reference to `mbedtls_ccm_encrypt_and_tag' /home/user/zephyr-sdk-0.17.0/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: /home/user/firmware/src/app_ble_auth.c:169: undefined reference to `mbedtls_ccm_free' collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed.