# CMakeLists.txt (original) cmake_minimum_required(VERSION 3.22) # Setup compiler settings set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR}) message("Build type: " ${CMAKE_BUILD_TYPE}) # Core project settings project(system-controller) enable_language(C CXX ASM) # Set file to compiler defines set(CMAKE_TOOLCHAIN_FILE ${PROJ_PATH}/cmake/gcc-arm-none-eabi.cmake) set(CMAKE_MAKE_PROGRAM C:/ninja-win/ninja.exe) # Set linker script set(linker_script_SRC ${PROJ_PATH}/src/HAL/STM32U535xx_FLASH.ld) set(EXECUTABLE ${CMAKE_PROJECT_NAME}) file(GLOB sources_SRCS CONFIGURE_DEPENDS ${PROJ_PATH}/src/HAL/Core/Startup/startup_stm32u535vetxq.s ${PROJ_PATH}/src/HAL/Core/Src/*.c ${PROJ_PATH}/src/HAL/Drivers/STM32U5xx_HAL_Driver/Src/*.c ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/FreeRTOS/Source/*.c ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/*.c ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure/*.c ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/*.c ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/*.c ${PROJ_PATH}/src/App/Src/*.c ${PROJ_PATH}/src/App/Src/*.cpp ) # Include directories set(include_path_DIRS ${PROJ_PATH}/src/HAL/Core/Inc ${PROJ_PATH}/src/HAL/Drivers/CMSIS ${PROJ_PATH}/src/HAL/Drivers/STM32U5xx_HAL_Driver/Inc ${PROJ_PATH}/src/HAL/Drivers/STM32U5xx_HAL_Driver/Inc/Legacy ${PROJ_PATH}/src/HAL/Drivers/CMSIS/Core/Include ${PROJ_PATH}/src/HAL/Drivers/CMSIS/Core_A/Include ${PROJ_PATH}/src/HAL/Drivers/CMSIS/Device/ST/STM32U5xx/Include ${PROJ_PATH}/src/HAL/Drivers/CMSIS/Include ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/FreeRTOS/Source/include ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure ${PROJ_PATH}/src/HAL/Middlewares/Third_Party/CMSIS/RTOS2/Include ${PROJ_PATH}/src/App/Inc ) # Static libraries set(libraries_LIBS) # Executable files add_executable(${EXECUTABLE} ${sources_SRCS}) # Include paths target_include_directories(${EXECUTABLE} PRIVATE ${include_path_DIRS}) # Static libraries target_link_libraries(${EXECUTABLE} PRIVATE ${libraries_LIBS}) # Core MCU flags, CPU, instruction set and FPU setup # Needs to be set properly for your MCU set(CPU_PARAMETERS -mthumb -mcpu=cortex-m33 #-mfpu=fpv5-sp-d16 -mfloat-abi=soft # -march is deduced from -mcpu and -mfpu ) # C and C++ define macros set(COMMON_DEFS -DUSE_HAL_DRIVER -DSTM32U535xx -DDEBUG -DUSE_CMSIS_RTOS2 ) # C and C++ compiler flags set(COMMON_FLAGS -w -ggdb -O2 #-ffunction-sections #-fdata-sections #-fstack-usage ) # C Define macros set(C_DEFS ${COMMON_DEFS} ) # C++ Define macros set(CXX_DEFS ${COMMON_DEFS} ) # C Compiler options only set(C_FLAGS ${CPU_PARAMETERS} ${COMMON_FLAGS} -std=c11 ) # C++ Compiler options only set(CXX_FLAGS ${CPU_PARAMETERS} ${COMMON_FLAGS} -std=c++11 #-lstdc++ -fno-rtti -fno-exceptions -ffreestanding -flto ) # Assembler options set(ASM_FLAGS ${CPU_PARAMETERS} ) # Linker options target_link_options(${EXECUTABLE} PRIVATE ${CPU_PARAMETERS} -T${linker_script_SRC} -Wl,-Map=${CMAKE_PROJECT_NAME}.map --specs=nosys.specs #-u _printf_float -Wl,--start-group -lc -lm #-lstdc++ #-lsupc++ -Wl,--end-group -Wl,--print-memory-usage #-Wl,--gc-sections ) # Clear ASM flags for these build types to avoid some error SET(CMAKE_ASM_FLAGS_RELEASE "") SET(CMAKE_ASM_FLAGS_RELWITHDEBINFO "") SET(CMAKE_ASM_FLAGS_MINSIZEREL "") # Inline all options for specific tool target_compile_options(${EXECUTABLE} PRIVATE $<$:${C_DEFS} ${C_FLAGS}> $<$:${CXX_DEFS} ${CXX_FLAGS}> $<$:${ASM_FLAGS}> ) # Execute post-build to print size (this for some reason # has effect of trying to open '.elf' file after build) #add_custom_command(TARGET ${EXECUTABLE} POST_BUILD # COMMAND ${CMAKE_SIZE} $ #) # Convert output to hex and binary add_custom_command(TARGET ${EXECUTABLE} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O ihex $ ${EXECUTABLE}.hex ) # Convert to bin file -> add conditional check? add_custom_command(TARGET ${EXECUTABLE} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O binary $ ${EXECUTABLE}.bin )