121 lines
3.9 KiB
CMake
121 lines
3.9 KiB
CMake
cmake_minimum_required(VERSION 3.25...3.30)
|
|
|
|
# Toolchain file is set in CMakePresets.json
|
|
message(STATUS "Toolchain file is: " ${CMAKE_TOOLCHAIN_FILE})
|
|
|
|
# use pre-built picotool if present:
|
|
if(EXISTS "$ENV{PICO_SDK_PATH}/../picotool")
|
|
set(picotool_DIR $ENV{PICO_SDK_PATH}/../picotool)
|
|
message(STATUS "picotool found in: " ${picotool_DIR})
|
|
else()
|
|
message(STATUS "picotool not found, need to build it.")
|
|
endif()
|
|
|
|
# use pre-built pioasm if present:
|
|
if(EXISTS "$ENV{PICO_SDK_PATH}/../pioasm")
|
|
set(pioasm_DIR $ENV{PICO_SDK_PATH}/../pioasm)
|
|
message(STATUS "pioasm found in: " ${pioasm_DIR})
|
|
add_executable(Pioasm IMPORTED)
|
|
set_property(TARGET Pioasm PROPERTY IMPORTED_LOCATION ${pioasm_DIR})
|
|
set(Pioasm_FOUND 1)
|
|
else()
|
|
message(STATUS "pioasm not found, need to build it.")
|
|
endif()
|
|
|
|
# Required for McuLib, to know the target system
|
|
set(
|
|
MCULIB_TARGET RP2040 CACHE STRING
|
|
"Select McuLib target: MCUXPRESSO, RP2040 or ESP32"
|
|
)
|
|
|
|
# turn variable on for verbose output, useful for build debugging. Or run 'ninja --verbose' in the build folder
|
|
#set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "ON")
|
|
|
|
# settings for the board and hardware used
|
|
set(PICO_PLATFORM rp2040)
|
|
set(PICO_BOARD pico_w) # pico or pico_w
|
|
|
|
# initialize the SDK based on PICO_SDK_PATH
|
|
# note: this must happen before project()
|
|
# Include build functions from Pico SDK
|
|
include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)
|
|
|
|
# set project name ${CMAKE_PROJECT_NAME}
|
|
project(pico_sensor
|
|
C CXX ASM
|
|
)
|
|
|
|
# set C and C++ standard to be used
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
# [Platfrom specific command] Initialize the Raspberry Pi Pico SDK
|
|
pico_sdk_init()
|
|
|
|
message(STATUS "Pico SDK version is: " ${PICO_SDK_VERSION_STRING})
|
|
|
|
# set variables for directories
|
|
set(PROJECT_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
set(MCULIB_DIR "${PROJECT_ROOT_DIR}/McuLib")
|
|
set(EXECUTABLE ${PROJECT_NAME}.elf)
|
|
set(BUILD_DIR "${PROJECT_ROOT_DIR}/build")
|
|
set(TEST_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.elf")
|
|
|
|
add_compile_options(-include "${PROJECT_ROOT_DIR}/src/IncludeMcuLibConfig.h")
|
|
include_directories("${MCULIB_DIR}/src")
|
|
include_directories("${PROJECT_ROOT_DIR}/src")
|
|
|
|
# add linker flags to print cross-reference table in map file and memory usage on console
|
|
add_link_options(-Wl,--cref,--print-memory-usage)
|
|
|
|
# to avoid that it shows up as 'Reset' USB device, see https://forums.raspberrypi.com/viewtopic.php?t=324909
|
|
add_compile_options(-DPICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0)
|
|
|
|
# Check if ENABLE_UNIT_TESTING is set to ON in the CMake preset
|
|
if (ENABLE_UNIT_TESTING)
|
|
message(STATUS "ENABLE_UNIT_TESTING is ON")
|
|
add_compile_options(-DENABLE_UNIT_TESTS=1) # used to enable tests in code
|
|
else()
|
|
message(STATUS "ENABLE_UNIT_TESTING is OFF")
|
|
add_compile_options(-DENABLE_UNIT_TESTS=0) # used to disable tests in code
|
|
endif()
|
|
|
|
add_executable(${CMAKE_PROJECT_NAME}
|
|
# add additional source files here
|
|
)
|
|
|
|
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
|
|
COMMAND arm-none-eabi-size "${CMAKE_PROJECT_NAME}.elf"
|
|
COMMENT "Printing code and data size"
|
|
)
|
|
|
|
# add component directories to the list
|
|
add_subdirectory(./src srcLib)
|
|
|
|
# generate extra files (map/bin/hex/uf2)
|
|
pico_add_extra_outputs(${CMAKE_PROJECT_NAME})
|
|
|
|
target_link_libraries(
|
|
${CMAKE_PROJECT_NAME}
|
|
PRIVATE pico_stdlib
|
|
PUBLIC srcLib
|
|
)
|
|
##################################################################################
|
|
# Unit Test support
|
|
if (ENABLE_UNIT_TESTING)
|
|
# Adding some options to make CTest more verbose, helpful in case of failures.
|
|
list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure")
|
|
list(APPEND CMAKE_CTEST_ARGUMENTS "--verbose")
|
|
|
|
# Include CTest support
|
|
include(CTest) # note: this adds a BUILD_TESTING which defaults to ON, which can be used in other CMakeLists.txt
|
|
|
|
# Just a check for the variable
|
|
if (BUILD_TESTING)
|
|
message(STATUS "BUILD_TESTING is ON")
|
|
endif()
|
|
|
|
message(STATUS "Adding unity")
|
|
add_subdirectory(${MCULIB_DIR}/unity unity)
|
|
endif()
|