CMakeLists.txt 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. cmake_minimum_required(VERSION 3.5)
  2. # Creates C resources file from files in given directory
  3. function(create_resources dir output)
  4. # Create empty output file
  5. file(WRITE ${output} "")
  6. # Collect input files
  7. file(GLOB bins ${dir}/*)
  8. # Iterate through input files
  9. foreach(bin ${bins})
  10. # Get short filenames
  11. string(REGEX MATCH "([^/]+)$" filename ${bin})
  12. message(STATUS "filename: " ${filename})
  13. # Replace filename spaces & extension separator for C compatibility
  14. string(REGEX REPLACE "\\.| |-" "_" filename ${filename})
  15. # Read hex data from file
  16. file(READ ${bin} filedata HEX)
  17. # Convert hex data for C compatibility
  18. string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," filedata ${filedata})
  19. # Append data to output file
  20. file(APPEND ${output} "const unsigned char ${filename}[] = {${filedata}};\nconst unsigned ${filename}_size = sizeof(${filename});\n")
  21. endforeach()
  22. endfunction()
  23. set(TOOLCHAIN_PREFIX / CACHE PATH "Path to arm toolchain")
  24. set(STM32Cube_DIR / CACHE PATH "Path to STM32 hal library")
  25. set(FLASHER_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
  26. set(CMAKE_TOOLCHAIN_FILE ${FLASHER_DIR}/submodules/stm32-cmake/cmake/gcc_stm32.cmake)
  27. set(STM32_CHIP STM32F407VG)
  28. set(PORT STM32)
  29. project(stm32_flasher)
  30. enable_language(ASM)
  31. create_resources(images Src/binaries.c)
  32. include_directories(${CMAKE_CURRENT_SOURCE_DIR} Inc)
  33. add_executable(${CMAKE_PROJECT_NAME}
  34. Src/main.c
  35. Src/stm32f4xx_hal_msp.c
  36. Src/stm32f4xx_it.c
  37. Src/libc_compat.c
  38. Src/binaries.c)
  39. add_subdirectory(${FLASHER_DIR}/submodules ${CMAKE_BINARY_DIR}/submodules)
  40. add_subdirectory(${FLASHER_DIR} ${CMAKE_BINARY_DIR}/flasher)
  41. target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE stm_cube flasher)
  42. STM32_ADD_HEX_BIN_TARGETS(${CMAKE_PROJECT_NAME})
  43. add_custom_target(BuildBinary ALL)
  44. add_dependencies(BuildBinary ${CMAKE_PROJECT_NAME}.bin)