raspberrypi / pico-sdk

BSD 3-Clause "New" or "Revised" License
3.24k stars 837 forks source link

Unable to Integrate mbedtls with Pico-SDK - CMake Build Fails [build] <command-line>: fatal error: mbedtls_config.h: No such file or directory #1713

Closed aymen99tn closed 1 month ago

aymen99tn commented 1 month ago

Hello,

I'm encountering an issue when trying to integrate the mbedtls library with the Pico-SDK for my Raspberry Pi Pico project. The CMake build fails, and I'm unable to resolve the problem despite multiple attempts.

[main] Building folder: 2nd 
[build] Starting build
[proc] Executing command: /home/aymen/.pico-sdk/cmake/v3.28.0-rc6/bin/cmake --build /home/aymen/projects/2nd/build --config Debug --target all --
[build] [1/1   0% :: 0.008] Re-running CMake...
[build] PICO_SDK_PATH is /home/aymen/.pico-sdk/sdk/1.5.1
[build] PICO platform is rp2040.
[build] Build type is Release
[build] PICO target board is pico_w.
[build] Using CMake board configuration from /home/aymen/.pico-sdk/sdk/1.5.1/src/boards/pico_w.cmake
[build] Using board configuration from /home/aymen/.pico-sdk/sdk/1.5.1/src/boards/include/boards/pico_w.h
[build] TinyUSB available at /home/aymen/.pico-sdk/sdk/1.5.1/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
[build] BTstack available at /home/aymen/.pico-sdk/sdk/1.5.1/lib/btstack
[build] cyw43-driver available at /home/aymen/.pico-sdk/sdk/1.5.1/lib/cyw43-driver
[build] Pico W Bluetooth build support available.
[build] lwIP available at /home/aymen/.pico-sdk/sdk/1.5.1/lib/lwip
[build] Pico W Wi-Fi build support available.
[build] mbedtls available at /home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls
[build] -- Configuring done (3.4s)
[build] -- Generating done (0.0s)
[build] -- Build files have been written to: /home/aymen/projects/2nd/build
[build] [2/207   0% :: 0.015] Performing build step for 'ELF2UF2Build'
[build] ninja: no work to do.
[build] [3/207   0% :: 0.015] Performing build step for 'PioasmBuild'
[build] ninja: no work to do.
[build] [4/207   1% :: 0.017] No install step for 'ELF2UF2Build'
[build] [5/207   1% :: 0.017] No install step for 'PioasmBuild'
[build] [6/207   2% :: 0.022] Completed 'ELF2UF2Build'
[build] [6/207   2% :: 0.023] Completed 'PioasmBuild'
[build] [24/207   3% :: 0.044] Building C object CMakeFiles/2nd.dir/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/aesni.c.obj
[build] FAILED: CMakeFiles/2nd.dir/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/aesni.c.obj 
[build] [24/207  11% :: 0.056] Building C object CMakeFiles/2nd.dir/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/cmac.c.obj
[build] FAILED: CMakeFiles/2nd.dir/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/cmac.c.obj 
[build] /home/aymen/.pico-sdk/toolchain/13_2_Rel1/bin/arm-none-eabi-gcc -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DCFG_TUSB_OS=OPT_OS_PICO -DCYW43_LWIP=1 -DLIB_PICO_ASYNC_CONTEXT_THREADSAFE_BACKGROUND=1 -DLIB_PICO_BIT_OPS=1 -DLIB_PICO_BIT_OPS_PICO=1 -DLIB_PICO_CYW43_ARCH=1 -DLIB_PICO_DIVIDER=1 -DLIB_PICO_DIVIDER_HARDWARE=1 -DLIB_PICO_DOUBLE=1 -DLIB_PICO_DOUBLE_PICO=1 -DLIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION=1 -DLIB_PICO_FLOAT=1 -DLIB_PICO_FLOAT_PICO=1 -DLIB_PICO_INT64_OPS=1 -DLIB_PICO_INT64_OPS_PICO=1 -DLIB_PICO_MALLOC=1 -DLIB_PICO_MEM_OPS=1 -DLIB_PICO_MEM_OPS_PICO=1 -DLIB_PICO_PLATFORM=1 -DLIB_PICO_PRINTF=1 -DLIB_PICO_PRINTF_PICO=1 -DLIB_PICO_RAND=1 -DLIB_PICO_RUNTIME=1 -DLIB_PICO_STANDARD_LINK=1 -DLIB_PICO_STDIO=1 -DLIB_PICO_STDIO_UART=1 -DLIB_PICO_STDIO_USB=1 -DLIB_PICO_STDLIB=1 -DLIB_PICO_SYNC=1 -DLIB_PICO_SYNC_CRITICAL_SECTION=1 -DLIB_PICO_SYNC_MUTEX=1 -DLIB_PICO_SYNC_SEM=1 -DLIB_PICO_TIME=1 -DLIB_PICO_UNIQUE_ID=1 -DLIB_PICO_UTIL=1 -DMBEDTLS_CONFIG_FILE=\"mbedtls_config.h\" -DPICO_BOARD=\"pico_w\" -DPICO_BUILD=1 -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DPICO_COPY_TO_RAM=0 -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DPICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1 -DPICO_NO_FLASH=0 -DPICO_NO_HARDWARE=0 -DPICO_ON_DEVICE=1 -DPICO_PROGRAM_NAME=\"2nd\" -DPICO_PROGRAM_VERSION_STRING=\"0.1\" -DPICO_RP2040_USB_DEVICE_UFRAME_FIX=1 -DPICO_TARGET_NAME=\"2nd\" -DPICO_USE_BLOCKED_RAM=0 -I/home/aymen/projects/2nd -I/home/aymen/projects/2nd/.. -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_stdlib/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_gpio/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_base/include -I/home/aymen/projects/2nd/build/generated/pico_base -I/home/aymen/.pico-sdk/sdk/1.5.1/src/boards/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_platform/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2040/hardware_regs/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_base/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2040/hardware_structs/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_claim/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_sync/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_irq/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_sync/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_time/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_timer/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_util/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_uart/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_resets/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_clocks/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_pll/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_vreg/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_watchdog/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_xosc/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_divider/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_runtime/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_printf/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_bit_ops/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_divider/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_double/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_float/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_malloc/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_bootrom/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_binary_info/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_stdio/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_stdio_uart/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_stdio_usb/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_unique_id/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_flash/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/common/pico_usb_reset_interface/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_int64_ops/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_mem_ops/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/boot_stage2/include -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/tinyusb/src -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/tinyusb/src/common -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/tinyusb/hw -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/include -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_rand/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_async_context/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_lwip/include -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/lwip/src/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_cyw43_arch/include -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/cyw43-driver/src -I/home/aymen/.pico-sdk/sdk/1.5.1/lib/cyw43-driver/firmware -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_cyw43_driver/cybt_shared_bus -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_pio/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_dma/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/hardware_exception/include -I/home/aymen/.pico-sdk/sdk/1.5.1/src/rp2_common/pico_cyw43_driver/include -I/home/aymen/projects/2nd/build/pico-sdk/src/rp2_common/pico_cyw43_driver -mcpu=cortex-m0plus -mthumb -O3 -DNDEBUG -std=gnu11 -ffunction-sections -fdata-sections -MD -MT CMakeFiles/2nd.dir/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/cmac.c.obj -MF CMakeFiles/2nd.dir/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/cmac.c.obj.d -o CMakeFiles/2nd.dir/home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/cmac.c.obj -c /home/aymen/.pico-sdk/sdk/1.5.1/lib/mbedtls/library/cmac.c
[build] <command-line>: fatal error: mbedtls_config.h: No such file or directory
[build] compilation terminated.
[build] ninja: build stopped: subcommand failed.
[proc] The command: /home/aymen/.pico-sdk/cmake/v3.28.0-rc6/bin/cmake --build /home/aymen/projects/2nd/build --config Debug --target all -- exited with code: 1
[driver] Build completed: 00:00:03.913
[build] Build finished with exit code 1
[cpptools] The build configurations generated do not contain the active build configuration. Using "Release" for CMAKE_BUILD_TYPE instead of "Debug" to ensure that IntelliSense configurations can be found

