utilities.cmake 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. function(stm32_util_create_family_targets FAMILY)
  2. set(CORES ${ARGN})
  3. list(LENGTH CORES NUM_CORES)
  4. if(${NUM_CORES} EQUAL 0)
  5. set(CORE "")
  6. set(CORE_C "")
  7. elseif(${NUM_CORES} EQUAL 1)
  8. set(CORE "_${CORES}")
  9. set(CORE_C "::${CORES}")
  10. else()
  11. message(FATAL_ERROR "Expected at most one core for family ${FAMILY}: ${CORES}")
  12. endif()
  13. if(NOT (TARGET STM32::${FAMILY}${CORE_C}))
  14. add_library(STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED)
  15. target_compile_options(STM32::${FAMILY}${CORE_C} INTERFACE
  16. --sysroot="${TOOLCHAIN_SYSROOT}"
  17. -mthumb -mabi=aapcs -Wall -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -ffast-math
  18. $<$<CONFIG:Debug>:-Og>
  19. $<$<CONFIG:Release>:-Os>
  20. )
  21. target_link_options(STM32::${FAMILY}${CORE_C} INTERFACE
  22. --sysroot="${TOOLCHAIN_SYSROOT}"
  23. -mthumb -mabi=aapcs -Wl,--gc-sections
  24. $<$<CONFIG:Debug>:-Og>
  25. $<$<CONFIG:Release>:-Os -s>
  26. )
  27. target_compile_definitions(STM32::${FAMILY}${CORE_C} INTERFACE
  28. STM32${FAMILY}
  29. )
  30. endif()
  31. foreach(TYPE ${STM32_${FAMILY}_TYPES})
  32. if(NOT (TARGET STM32::${TYPE}${CORE_C}))
  33. add_library(STM32::${TYPE}${CORE_C} INTERFACE IMPORTED)
  34. target_link_libraries(STM32::${TYPE}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C})
  35. target_compile_definitions(STM32::${TYPE}${CORE_C} INTERFACE
  36. STM32${TYPE}
  37. )
  38. endif()
  39. endforeach()
  40. endfunction()