Files
MSE-SoftwEng/TSM_PicoW_Sensor/CMakeLists.txt
SylvanArnold 6cd510e749 feat: added PicoW_Sensor code template
Credits to @ext-erich.styger that provided the template
2025-05-06 13:07:01 +00:00

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(TSM_PicoW_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()