pico_arm_gcc.cmake 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # todo there is probably a more "cmake" way of doing this going thru the standard path with our "PICO" platform
  2. # i.e. CMake<Lang>Information and whatnot
  3. include(${CMAKE_CURRENT_LIST_DIR}/find_compiler.cmake)
  4. # include our Platform/PICO.cmake
  5. set(CMAKE_SYSTEM_NAME PICO)
  6. set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus)
  7. if (NOT PICO_GCC_TRIPLE)
  8. if (DEFINED ENV{PICO_GCC_TRIPLE})
  9. set(PICO_GCC_TRIPLE $ENV{PICO_GCC_TRIPLE})
  10. message("PICO_GCC_TRIPLE set from environment: $ENV{PICO_GCC_TRIPLE}")
  11. else()
  12. set(PICO_GCC_TRIPLE arm-none-eabi)
  13. message("PICO_GCC_TRIPLE defaulted to arm-none-eabi")
  14. endif()
  15. endif()
  16. # Find GCC for ARM.
  17. pico_find_compiler(PICO_COMPILER_CC ${PICO_GCC_TRIPLE}-gcc)
  18. pico_find_compiler(PICO_COMPILER_CXX ${PICO_GCC_TRIPLE}-g++)
  19. set(PICO_COMPILER_ASM "${PICO_COMPILER_CC}" CACHE INTERNAL "")
  20. pico_find_compiler(PICO_OBJCOPY ${PICO_GCC_TRIPLE}-objcopy)
  21. pico_find_compiler(PICO_OBJDUMP ${PICO_GCC_TRIPLE}-objdump)
  22. # Specify the cross compiler.
  23. set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler")
  24. set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler")
  25. set(CMAKE_C_OUTPUT_EXTENSION .o)
  26. # todo should we be including CMakeASMInformation anyway - i guess that is host side
  27. set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler")
  28. set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
  29. set(CMAKE_INCLUDE_FLAG_ASM "-I")
  30. set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "")
  31. set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "")
  32. # Disable compiler checks.
  33. set(CMAKE_C_COMPILER_FORCED TRUE)
  34. set(CMAKE_CXX_COMPILER_FORCED TRUE)
  35. # Add target system root to cmake find path.
  36. get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY)
  37. get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY)
  38. # Look for includes and libraries only in the target system prefix.
  39. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  40. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  41. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  42. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  43. option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0)
  44. # todo move to platform/Generix-xxx
  45. set(ARM_GCC_COMMON_FLAGS " -march=armv6-m -mcpu=cortex-m0plus -mthumb")
  46. #set(ARM_GCC_COMMON_FLAGS " -mcpu=cortex-m0plus -mthumb")
  47. foreach(LANG IN ITEMS C CXX ASM)
  48. set(CMAKE_${LANG}_FLAGS_INIT "${ARM_GCC_COMMON_FLAGS}")
  49. if (PICO_DEOPTIMIZED_DEBUG)
  50. set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-O0")
  51. else()
  52. set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-Og")
  53. endif()
  54. set(CMAKE_${LANG}_LINK_FLAGS "-Wl,--build-id=none")
  55. endforeach()