47 lines
1.6 KiB
CMake
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"
|
|
)
|