From fec239727cbe17b2dfba0002122a02baff0a6db4 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Wed, 20 Mar 2019 10:15:17 -0700 Subject: [PATCH 1/6] Add support for the xc8-cc CLI from XC8 2.00. --- Modules/Compiler/XC8-C.cmake | 2 + Modules/Compiler/XC8CC-C.cmake | 39 ++++++++++++++ Modules/Platform/MicrochipMCU-C-XC8.cmake | 66 +++++++++++++++++++---- docs/xc8.md | 56 +++++++++++++++++++ 4 files changed, 152 insertions(+), 11 deletions(-) create mode 100644 Modules/Compiler/XC8CC-C.cmake create mode 100644 docs/xc8.md diff --git a/Modules/Compiler/XC8-C.cmake b/Modules/Compiler/XC8-C.cmake index 79c81a5..259c1df 100644 --- a/Modules/Compiler/XC8-C.cmake +++ b/Modules/Compiler/XC8-C.cmake @@ -13,6 +13,8 @@ # called by `CMakeCInformation` # to configure the XC8 compiler interface for C files +# this supports the `xc8` CLI driver in XC8 1.x +# and the equivalent legacy CLI driver in XC8 2.x set(MICROCHIP_XC8_MODE "free" diff --git a/Modules/Compiler/XC8CC-C.cmake b/Modules/Compiler/XC8CC-C.cmake new file mode 100644 index 0000000..13137bb --- /dev/null +++ b/Modules/Compiler/XC8CC-C.cmake @@ -0,0 +1,39 @@ +#============================================================================= +# Copyright 2019 Sam Hanes +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file COPYING.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake-Microchip, +# substitute the full License text for the above reference.) + +# called by `CMakeCInformation` +# to configure the XC8CC compiler interface for C files +# this supports the xc8-cc CLI driver from XC8 v2.x + + +string(APPEND CMAKE_C_FLAGS_INIT + # build for the configured MCU model + " -mcpu=${MICROCHIP_MCU_MODEL}" + # fail if the requested optimization level is forbidden by the license + " --nofallback" +) + +set(CMAKE_C_OUTPUT_EXTENSION ".p1") + +set(CMAKE_C_COMPILE_OBJECT) +string(APPEND CMAKE_C_COMPILE_OBJECT + " " + " -o -c " +) + +set(CMAKE_C_LINK_EXECUTABLE) +string(APPEND CMAKE_C_LINK_EXECUTABLE + " " + " " + " -o " +) diff --git a/Modules/Platform/MicrochipMCU-C-XC8.cmake b/Modules/Platform/MicrochipMCU-C-XC8.cmake index 9eae357..e70bc6b 100644 --- a/Modules/Platform/MicrochipMCU-C-XC8.cmake +++ b/Modules/Platform/MicrochipMCU-C-XC8.cmake @@ -27,19 +27,64 @@ if(NOT MICROCHIP_XC8_PATH) ) endif() - set(CMAKE_FIND_ROOT_PATH "${MICROCHIP_XC8_PATH}") -# skip compiler search and just use XC8 -find_program(CMAKE_C_COMPILER "xc8" - PATHS "${MICROCHIP_XC8_PATH}" - PATH_SUFFIXES "bin" + +if(NOT MICROCHIP_XC8_CLI) + set(MICROCHIP_XC8_CLI "xc8-cc") + set(_xc8_cli_default TRUE CACHE INTERNAL "" FORCE) +endif() +set(MICROCHIP_XC8_CLI "${MICROCHIP_XC8_CLI}" + CACHE STRING "the XC8 CLI driver to use ('xc8-cc' or 'xc8')" ) + +if(MICROCHIP_XC8_CLI STREQUAL "xc8-cc") + find_program(CMAKE_C_COMPILER "xc8-cc" + PATHS "${MICROCHIP_XC8_PATH}" + PATH_SUFFIXES "bin" + ) + set(_xc8_version_flag "--version") + set(CMAKE_C_COMPILER_ID "XC8CC") +elseif(MICROCHIP_XC8_CLI STREQUAL "xc8") + find_program(CMAKE_C_COMPILER "xc8" + PATHS "${MICROCHIP_XC8_PATH}" + PATH_SUFFIXES "bin" + ) + set(_xc8_version_flag "--ver") + set(CMAKE_C_COMPILER_ID "XC8") +else() + message(FATAL_ERROR + "Invalid choice '${MICROCHIP_XC8_CLI}' for MICROCHIP_XC8_CLI." + " Please choose either 'xc8-cc' (recommended) or 'xc8'." + " See docs/xc8.md in your cmake-microchip installation for" + " details on this option." + ) +endif() + + if(NOT CMAKE_C_COMPILER) + if(_xc8_cli_default) + message(WARNING + "The XC8 command-line driver was not explicitly selected," + " so the newer 'xc8-cc' driver is being used. This requires" + " XC8 version 2.00 or newer. If you want to use older versions" + " of XC8, or if you want to use the legacy 'xc8' driver in XC8" + " 2.00 or newer, add this line to your CMakeLists.txt before" + " the 'project' command:\n" + " set(MICROCHIP_XC8_CLI xc8)\n" + "To suppress this message when XC8 is not found but continue" + " using the newer 'xc8-cc' driver, add this line to your" + " CMakeLists.txt before the 'project' command:\n" + " set(MICROCHIP_XC8_CLI xc8-cc)\n" + "For more information on selecting a command-line driver" + " see docs/xc8.md in your cmake-microchip installation." + ) + endif() + message(FATAL_ERROR - "The XC8 compiler executable was not found, but what looks" - " like an XC8 installation was found at:\n" + "The XC8 compiler executable ${MICROCHIP_XC8_CLI} was not found," + " but what looks like an XC8 installation was found at:\n" " ${MICROCHIP_XC8_PATH}\n" "Please provide the path to a working XC8 installation on the" " command line, for example:\n" @@ -49,12 +94,11 @@ endif() # skip compiler ID since XC8 isn't supported by CMake's test file set(CMAKE_C_COMPILER_ID_RUN 1) -set(CMAKE_C_COMPILER_ID "XC8") # call the compiler to check its version function(_xc8_get_version) execute_process( - COMMAND "${CMAKE_C_COMPILER}" "--ver" + COMMAND "${CMAKE_C_COMPILER}" "${_xc8_version_flag}" OUTPUT_VARIABLE output ERROR_VARIABLE output RESULT_VARIABLE result @@ -62,7 +106,7 @@ function(_xc8_get_version) if(result) message(FATAL_ERROR - "Calling '${CMAKE_C_COMPILER} --ver' failed." + "Calling '${CMAKE_C_COMPILER} ${_xc8_version_flag}' failed." ) endif() @@ -70,7 +114,7 @@ function(_xc8_get_version) set(CMAKE_C_COMPILER_VERSION ${CMAKE_MATCH_1} PARENT_SCOPE) else() message(FATAL_ERROR - "Failed to parse output of '${CMAKE_C_COMPILER} --ver'." + "Failed to parse output of '${CMAKE_C_COMPILER} ${_xc8_version_flag}'." ) endif() endfunction() diff --git a/docs/xc8.md b/docs/xc8.md new file mode 100644 index 0000000..eb6046a --- /dev/null +++ b/docs/xc8.md @@ -0,0 +1,56 @@ + +## Versions + +In XC8 version 2.00, Microchip switched from their proprietary HI-TECH C +frontend to Clang in order to support C99. Rather than implement PIC +code generation in LLVM, they translate LLVM's IR to p-code (the HI-TECH +IR), which is then run through the same code generator used with the old +HI-TECH frontend. Although they use Clang by default, current versions +of XC8 still include the HI-TECH C frontend to support older projects. +They've also bundled in AVR-GCC to support AVR parts. + +### Command-line Driver + +Since they now need to support multiple compilers, Microchip also +introduced a new command-line driver, `xc8-cc`, in XC8 2.00. `xc8-cc` +is completely custom, but it uses GCC-style options for compatibility +with XC16 and XC32. The old command-line driver `xc8` was retained for +backwards compatibility. + +You can select which command-line driver to use by setting +`MICROCHIP_XC8_CLI` to either `xc8-cc` or `xc8` in your `CMakeLists.txt` +before calling the `project` command (which is when compiler resolution +occurs). For example: + +```cmake +# set up the Microchip cross toolchain +set(CMAKE_TOOLCHAIN_FILE external/cmake-microchip/toolchain.cmake) + +# set the default MCU model +set(MICROCHIP_MCU PIC18F87J50) + +# use the new command-line driver +set(MICROCHIP_XC8_CLI xc8-cc) + + +project(example C) +``` + +`MICROCHIP_XC8_CLI` may also be set on the command line as a cache +variable, although doing so may break your project if you use +command-line flags in your configuration that are specific to one of the +drivers. For example: + +```plain +cmake -DMICROCHIP_XC8_CLI=xc8 -DMICROCHIP_XC8_PATH=/opt/microchip/xc8/v1.45 . +``` + +For new projects it is recommended to use `xc8-cc`, which is the default +in cmake-microchip as of version 0.3. Using `xc8-cc` is required if you +want to use Clang (for C99) or AVR-GCC. + +Using the legacy `xc8` command-line driver is only recommended if you +need to support versions of XC8 before 2.00, or if you have a significant +number of command-line flags for `xc8` already and don't want to port +them. It is *not* necessary to use `xc8` in order to use the old HI-TECH +C frontend. From 5d85c7da57f560f970d5d1499ecbcbe4c1aa2e2f Mon Sep 17 00:00:00 2001 From: Bartosz Grabias Date: Wed, 20 Mar 2019 10:27:47 -0700 Subject: [PATCH 2/6] Add support for static libraries to XC8. --- Modules/Compiler/XC8-C.cmake | 10 ++++++++++ Modules/Compiler/XC8CC-C.cmake | 6 ++++++ Modules/Platform/MicrochipMCU-C-XC8.cmake | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/Modules/Compiler/XC8-C.cmake b/Modules/Compiler/XC8-C.cmake index 259c1df..8c2bff6 100644 --- a/Modules/Compiler/XC8-C.cmake +++ b/Modules/Compiler/XC8-C.cmake @@ -30,7 +30,10 @@ string(APPEND CMAKE_C_FLAGS_INIT " --chip=${MICROCHIP_MCU_MODEL}" ) + set(CMAKE_C_OUTPUT_EXTENSION ".p1") +set(CMAKE_STATIC_LIBRARY_SUFFIX_C ".lpp") + set(CMAKE_C_COMPILE_OBJECT) string(APPEND CMAKE_C_COMPILE_OBJECT @@ -44,3 +47,10 @@ string(APPEND CMAKE_C_LINK_EXECUTABLE " " " -o" ) + +set(CMAKE_C_CREATE_STATIC_LIBRARY) +string(APPEND CMAKE_C_CREATE_STATIC_LIBRARY + " " + " " + " --output=lpp -o" +) diff --git a/Modules/Compiler/XC8CC-C.cmake b/Modules/Compiler/XC8CC-C.cmake index 13137bb..945d127 100644 --- a/Modules/Compiler/XC8CC-C.cmake +++ b/Modules/Compiler/XC8CC-C.cmake @@ -37,3 +37,9 @@ string(APPEND CMAKE_C_LINK_EXECUTABLE " " " -o " ) + +set(CMAKE_C_CREATE_STATIC_LIBRARY) +string(APPEND CMAKE_C_CREATE_STATIC_LIBRARY + " -r " + " " +) diff --git a/Modules/Platform/MicrochipMCU-C-XC8.cmake b/Modules/Platform/MicrochipMCU-C-XC8.cmake index e70bc6b..fd8e36a 100644 --- a/Modules/Platform/MicrochipMCU-C-XC8.cmake +++ b/Modules/Platform/MicrochipMCU-C-XC8.cmake @@ -44,6 +44,10 @@ if(MICROCHIP_XC8_CLI STREQUAL "xc8-cc") PATHS "${MICROCHIP_XC8_PATH}" PATH_SUFFIXES "bin" ) + find_program(CMAKE_AR "xc8-ar" + PATHS "${MICROCHIP_XC8_PATH}" + PATH_SUFFIXES "bin" + ) set(_xc8_version_flag "--version") set(CMAKE_C_COMPILER_ID "XC8CC") elseif(MICROCHIP_XC8_CLI STREQUAL "xc8") From c1cbf13e60aff40d94721e1454c3556db8f2d854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rait=20R=C3=A4=C3=A4k?= Date: Wed, 4 Oct 2017 10:40:47 +1100 Subject: [PATCH 3/6] XC32 working on windows. --- Modules/Platform/MicrochipMCU-C-XC32.cmake | 14 +++++++------- Modules/Platform/MicrochipMCU-GNU-C.cmake | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Modules/Platform/MicrochipMCU-C-XC32.cmake b/Modules/Platform/MicrochipMCU-C-XC32.cmake index 9addb1e..10d8f10 100644 --- a/Modules/Platform/MicrochipMCU-C-XC32.cmake +++ b/Modules/Platform/MicrochipMCU-C-XC32.cmake @@ -30,12 +30,12 @@ endif() set(CMAKE_FIND_ROOT_PATH ${MICROCHIP_XC32_PATH}) -set(CMAKE_C_COMPILER xc32-gcc) +set(CMAKE_C_COMPILER ${MICROCHIP_XC32_PATH}/bin/xc32-gcc) +if(WIN32) + set(CMAKE_C_COMPILER ${CMAKE_C_COMPILER}.exe) +endif() + set(MICROCHIP_C_COMPILER_ID XC32) -add_compile_options( - "-mprocessor=${MICROCHIP_MCU_MODEL}" -) -string(APPEND CMAKE_C_LINK_FLAGS - " -mprocessor=${MICROCHIP_MCU_MODEL}" -) +set(CMAKE_C_FLAGS "-mprocessor=${MICROCHIP_MCU_MODEL}" CACHE STRING "" FORCE) +set(CMAKE_EXECUTABLE_SUFFIX_C ".elf" CACHE STRING "" FORCE) diff --git a/Modules/Platform/MicrochipMCU-GNU-C.cmake b/Modules/Platform/MicrochipMCU-GNU-C.cmake index 4fc430f..b0b7991 100644 --- a/Modules/Platform/MicrochipMCU-GNU-C.cmake +++ b/Modules/Platform/MicrochipMCU-GNU-C.cmake @@ -32,3 +32,20 @@ if(MICROCHIP_C_COMPILER_ID STREQUAL "XC16") set(CMAKE_C_COMPILER_ABI ELF) endif() endif() + +if(MICROCHIP_C_COMPILER_ID STREQUAL "XC32") + if(NOT CMAKE_C_COMPILE_FEATURES) + set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros") + set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") + set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") + set(CMAKE_C11_COMPILE_FEATURES "") + endif() + + if(NOT CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_C_SIZEOF_DATA_PTR 4) + endif() + + if(NOT CMAKE_C_COMPILER_ABI) + set(CMAKE_C_COMPILER_ABI ELF) + endif() +endif() From a67f6a94079e1311fb918d566ec497a3b991b053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rait=20R=C3=A4=C3=A4k?= Date: Thu, 5 Oct 2017 18:35:45 +1100 Subject: [PATCH 4/6] Added bin2hex. --- Modules/Platform/MicrochipMCU-C-XC32.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Modules/Platform/MicrochipMCU-C-XC32.cmake b/Modules/Platform/MicrochipMCU-C-XC32.cmake index 10d8f10..81a5bb8 100644 --- a/Modules/Platform/MicrochipMCU-C-XC32.cmake +++ b/Modules/Platform/MicrochipMCU-C-XC32.cmake @@ -30,11 +30,13 @@ endif() set(CMAKE_FIND_ROOT_PATH ${MICROCHIP_XC32_PATH}) -set(CMAKE_C_COMPILER ${MICROCHIP_XC32_PATH}/bin/xc32-gcc) +set(OS_SUFFIX "") if(WIN32) - set(CMAKE_C_COMPILER ${CMAKE_C_COMPILER}.exe) + string(APPEND OS_SUFFIX ".exe") endif() +set(CMAKE_C_COMPILER ${MICROCHIP_XC32_PATH}/bin/xc32-gcc${OS_SUFFIX} CACHE STRING "" FORCE) +set(CMAKE_BIN2HEX ${MICROCHIP_XC32_PATH}/bin/xc32-bin2hex${OS_SUFFIX} CACHE STRING "" FORCE) set(MICROCHIP_C_COMPILER_ID XC32) set(CMAKE_C_FLAGS "-mprocessor=${MICROCHIP_MCU_MODEL}" CACHE STRING "" FORCE) From 8116c088f6e869b221a0057548b4f46aea87da86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rait=20R=C3=A4=C3=A4k?= Date: Fri, 6 Oct 2017 11:57:01 +1100 Subject: [PATCH 5/6] CXX --- Modules/Platform/MicrochipMCU-C-XC32.cmake | 10 +++-- Modules/Platform/MicrochipMCU-CXX-XC32.cmake | 44 ++++++++++++++++++++ Modules/Platform/MicrochipMCU-CXX.cmake | 31 ++++++++++++++ Modules/Platform/MicrochipMCU-GNU-C.cmake | 1 + Modules/Platform/MicrochipMCU-GNU-CXX.cmake | 28 +++++++++++++ 5 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 Modules/Platform/MicrochipMCU-CXX-XC32.cmake create mode 100644 Modules/Platform/MicrochipMCU-CXX.cmake create mode 100644 Modules/Platform/MicrochipMCU-GNU-CXX.cmake diff --git a/Modules/Platform/MicrochipMCU-C-XC32.cmake b/Modules/Platform/MicrochipMCU-C-XC32.cmake index 81a5bb8..8fc4cab 100644 --- a/Modules/Platform/MicrochipMCU-C-XC32.cmake +++ b/Modules/Platform/MicrochipMCU-C-XC32.cmake @@ -15,10 +15,12 @@ # to provide information specific to the XC32 compiler include(MicrochipPathSearch) -MICROCHIP_PATH_SEARCH(MICROCHIP_XC32_PATH xc32 - CACHE "the path to a Microchip XC32 installation" - STORE_VERSION MICROCHIP_C_COMPILER_VERSION -) +if(NOT MICROCHIP_XC32_PATH) + MICROCHIP_PATH_SEARCH(MICROCHIP_XC32_PATH xc32 + CACHE "the path to a Microchip XC32 installation" + STORE_VERSION MICROCHIP_C_COMPILER_VERSION + ) +endif() if(NOT MICROCHIP_XC32_PATH) message(FATAL_ERROR diff --git a/Modules/Platform/MicrochipMCU-CXX-XC32.cmake b/Modules/Platform/MicrochipMCU-CXX-XC32.cmake new file mode 100644 index 0000000..738f711 --- /dev/null +++ b/Modules/Platform/MicrochipMCU-CXX-XC32.cmake @@ -0,0 +1,44 @@ +#============================================================================= +# Copyright 2016 Sam Hanes +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file COPYING.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake-Microchip, +# substitute the full License text for the above reference.) + +# this module is called by `Platform/MicrochipMCU-CXX` +# to provide information specific to the XC32 compiler + +include(MicrochipPathSearch) +if(NOT MICROCHIP_XC32_PATH) + MICROCHIP_PATH_SEARCH(MICROCHIP_XC32_PATH xc32 + CACHE "the path to a Microchip XC32 installation" + STORE_VERSION MICROCHIP_CXX_COMPILER_VERSION + ) +endif() + +if(NOT MICROCHIP_XC32_PATH) + message(FATAL_ERROR + "No Microchip XC32 compiler was found. Please provide the path" + " to an XC32 installation on the command line, for example:\n" + "cmake -DMICROCHIP_XC32_PATH=/opt/microchip/xc32/v1.42 ." + ) +endif() + +set(CMAKE_FIND_ROOT_PATH ${MICROCHIP_XC32_PATH}) + +set(OS_SUFFIX "") +if(WIN32) + string(APPEND OS_SUFFIX ".exe") +endif() + +set(CMAKE_CXX_COMPILER ${MICROCHIP_XC32_PATH}/bin/xc32-g++${OS_SUFFIX} CACHE STRING "" FORCE) +set(MICROCHIP_CXX_COMPILER_ID XC32) + +set(CMAKE_CXX_FLAGS "-mprocessor=${MICROCHIP_MCU_MODEL}" CACHE STRING "" FORCE) +set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf" CACHE STRING "" FORCE) diff --git a/Modules/Platform/MicrochipMCU-CXX.cmake b/Modules/Platform/MicrochipMCU-CXX.cmake new file mode 100644 index 0000000..ebf18e8 --- /dev/null +++ b/Modules/Platform/MicrochipMCU-CXX.cmake @@ -0,0 +1,31 @@ +#============================================================================= +# Copyright 2016 Sam Hanes +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file COPYING.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake-Microchip, +# substitute the full License text for the above reference.) + +# This module is loaded during the search for a CXX compiler +# to provide the information necessary to find one. + +if(CMAKE_SYSTEM_PROCESSOR STREQUAL "PIC_32") + include(Platform/MicrochipMCU-CXX-XC32) +else() + message(FATAL_ERROR + "No CXX compiler for '${CMAKE_SYSTEM_PROCESSOR}'" + " is supported yet." + ) +endif() + +if(MICROCHIP_CXX_COMPILER_ID) + message(STATUS + "Using Microchip CXX compiler ${MICROCHIP_CXX_COMPILER_ID}" + " ${MICROCHIP_CXX_COMPILER_VERSION}" + ) +endif() diff --git a/Modules/Platform/MicrochipMCU-GNU-C.cmake b/Modules/Platform/MicrochipMCU-GNU-C.cmake index b0b7991..a20b89a 100644 --- a/Modules/Platform/MicrochipMCU-GNU-C.cmake +++ b/Modules/Platform/MicrochipMCU-GNU-C.cmake @@ -16,6 +16,7 @@ # for XC16, inject properties that may have been missed # see `Platform/MicrochipMCU-C-XC16` for explanation + if(MICROCHIP_C_COMPILER_ID STREQUAL "XC16") if(NOT CMAKE_C_COMPILE_FEATURES) set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros") diff --git a/Modules/Platform/MicrochipMCU-GNU-CXX.cmake b/Modules/Platform/MicrochipMCU-GNU-CXX.cmake new file mode 100644 index 0000000..36fa706 --- /dev/null +++ b/Modules/Platform/MicrochipMCU-GNU-CXX.cmake @@ -0,0 +1,28 @@ +#============================================================================= +# Copyright 2016 Sam Hanes +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file COPYING.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake-Microchip, +# substitute the full License text for the above reference.) + +# this module is called after the compiler has been determined +# to set up information specific to Microchip GNU CXX compilers + +# for XC32, inject properties that may have been missed +# see `Platform/MicrochipMCU-CXX-XC32` for explanation + +if(MICROCHIP_CXX_COMPILER_ID STREQUAL "XC32") + if(NOT CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_CXX_SIZEOF_DATA_PTR 4) + endif() + + if(NOT CMAKE_CXX_COMPILER_ABI) + set(CMAKE_CXX_COMPILER_ABI ELF) + endif() +endif() From 59a51f914206d0006d18422df245395c6d49b28f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rait=20R=C3=A4=C3=A4k?= Date: Fri, 17 Nov 2017 15:11:35 +1100 Subject: [PATCH 6/6] Override Release and Debug flags. --- Modules/Platform/MicrochipMCU-C-XC32.cmake | 2 ++ Modules/Platform/MicrochipMCU-CXX-XC32.cmake | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Modules/Platform/MicrochipMCU-C-XC32.cmake b/Modules/Platform/MicrochipMCU-C-XC32.cmake index 8fc4cab..72e8f0d 100644 --- a/Modules/Platform/MicrochipMCU-C-XC32.cmake +++ b/Modules/Platform/MicrochipMCU-C-XC32.cmake @@ -42,4 +42,6 @@ set(CMAKE_BIN2HEX ${MICROCHIP_XC32_PATH}/bin/xc32-bin2hex${OS_SUFFIX} CACHE STRI set(MICROCHIP_C_COMPILER_ID XC32) set(CMAKE_C_FLAGS "-mprocessor=${MICROCHIP_MCU_MODEL}" CACHE STRING "" FORCE) +set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG" CACHE STRING "" FORCE) +set(CMAKE_C_FLAGS_DEBUG "-g" CACHE STRING "" FORCE) set(CMAKE_EXECUTABLE_SUFFIX_C ".elf" CACHE STRING "" FORCE) diff --git a/Modules/Platform/MicrochipMCU-CXX-XC32.cmake b/Modules/Platform/MicrochipMCU-CXX-XC32.cmake index 738f711..8aa707f 100644 --- a/Modules/Platform/MicrochipMCU-CXX-XC32.cmake +++ b/Modules/Platform/MicrochipMCU-CXX-XC32.cmake @@ -41,4 +41,6 @@ set(CMAKE_CXX_COMPILER ${MICROCHIP_XC32_PATH}/bin/xc32-g++${OS_SUFFIX} CACHE STR set(MICROCHIP_CXX_COMPILER_ID XC32) set(CMAKE_CXX_FLAGS "-mprocessor=${MICROCHIP_MCU_MODEL}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_DEBUG "-g" CACHE STRING "" FORCE) set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf" CACHE STRING "" FORCE)