Toolchain-EABI-ARM-Generic.cmake 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. INCLUDE(CMakeForceCompiler)
  2. # Embedded System - No OS
  3. SET(CMAKE_SYSTEM_NAME Generic)
  4. # Specifiy CPU
  5. set(CMAKE_SYSTEM_PROCESSOR cortex-m3)
  6. # specify the cross compiler
  7. CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU)
  8. CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU)
  9. # Find the target environment prefix..
  10. # First see where gcc is keeping libc.a
  11. execute_process(
  12. COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.a
  13. OUTPUT_VARIABLE CMAKE_INSTALL_PREFIX
  14. OUTPUT_STRIP_TRAILING_WHITESPACE
  15. )
  16. # Strip the filename off
  17. get_filename_component(CMAKE_INSTALL_PREFIX
  18. "${CMAKE_INSTALL_PREFIX}" PATH
  19. )
  20. # Then find the canonical path to the directory one up from there
  21. get_filename_component(CMAKE_INSTALL_PREFIX
  22. "${CMAKE_INSTALL_PREFIX}/.." REALPATH
  23. )
  24. set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH
  25. "Install path prefix, prepended onto install directories.")
  26. message(STATUS "Cross-compiling with the gcc-arm-embedded toolchain")
  27. message(STATUS "Toolchain prefix: ${CMAKE_INSTALL_PREFIX}")
  28. set(CMAKE_FIND_ROOT_PATH ${CMAKE_INSTALL_PREFIX})
  29. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  30. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  31. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  32. set(CMAKE_C_FLAGS
  33. "${CMAKE_C_FLAGS}"
  34. "-fno-common"
  35. "-Wstrict-prototypes -ffunction-sections -fdata-sections"
  36. )
  37. if (CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m3")
  38. set(CMAKE_C_FLAGS
  39. "${CMAKE_C_FLAGS}"
  40. "-mcpu=cortex-m3 -march=armv7-m -mthumb"
  41. "-msoft-float"
  42. "-ffunction-sections -fdata-sections"
  43. )
  44. endif()
  45. if (NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
  46. message(WARNING
  47. "Processor not recognised in toolchain file, "
  48. "compiler flags not configured."
  49. )
  50. endif ()
  51. # When we break up long strings in CMake we get semicolon
  52. # separated lists, undo this here...
  53. string(REGEX REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
  54. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "")