cmake_minimum_required(VERSION 3.17) set(CMAKE_VERBOSE_MAKEFILE ON) # ----------------------------------------------------------------------------- # Set SDK Paths # ----------------------------------------------------------------------------- # Allow overriding via environment variables or cache if desired. if(NOT DEFINED ENV{PICO_SDK_PATH}) set(ENV{PICO_SDK_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../external/pico_sdk") endif() set(PICO_SDK_PATH "$ENV{PICO_SDK_PATH}") if(NOT DEFINED ENV{MICRO_ROS_SDK_PATH}) set(ENV{MICRO_ROS_SDK_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../external/micro_ros_raspberrypi_pico_sdk") endif() set(MICRO_ROS_SDK_PATH "$ENV{MICRO_ROS_SDK_PATH}") if(NOT DEFINED ENV{PICOTOOL_FETCH_FROM_GIT_PATH}) set(ENV{PICOTOOL_FETCH_FROM_GIT_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../external/picotool") endif() set(PICOTOOL_FETCH_FROM_GIT_PATH "$ENV{PICOTOOL_FETCH_FROM_GIT_PATH}") message(STATUS "PICO_SDK_PATH: ${PICO_SDK_PATH}") message(STATUS "MICRO_ROS_SDK_PATH: ${MICRO_ROS_SDK_PATH}") message(STATUS "PICOTOOL_FETCH_FROM_GIT_PATH: ${PICOTOOL_FETCH_FROM_GIT_PATH}") # ----------------------------------------------------------------------------- # Compiler Flags # ----------------------------------------------------------------------------- # Adding flags to reduce code size and allow linker garbage collection. # Change your executable PROJECT_NAME to something creative! set(PROJECT_NAME uros_template) set(PICO_BOARD pico2) set(PICO_PLATFORM rp2350) # set(PICO_BOARD pico) # set(PICO_PLATFORM rp2040) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections") # ----------------------------------------------------------------------------- # Include the Pico SDK (using our local copy in the cmake/ folder) # ----------------------------------------------------------------------------- include("${PICO_SDK_PATH}/external/pico_sdk_import.cmake") # ----------------------------------------------------------------------------- # Project Definition # ----------------------------------------------------------------------------- project(${PROJECT_NAME} C CXX ASM) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 26) set(PICO_CXX_ENABLE_EXCEPTIONS 1) # ----------------------------------------------------------------------------- # Initialize the Pico SDK # ----------------------------------------------------------------------------- pico_sdk_init() # ----------------------------------------------------------------------------- # Add Subdirectories for Libraries and Other Components # ----------------------------------------------------------------------------- # Build the pico_uart_transport library (its CMakeLists.txt should be in src/pico_uart_transport) add_subdirectory(pico_uart_transport) # ----------------------------------------------------------------------------- # Main Executable Target # ----------------------------------------------------------------------------- add_executable(${PROJECT_NAME} # main_publisher.cpp main_subscriber.cpp ) # ----------------------------------------------------------------------------- # Include Directories for the Main Target # ----------------------------------------------------------------------------- target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${MICRO_ROS_SDK_PATH}/libmicroros/include ) # ----------------------------------------------------------------------------- # Link Libraries # ----------------------------------------------------------------------------- target_link_libraries(${PROJECT_NAME} PUBLIC pico_stdlib pico_uart_transport ) # Instead of linking the micro-ROS static library by its path directly, create an imported target. add_library(micro_ros STATIC IMPORTED) set_target_properties(micro_ros PROPERTIES IMPORTED_LOCATION "${MICRO_ROS_SDK_PATH}/libmicroros/libmicroros.a" ) target_link_libraries(${PROJECT_NAME} PUBLIC micro_ros) # ----------------------------------------------------------------------------- # Pico-Specific Settings # ----------------------------------------------------------------------------- # Enable both USB and UART stdio (choose your desired configuration). pico_enable_stdio_usb(${PROJECT_NAME} 1) pico_enable_stdio_uart(${PROJECT_NAME} 1) # pico_enable_stdio_uart(${PROJECT_NAME} 0) # Add compile definitions at the target level. target_compile_definitions(${PROJECT_NAME} PUBLIC PICO_UART_ENABLE_CRLF_SUPPORT=0 # Disable CRLF support for UART PICO_STDIO_ENABLE_CRLF_SUPPORT=0 # Disable CRLF support for stdio PICO_STDIO_DEFAULT_CRLF=0 # Set the default CRLF conversion to 0 (no conversion) ) # ----------------------------------------------------------------------------- # Generate Additional Output Files (UF2, ELF, etc.) # ----------------------------------------------------------------------------- pico_add_extra_outputs(${PROJECT_NAME})