|
| 1 | +# This file maps the CMSIS project options to toolchain settings. |
| 2 | +# |
| 3 | +# - Applies to toolchain: Microchip XC32 Compiler version 5.0.0 and greater |
| 4 | + |
| 5 | +set(AS "xc32-gcc") |
| 6 | +set(CC "xc32-gcc") |
| 7 | +set(CPP "xc32-gcc") |
| 8 | +set(CXX "xc32-g++") |
| 9 | +set(OC "xc32-objcopy") |
| 10 | + |
| 11 | +set(TOOLCHAIN_ROOT "${REGISTERED_TOOLCHAIN_ROOT}") |
| 12 | +set(TOOLCHAIN_VERSION "${REGISTERED_TOOLCHAIN_VERSION}") |
| 13 | + |
| 14 | +if(DEFINED TOOLCHAIN_ROOT) |
| 15 | + set(PREFIX) |
| 16 | + set(EXT) |
| 17 | + |
| 18 | + set(AS ${TOOLCHAIN_ROOT}/${PREFIX}${AS}${EXT}) |
| 19 | + set(CC ${TOOLCHAIN_ROOT}/${PREFIX}${CC}${EXT}) |
| 20 | + set(CPP ${TOOLCHAIN_ROOT}/${PREFIX}${CPP}${EXT}) |
| 21 | + set(CXX ${TOOLCHAIN_ROOT}/${PREFIX}${CXX}${EXT}) |
| 22 | + set(OC ${TOOLCHAIN_ROOT}/${PREFIX}${OC}${EXT}) |
| 23 | +endif() |
| 24 | + |
| 25 | +# Environment variables |
| 26 | + |
| 27 | +if(NOT DEFINED ENV{DEVICE_ID}) |
| 28 | + message(FATAL_ERROR "Environment variable DEVICE_ID not defined!") |
| 29 | +endif() |
| 30 | + |
| 31 | +if(NOT DEFINED ENV{DFP_PATH}) |
| 32 | + message(FATAL_ERROR "Environment variable DFP_PATH not defined!") |
| 33 | +endif() |
| 34 | + |
| 35 | +set(DEVICE_ID $ENV{DEVICE_ID}) |
| 36 | +set(DFP_PATH $ENV{DFP_PATH}) |
| 37 | +set(LINKER_SCRIPT "${DFP_PATH}/xc32/${DEVICE_ID}/${DEVICE_ID}.ld") |
| 38 | + |
| 39 | +# Helpers |
| 40 | + |
| 41 | +function(cbuild_set_option_flags lang option value flags) |
| 42 | + if(NOT DEFINED ${option}_${lang}_FLAGS) |
| 43 | + return() |
| 44 | + endif() |
| 45 | + list(FIND ${option}_VALUES "${value}" _index) |
| 46 | + if (${_index} GREATER -1) |
| 47 | + list(GET ${option}_${lang}_FLAGS ${_index} flag) |
| 48 | + if(NOT flag STREQUAL "") |
| 49 | + string(STRIP "${flag} ${${flags}}" ${flags}) |
| 50 | + set(${flags} "${${flags}}" PARENT_SCOPE) |
| 51 | + endif() |
| 52 | + elseif(NOT value STREQUAL "") |
| 53 | + string(TOLOWER "${option}" _option) |
| 54 | + message(FATAL_ERROR "unkown '${_option}' value '${value}' !") |
| 55 | + endif() |
| 56 | +endfunction() |
| 57 | + |
| 58 | +function(cbuild_set_options_flags lang optimize debug warnings language flags) |
| 59 | + set(tmp "") |
| 60 | + cbuild_set_option_flags(${lang} OPTIMIZE "${optimize}" tmp) |
| 61 | + cbuild_set_option_flags(${lang} DEBUG "${debug}" tmp) |
| 62 | + cbuild_set_option_flags(${lang} WARNINGS "${warnings}" tmp) |
| 63 | + if(lang STREQUAL "CC" OR lang STREQUAL "CXX") |
| 64 | + cbuild_set_option_flags(${lang} LANGUAGE "${language}" tmp) |
| 65 | + endif() |
| 66 | + set(${flags} "${tmp}" PARENT_SCOPE) |
| 67 | +endfunction() |
| 68 | + |
| 69 | + |
| 70 | +set(OPTIMIZE_VALUES "debug" "none" "balanced" "size" "speed" "minimal") |
| 71 | +set(OPTIMIZE_CC_FLAGS "-Og" "-O0" "-O2" "-Os" "-O3" "-O1") |
| 72 | +set(OPTIMIZE_CXX_FLAGS ${OPTIMIZE_CC_FLAGS}) |
| 73 | +set(OPTIMIZE_LD_FLAGS ${OPTIMIZE_CC_FLAGS}) |
| 74 | +set(OPTIMIZE_ASM_FLAGS ${OPTIMIZE_CC_FLAGS}) |
| 75 | + |
| 76 | +set(DEBUG_VALUES "on" "off") |
| 77 | +set(DEBUG_CC_FLAGS "-g" "") |
| 78 | +set(DEBUG_CXX_FLAGS "-g" "") |
| 79 | +set(DEBUG_LD_FLAGS "-g" "") |
| 80 | +set(DEBUG_ASM_FLAGS "-g" "") |
| 81 | + |
| 82 | +set(WARNINGS_VALUES "on" "off" "all") |
| 83 | +set(WARNINGS_CC_FLAGS "-Wall" "-w" "-Wall -Wextra") |
| 84 | +set(WARNINGS_CXX_FLAGS "-Wall" "-w" "-Wall -Wextra") |
| 85 | +set(WARNINGS_ASM_FLAGS "-Wall" "-w" "-Wall -Wextra") |
| 86 | +set(WARNINGS_LD_FLAGS "" "" "") |
| 87 | + |
| 88 | +set(LANGUAGE_VALUES "c90" "gnu90" "c99" "gnu99" "c11" "gnu11" "c++98" "gnu++98" "c++03" "gnu++03" "c++11" "gnu++11" "c++14" "gnu++14" "c++17" "gnu++17" ) |
| 89 | +set(LANGUAGE_CC_FLAGS "-std=c90" "-std=gnu90" "-std=c99" "-std=gnu99" "-std=c11" "-std=gnu11" "" "" "" "" "" "" "" "" "" "" ) |
| 90 | +set(LANGUAGE_CXX_FLAGS "" "" "" "" "" "" "-std=c++98" "-std=gnu++98" "-std=c++03" "-std=gnu++03" "-std=c++11" "-std=gnu++11" "-std=c++14" "-std=gnu++14" "-std=c++17" "-std=gnu++17") |
| 91 | + |
| 92 | +# XC32 Processor/DFP flags |
| 93 | +set(XC32_COMMON_FLAGS "-mprocessor=${DEVICE_ID} -mdfp=${DFP_PATH}") |
| 94 | + |
| 95 | +# C Compiler |
| 96 | + |
| 97 | +set(CC_OPTIONS_FLAGS "") |
| 98 | +cbuild_set_options_flags(CC "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "${LANGUAGE_CC}" CC_OPTIONS_FLAGS) |
| 99 | +set(CMAKE_C_FLAGS "${XC32_COMMON_FLAGS} ${CC_OPTIONS_FLAGS}") |
| 100 | + |
| 101 | + |
| 102 | +# C++ Compiler |
| 103 | + |
| 104 | +set(CXX_OPTIONS_FLAGS "") |
| 105 | +cbuild_set_options_flags(CXX "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "${LANGUAGE_CXX}" CXX_OPTIONS_FLAGS) |
| 106 | +set(CMAKE_CXX_FLAGS "${XC32_COMMON_FLAGS} ${CXX_OPTIONS_FLAGS}") |
| 107 | + |
| 108 | +# Assembler |
| 109 | + |
| 110 | +set(ASM_OPTIONS_FLAGS "") |
| 111 | +cbuild_set_options_flags(ASM "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "" ASM_OPTIONS_FLAGS) |
| 112 | +set(CMAKE_ASM_FLAGS "${XC32_COMMON_FLAGS} ${ASM_OPTIONS_FLAGS}") |
| 113 | + |
| 114 | +# Linker |
| 115 | + |
| 116 | +set(LD_OPTIONS_FLAGS "") |
| 117 | +cbuild_set_options_flags(LD "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "" LD_OPTIONS_FLAGS) |
| 118 | +set(CMAKE_EXE_LINKER_FLAGS "${XC32_COMMON_FLAGS} ${LD_OPTIONS_FLAGS} -T ${LINKER_SCRIPT}") |
| 119 | + |
| 120 | +# ELF to HEX conversion |
| 121 | +set(ELF2HEX -O ihex "${OUT_DIR}/$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>.elf" "${OUT_DIR}/${HEX_FILE}") |
| 122 | + |
| 123 | +# ELF to BIN conversion |
| 124 | +set(ELF2BIN -O binary "${OUT_DIR}/$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>.elf" "${OUT_DIR}/${BIN_FILE}") |
| 125 | + |
| 126 | +# Set CMake variables for toolchain initialization |
| 127 | +set(CMAKE_SYSTEM_NAME Generic) |
| 128 | +set(CMAKE_CROSSCOMPILING TRUE) |
| 129 | +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) |
| 130 | +set(CMAKE_ASM_COMPILER "${AS}") |
| 131 | +set(CMAKE_C_COMPILER "${CC}") |
| 132 | +set(CMAKE_CXX_COMPILER "${CXX}") |
| 133 | +set(CMAKE_OBJCOPY "${OC}") |
0 commit comments