Austin Schuh | 208337d | 2022-01-01 14:29:11 -0800 | [diff] [blame] | 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 | |
| 5 | # include our Platform/PICO.cmake |
| 6 | set(CMAKE_SYSTEM_NAME PICO) |
| 7 | set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus) |
| 8 | |
| 9 | if (NOT PICO_GCC_TRIPLE) |
| 10 | if (DEFINED ENV{PICO_GCC_TRIPLE}) |
| 11 | set(PICO_GCC_TRIPLE $ENV{PICO_GCC_TRIPLE}) |
| 12 | message("PICO_GCC_TRIPLE set from environment: $ENV{PICO_GCC_TRIPLE}") |
| 13 | else() |
| 14 | set(PICO_GCC_TRIPLE arm-none-eabi) |
| 15 | #pico_message_debug("PICO_GCC_TRIPLE defaulted to arm-none-eabi") |
| 16 | endif() |
| 17 | endif() |
| 18 | |
| 19 | # Find GCC for ARM. |
| 20 | pico_find_compiler(PICO_COMPILER_CC ${PICO_GCC_TRIPLE}-gcc) |
| 21 | pico_find_compiler(PICO_COMPILER_CXX ${PICO_GCC_TRIPLE}-g++) |
| 22 | set(PICO_COMPILER_ASM "${PICO_COMPILER_CC}" CACHE INTERNAL "") |
| 23 | pico_find_compiler(PICO_OBJCOPY ${PICO_GCC_TRIPLE}-objcopy) |
| 24 | pico_find_compiler(PICO_OBJDUMP ${PICO_GCC_TRIPLE}-objdump) |
| 25 | |
| 26 | # Specify the cross compiler. |
| 27 | set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler") |
| 28 | set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler") |
| 29 | set(CMAKE_C_OUTPUT_EXTENSION .o) |
| 30 | |
| 31 | # todo should we be including CMakeASMInformation anyway - i guess that is host side |
| 32 | set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler") |
| 33 | set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") |
| 34 | set(CMAKE_INCLUDE_FLAG_ASM "-I") |
| 35 | set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "") |
| 36 | set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "") |
| 37 | |
| 38 | # Disable compiler checks. |
| 39 | set(CMAKE_C_COMPILER_FORCED TRUE) |
| 40 | set(CMAKE_CXX_COMPILER_FORCED TRUE) |
| 41 | |
| 42 | # Add target system root to cmake find path. |
| 43 | get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY) |
| 44 | get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY) |
| 45 | |
| 46 | # Look for includes and libraries only in the target system prefix. |
| 47 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) |
| 48 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) |
| 49 | set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) |
| 50 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) |
| 51 | |
| 52 | option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0) |
| 53 | |
| 54 | # todo move to platform/Generix-xxx |
| 55 | |
| 56 | # on ARM -mcpu should not be mixed with -march |
| 57 | set(ARM_GCC_COMMON_FLAGS " -mcpu=cortex-m0plus -mthumb") |
| 58 | foreach(LANG IN ITEMS C CXX ASM) |
| 59 | set(CMAKE_${LANG}_FLAGS_INIT "${ARM_GCC_COMMON_FLAGS}") |
| 60 | if (PICO_DEOPTIMIZED_DEBUG) |
| 61 | set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-O0") |
| 62 | else() |
| 63 | set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-Og") |
| 64 | endif() |
| 65 | set(CMAKE_${LANG}_LINK_FLAGS "-Wl,--build-id=none") |
| 66 | endforeach() |
| 67 | |