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 $ ${PROJECT_NAME}.hex COMMAND ${CMAKE_OBJCOPY} -O binary $ ${PROJECT_NAME}.bin COMMAND ${CMAKE_SIZE} $ COMMENT "Generating .hex and .bin, printing size" )