Files
simple_rtos/CMakeLists.txt
2026-03-14 11:49:04 -06:00

47 lines
1.6 KiB
CMake

cmake_minimum_required(VERSION 3.22)
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/arm-none-eabi-gcc.cmake)
project(rtos_lib C ASM)
# MCU-specific flags for Cortex-M4 with FPU (STM32G474RE)
set(MCU_FLAGS "-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard")
set(CMAKE_C_FLAGS "${MCU_FLAGS} -Wall -fdata-sections -ffunction-sections -save-temps=obj" CACHE STRING "" FORCE)
set(CMAKE_ASM_FLAGS "${MCU_FLAGS} -x assembler-with-cpp" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_DEBUG "-Og -g3 -gdwarf-2" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELEASE "-Os" CACHE STRING "" FORCE)
# Linker script
set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/STM32G474XX_FLASH.ld)
set(CMAKE_EXE_LINKER_FLAGS "${MCU_FLAGS} -specs=nano.specs -T${LINKER_SCRIPT} -Wl,--gc-sections -Wl,-Map=${PROJECT_NAME}.map,--cref" CACHE STRING "" FORCE)
# Define the STM32 device
add_definitions(-DSTM32G474xx)
# Include paths
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/cmsis/Include
${CMAKE_CURRENT_SOURCE_DIR}/cmsis/Device/ST/STM32G4xx/Include
${CMAKE_CURRENT_SOURCE_DIR}/include
)
# Source files
file(GLOB_RECURSE SOURCES
"src/*.c"
"src/*.s"
"startup/*.s"
)
# Build the ELF
add_executable(${PROJECT_NAME} ${SOURCES})
# Generate .hex and .bin after build
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${PROJECT_NAME}> ${PROJECT_NAME}.hex
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${PROJECT_NAME}> ${PROJECT_NAME}.bin
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${PROJECT_NAME}>
COMMENT "Generating .hex and .bin, printing size"
)