gcc_stm32.cmake 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. INCLUDE(CMakeForceCompiler)
  2. SET(STM32_SUPPORTED_FAMILIES F1 F4 CACHE INTERNAL "stm32 supported families")
  3. IF(NOT TOOLCHAIN_PREFIX)
  4. SET(TOOLCHAIN_PREFIX "/usr")
  5. MESSAGE(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX})
  6. ENDIF()
  7. IF(NOT TARGET_TRIPLET)
  8. SET(TARGET_TRIPLET "arm-none-eabi")
  9. MESSAGE(STATUS "No TARGET_TRIPLET specified, using default: " ${TARGET_TRIPLET})
  10. ENDIF()
  11. IF(NOT STM32_FAMILY)
  12. MESSAGE(STATUS "No STM32_FAMILY specified, trying to get it from STM32_CHIP")
  13. IF(NOT STM32_CHIP)
  14. SET(STM32_FAMILY "F1" CACHE INTERNAL "stm32 family")
  15. MESSAGE(STATUS "Neither STM32_FAMILY nor STM32_CHIP specified, using default STM32_FAMILY: ${STM32_FAMILY}")
  16. ELSE()
  17. STRING(REGEX REPLACE "^[sS][tT][mM]32(([fF][0-4])|([lL][0-1])|([tT])|([wW])).+$" "\\1" STM32_FAMILY ${STM32_CHIP})
  18. STRING(TOUPPER ${STM32_FAMILY} STM32_FAMILY)
  19. MESSAGE(STATUS "Selected STM32 family: ${STM32_FAMILY}")
  20. ENDIF()
  21. ENDIF()
  22. STRING(TOUPPER ${STM32_FAMILY} STM32_FAMILY)
  23. LIST(FIND STM32_SUPPORTED_FAMILIES ${STM32_FAMILY} FAMILY_INDEX)
  24. IF(FAMILY_INDEX EQUAL -1)
  25. MESSAGE(FATAL_ERROR "Invalid/unsupported STM32 family: ${STM32_FAMILY}")
  26. ENDIF()
  27. SET(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin)
  28. SET(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET}/include)
  29. SET(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET}/lib)
  30. SET(CMAKE_SYSTEM_NAME Generic)
  31. SET(CMAKE_SYSTEM_PROCESSOR arm)
  32. CMAKE_FORCE_C_COMPILER(${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-gcc GNU)
  33. CMAKE_FORCE_CXX_COMPILER(${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-g++ GNU)
  34. SET(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-gcc)
  35. SET(CMAKE_OBJCOPY ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objcopy CACHE INTERNAL "objcopy tool")
  36. SET(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objdump CACHE INTERNAL "objdump tool")
  37. SET(CMAKE_C_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "c compiler flags debug")
  38. SET(CMAKE_CXX_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "cxx compiler flags debug")
  39. SET(CMAKE_ASM_FLAGS_DEBUG "-g" CACHE INTERNAL "asm compiler flags debug")
  40. SET(CMAKE_C_FLAGS_RELEASE "-Os" CACHE INTERNAL "c compiler flags release")
  41. SET(CMAKE_CXX_FLAGS_RELEASE "-Os" CACHE INTERNAL "cxx compiler flags release")
  42. SET(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "asm compiler flags release")
  43. SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET})
  44. SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  45. SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  46. SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  47. FUNCTION(STM32_ADD_HEX_BIN_TARGETS TARGET)
  48. ADD_CUSTOM_TARGET(${TARGET}.hex DEPENDS ${TARGET} COMMAND ${CMAKE_OBJCOPY} -Oihex ${TARGET} ${TARGET}.hex)
  49. ADD_CUSTOM_TARGET(${TARGET}.bin DEPENDS ${TARGET} COMMAND ${CMAKE_OBJCOPY} -Obinary ${TARGET} ${TARGET}.bin)
  50. ENDFUNCTION()
  51. STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
  52. INCLUDE(${CMAKE_CURRENT_LIST_DIR}/gcc_stm32${STM32_FAMILY_LOWER}.cmake)