common.cmake 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. set(STM32_SUPPORTED_FAMILIES L0 L1 L4 F0 F1 F2 F3 F4 F7 H7)
  2. if(NOT STM32_TOOLCHAIN_PATH)
  3. set(STM32_TOOLCHAIN_PATH "/usr")
  4. message(STATUS "No STM32_TOOLCHAIN_PATH specified, using default: " ${STM32_TOOLCHAIN_PATH})
  5. else()
  6. file(TO_CMAKE_PATH "${STM32_TOOLCHAIN_PATH}" STM32_TOOLCHAIN_PATH)
  7. endif()
  8. if(NOT STM32_TARGET_TRIPLET)
  9. set(STM32_TARGET_TRIPLET "arm-none-eabi")
  10. message(STATUS "No STM32_TARGET_TRIPLET specified, using default: " ${STM32_TARGET_TRIPLET})
  11. endif()
  12. set(CMAKE_SYSTEM_NAME Generic)
  13. set(CMAKE_SYSTEM_PROCESSOR arm)
  14. set(TOOLCHAIN_SYSROOT "${STM32_TOOLCHAIN_PATH}/${STM32_TARGET_TRIPLET}")
  15. set(TOOLCHAIN_BIN_PATH "${STM32_TOOLCHAIN_PATH}/bin")
  16. set(TOOLCHAIN_INC_PATH "${STM32_TOOLCHAIN_PATH}/${STM32_TARGET_TRIPLET}/include")
  17. set(TOOLCHAIN_LIB_PATH "${STM32_TOOLCHAIN_PATH}/${STM32_TARGET_TRIPLET}/lib")
  18. find_program(CMAKE_OBJCOPY NAMES ${STM32_TARGET_TRIPLET}-objcopy PATHS ${TOOLCHAIN_BIN_PATH})
  19. find_program(CMAKE_OBJDUMP NAMES ${STM32_TARGET_TRIPLET}-objdump PATHS ${TOOLCHAIN_BIN_PATH})
  20. find_program(CMAKE_SIZE NAMES ${STM32_TARGET_TRIPLET}-size PATHS ${TOOLCHAIN_BIN_PATH})
  21. find_program(CMAKE_DEBUGGER NAMES ${STM32_TARGET_TRIPLET}-gdb PATHS ${TOOLCHAIN_BIN_PATH})
  22. find_program(CMAKE_CPPFILT NAMES ${STM32_TARGET_TRIPLET}-c++filt PATHS ${TOOLCHAIN_BIN_PATH})
  23. function(stm32_get_chip_type FAMILY DEVICE TYPE)
  24. if(${FAMILY} STREQUAL "F4")
  25. stm32f4_get_type(${DEVICE} T)
  26. endif()
  27. set(${TYPE} ${T} PARENT_SCOPE)
  28. endfunction()
  29. function(stm32_get_chip_info CHIP FAMILY TYPE DEVICE)
  30. string(TOUPPER ${CHIP} CHIP)
  31. string(REGEX MATCH "^STM32([A-Z][0-9])([0-9][0-9][A-Z][0-9A-Z]).*$" CHIP ${CHIP})
  32. if((NOT CMAKE_MATCH_1) OR (NOT CMAKE_MATCH_2))
  33. message(FATAL_ERROR "Unknown chip ${CHIP}")
  34. endif()
  35. set(STM32_FAMILY ${CMAKE_MATCH_1})
  36. set(STM32_DEVICE "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
  37. list(FIND STM32_SUPPORTED_FAMILIES ${STM32_FAMILY} STM32_FAMILY_INDEX)
  38. if (STM32_FAMILY_INDEX EQUAL -1)
  39. message(FATAL_ERROR "Unsupported family ${STM32_FAMILY} for device ${CHIP}")
  40. endif()
  41. stm32_get_chip_type(${STM32_FAMILY} ${STM32_DEVICE} STM32_TYPE)
  42. set(${FAMILY} ${STM32_FAMILY} PARENT_SCOPE)
  43. set(${DEVICE} ${STM32_DEVICE} PARENT_SCOPE)
  44. set(${TYPE} ${STM32_TYPE} PARENT_SCOPE)
  45. endfunction()
  46. foreach(FAMILY ${STM32_SUPPORTED_FAMILIES})
  47. if(NOT (TARGET STM32::${FAMILY}))
  48. add_library(STM32::${FAMILY} INTERFACE IMPORTED)
  49. target_compile_options(STM32::${FAMILY} INTERFACE
  50. --sysroot="${TOOLCHAIN_SYSROOT}"
  51. -mthumb -mabi=aapcs -Wall -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -ffast-math
  52. $<$<CONFIG:Debug>:-Og>
  53. $<$<CONFIG:Release>:-Os>
  54. )
  55. target_link_options(STM32::${FAMILY} INTERFACE
  56. --sysroot="${TOOLCHAIN_SYSROOT}"
  57. -mthumb -mabi=aapcs -Wl,--gc-sections
  58. $<$<CONFIG:Debug>:-Og>
  59. $<$<CONFIG:Release>:-Os -s>
  60. )
  61. endif()
  62. endforeach()
  63. if(NOT (TARGET STM32::NoSys))
  64. add_library(STM32::NoSys INTERFACE IMPORTED)
  65. target_compile_options(STM32::NoSys INTERFACE $<$<C_COMPILER_ID:GNU>:--specs=nosys.specs>)
  66. target_link_options(STM32::NoSys INTERFACE $<$<C_COMPILER_ID:GNU>:--specs=nosys.specs>)
  67. endif()
  68. include(stm32/f4)