1cmake_minimum_required(VERSION 3.22)23set(CMAKE_C_STANDARD 11)4set(CMAKE_C_STANDARD_REQUIRED ON)5set(CMAKE_C_EXTENSIONS ON)67if(NOT CMAKE_BUILD_TYPE)8 set(CMAKE_BUILD_TYPE "Debug")9endif()1011if(NOT CMAKE_TOOLCHAIN_FILE)12 set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/gcc-arm-none-eabi.cmake"13 CACHE FILEPATH "ARM GCC toolchain" FORCE)14endif()1516set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)17if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")18 set(CMAKE_COLOR_DIAGNOSTICS ON)19endif()2021set(CMAKE_PROJECT_NAME Hall_Senser)2223project(${CMAKE_PROJECT_NAME} C ASM)2425add_executable(${CMAKE_PROJECT_NAME})2627set(GD32_CMSIS "${CMAKE_CURRENT_SOURCE_DIR}/Firmware/CMSIS")28set(GD32_SPL "${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32E23x_standard_peripheral")2930# New src/*.c and SPL drivers are picked up on the next build (Ninja/Make).31file(GLOB HALL_APP_SOURCES CONFIGURE_DEPENDS32 "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c"33)34file(GLOB HALL_SPL_SOURCES CONFIGURE_DEPENDS35 "${GD32_SPL}/Source/*.c"36)3738target_sources(${CMAKE_PROJECT_NAME} PRIVATE39 gcc_startup/startup_gd32e23x.S40 ${GD32_CMSIS}/GD/GD32E23x/Source/system_gd32e23x.c41 ${GD32_CMSIS}/GD/GD32E23x/Source/syscalls.c42 ${HALL_SPL_SOURCES}43 ${HALL_APP_SOURCES}44 RTT/SEGGER_RTT.c45 RTT/SEGGER_RTT_printf.c46)4748target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE49 inc50 RTT51 ${GD32_CMSIS}52 ${GD32_CMSIS}/GD/GD32E23x/Include53 ${GD32_SPL}/Include54)5556# Same macros as the GD32EB project (.cproject, GD32E230G6U6TR).57target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE58 GD32E23059 USE_STDPERIPH_DRIVER60)6162set_source_files_properties(gcc_startup/startup_gd32e23x.S PROPERTIES LANGUAGE ASM)6364file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/ldscripts/gd32e23x_flash.ld" HALL_LINKER_SCRIPT)65target_link_options(${CMAKE_PROJECT_NAME} PRIVATE66 -T "${HALL_LINKER_SCRIPT}"67 "LINKER:-Map=$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/${CMAKE_PROJECT_NAME}.map"68)69set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES70 LINK_DEPENDS "${HALL_LINKER_SCRIPT}"71)7273if(NOT CMAKE_OBJCOPY)74 message(FATAL_ERROR "CMAKE_OBJCOPY is not set (arm-none-eabi-objcopy not found)")75endif()76add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD77 COMMAND "${CMAKE_OBJCOPY}" -O binary78 "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"79 "$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/${CMAKE_PROJECT_NAME}.bin"80 COMMAND "${CMAKE_OBJCOPY}" -O ihex81 "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"82 "$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/${CMAKE_PROJECT_NAME}.hex"83 COMMAND "${CMAKE_SIZE}" --format=berkeley "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"84 COMMENT "Generating bin/hex"85 VERBATIM86)8788# cmake --build --preset debug --target flash89add_custom_target(flash90 COMMAND powershell.exe -NoProfile -ExecutionPolicy Bypass91 -File "${CMAKE_CURRENT_SOURCE_DIR}/scripts/flash.ps1"92 -ElfFile "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"93 DEPENDS ${CMAKE_PROJECT_NAME}94 USES_TERMINAL95 COMMENT "Flash ${CMAKE_PROJECT_NAME} with OpenOCD"96 VERBATIM97)