**Steps Taken:

Added pico_mbedtls to target_link_libraries. Verified that the Pico-SDK version is 1.4.0 or later. Followed standard procedures to initialize the Pico-SDK and add mbedtls.**

Project Configuration:

Here is my CMakeLists.txt file:

# Generated Cmake Pico project file

cmake_minimum_required(VERSION 3.13)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Initialise pico_sdk from installed location
# (note this can come from environment, CMake cache etc)

# == DO NEVER EDIT THE NEXT LINES for Raspberry Pi Pico VS Code Extension to work ==
if(WIN32)
   set(USERHOME $ENV{USERPROFILE})
else()
    set(USERHOME $ENV{HOME})
endif()
set(PICO_SDK_PATH ${USERHOME}/.pico-sdk/sdk/1.5.1)
set(PICO_TOOLCHAIN_PATH ${USERHOME}/.pico-sdk/toolchain/13_2_Rel1)
if(WIN32)
    set(pico-sdk-tools_DIR ${USERHOME}/.pico-sdk/tools/1.5.1)
    include(${pico-sdk-tools_DIR}/pico-sdk-tools-config.cmake)
    include(${pico-sdk-tools_DIR}/pico-sdk-tools-config-version.cmake)
endif()
# ====================================================================================
set(PICO_BOARD pico_w CACHE STRING "Board type")

# Pull in Raspberry Pi Pico SDK (must be before project)
include(pico_sdk_import.cmake)

if (PICO_SDK_VERSION_STRING VERSION_LESS "1.4.0")
  message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.4.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()

project(2nd C CXX ASM)

# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()

# Add executable. Default name is the project name, version 0.1

add_executable(2nd 2nd.c )

pico_set_program_name(2nd "2nd")
pico_set_program_version(2nd "0.1")

# Modify the below lines to enable/disable output over UART/USB
pico_enable_stdio_uart(2nd 1)
pico_enable_stdio_usb(2nd 1)

# Add the standard library to the build
target_link_libraries(2nd
        pico_stdlib
        pico_mbedtls)

# Add the standard include files to the build
target_include_directories(2nd PRIVATE
  ${CMAKE_CURRENT_LIST_DIR}
  ${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts or any other standard includes, if required
)

# Add any user requested libraries
target_link_libraries(2nd 
        pico_cyw43_arch_lwip_threadsafe_background
        )

pico_add_extra_outputs(2nd)

Despite these efforts, the build process fails, and I'm unable to proceed. Could someone guide me on how to properly integrate mbedtls with the Pico-SDK?

peterharperuk commented 1 month ago

[build] <command-line>: fatal error: mbedtls_config.h: No such file or directory

You need to add a mbedtls_config.h somewhere in your include path. Just copy an existing file from the examples to start with. https://github.com/raspberrypi/pico-examples/blob/master/pico_w/wifi/tls_client/mbedtls_config.h