CMakeLists.txt 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. PROJECT(STM32F40G_EVAL LANGUAGES C CXX)
  2. set(CMAKE_BUILD_TYPE Debug)
  3. set(CMAKE_EXPORT_COMPILE_COMMANDS ON )
  4. CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
  5. ENABLE_LANGUAGE(ASM)
  6. SET(TARGET stm32f4HAL)
  7. ADD_DEFINITIONS(-DDEBUG_UART_HANDLE=UartHandle)
  8. # Remove -rdynamic option from linking that is not supported by arm-none-eabi
  9. # Also remove "undefined reference to `_sbrk'" error
  10. set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-specs=nano.specs -specs=nosys.specs")
  11. set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
  12. SET(CMAKE_C_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=softfp -Wall -mfpu=fpv4-sp-d16 -Wl,-Map=output.map -Wl,--gc-sections -g3")
  13. set(STM32_CHIP STM32F407IGH6)
  14. set(STM_BOARD STM324xG_EVAL)
  15. set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
  16. set(CMAKE_TOOLCHAIN_FILE ${CMAKE_MODULE_PATH}/gcc_stm32.cmake)
  17. include(${CMAKE_TOOLCHAIN_FILE})
  18. FIND_PACKAGE(Git REQUIRED)
  19. set(CUBE_SOURCE "${CMAKE_BINARY_DIR}/STM32F4-Cube-Firmware")
  20. if(EXISTS ${CUBE_SOURCE})
  21. message("Cube FW directory exists")
  22. else()
  23. message("Getting Cube Firmware")
  24. set(GIT_REPOSITORY "https://github.com/alxhoff/STM32F4-Cube-Firmware.git")
  25. execute_process(COMMAND ${GIT_EXECUTABLE} clone ${GIT_REPOSITORY} )
  26. endif()
  27. set(STM32Cube_DIR ${CUBE_SOURCE})
  28. FIND_PACKAGE(TFLite REQUIRED)
  29. SET(TFLITE_PLATFORM micro)
  30. set(STM32Cube_DIR ${CUBE_SOURCE})
  31. SET(FREERTOS_HEAP_IMPL 1)
  32. FIND_PACKAGE(FreeRTOS REQUIRED)
  33. FIND_PACKAGE(CMSIS REQUIRED)
  34. FIND_PACKAGE(STM32HAL COMPONENTS sram gpio uart REQUIRED)
  35. FIND_PACKAGE(STM32LL COMPONENTS fsmc sdmmc REQUIRED)
  36. FIND_PACKAGE(STM32BSP COMPONENTS sd sram ts io lcd ili9325 stmpe811 REQUIRED)
  37. INCLUDE_DIRECTORIES(
  38. ${CMAKE_CURRENT_SOURCE_DIR}
  39. "${PROJECT_SOURCE_DIR}/Inc"
  40. ${STM32HAL_INCLUDE_DIR}
  41. ${STM32LL_INCLUDE_DIR}
  42. ${CMSIS_INCLUDE_DIRS}
  43. ${FreeRTOS_INCLUDE_DIRS}
  44. ${STM32BSP_INCLUDE_DIR}
  45. ${TFLite_INCLUDE_DIRS}
  46. )
  47. file(GLOB PROJECT_SOURCES
  48. "Src/*.c"
  49. "Src/*.cc"
  50. "Src/*.cpp"
  51. )
  52. SET(STM32_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT})
  53. ADD_EXECUTABLE(
  54. ${CMAKE_PROJECT_NAME}.elf
  55. ${PROJECT_SOURCES}
  56. ${STM32HAL_SOURCES}
  57. ${STM32BSP_SOURCES}
  58. ${STM32LL_SOURCES}
  59. ${FreeRTOS_SOURCES}
  60. ${TFLite_SOURCES}
  61. ${CMSIS_SOURCES}
  62. )
  63. TARGET_COMPILE_DEFINITIONS(${CMAKE_PROJECT_NAME}.elf PUBLIC STM_BSP)
  64. ADD_CUSTOM_TARGET(
  65. flash
  66. COMMAND ${CMAKE_OBJCOPY} -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin # TODO
  67. COMMAND st-flash write ${CMAKE_PROJECT_NAME}.bin 0x8000000
  68. )
  69. ADD_DEPENDENCIES(flash ${CMAKE_PROJECT_NAME}.elf)
  70. IF(NOT OPENOCD_BOARD)
  71. FILE(GLOB OPENOCD_BOARD ${PROJECT_SOURCE_DIR}/*.cfg)
  72. ENDIF()
  73. ADD_CUSTOM_TARGET(
  74. debug
  75. COMMAND openocd -f ${OPENOCD_BOARD} >/dev/null 2>&1 & sleep 2
  76. COMMAND ${TARGET_TRIPLET}-gdb -quiet -tui -command=${CMAKE_CURRENT_LIST_DIR}/GDBCommands -se ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.elf
  77. COMMAND killall -15 openocd
  78. )
  79. ADD_DEPENDENCIES(debug flash)
  80. STM32_SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME}.elf)
  81. STM32_ADD_HEX_BIN_TARGETS(${CMAKE_PROJECT_NAME}.elf)
  82. STM32_PRINT_SIZE_OF_TARGETS(${CMAKE_PROJECT_NAME}.elf)
  83. # TODO: also clean .bin file on `make clean`