From 4ddbc0096a5e9925a27ee3a0b130fd78373650b6 Mon Sep 17 00:00:00 2001 From: Danny Oerndrup Date: Tue, 11 Jun 2019 13:55:53 +0200 Subject: [PATCH] cmake: Toolchain abstraction: Introducing macro toolchain_cc_imacros The macro is intended to abstract the -imacros compiler option for inclusion of the autoconf.h header file. The abstraction allows for a given toolchain to decide how the inclusion of the header file is to be done. The intent here is to abstract Zephyr's dependence on toolchains, thus allowing for easier porting to other, perhaps commercial, toolchains and/or usecases. No functional change expected. Signed-off-by: Danny Oerndrup --- CMakeLists.txt | 4 +++- cmake/compiler/clang/target.cmake | 1 + cmake/compiler/gcc/target.cmake | 1 + cmake/compiler/gcc/target_imacros.cmake | 9 +++++++++ cmake/compiler/host-gcc/target.cmake | 1 + cmake/compiler/xcc/target.cmake | 1 + 6 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 cmake/compiler/gcc/target_imacros.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 96d1807b37f3..abf098085c76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -214,12 +214,14 @@ endif() # @Intent: Set compiler specific flags for standard C includes toolchain_cc_nostdinc() +# @Intent: Set compiler specific macro inclusion of AUTOCONF_H +toolchain_cc_imacros(${AUTOCONF_H}) + # @Intent: Set compiler specific flag for bare metal freestanding option toolchain_cc_freestanding() zephyr_compile_options( -g # TODO: build configuration enough? - -imacros ${AUTOCONF_H} -fno-common ${TOOLCHAIN_C_FLAGS} ) diff --git a/cmake/compiler/clang/target.cmake b/cmake/compiler/clang/target.cmake index 31b53ce8df17..b20d4075a3f6 100644 --- a/cmake/compiler/clang/target.cmake +++ b/cmake/compiler/clang/target.cmake @@ -80,6 +80,7 @@ include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_cpp.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_asm.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_baremetal.cmake) include(${ZEPHYR_BASE}/cmake/compiler/${COMPILER}/target_warnings.cmake) +include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_imacros.cmake) macro(toolchain_cc_security_fortify) # No op, clang doesn't understand fortify at all diff --git a/cmake/compiler/gcc/target.cmake b/cmake/compiler/gcc/target.cmake index f717fb9a373d..926aa4c7fb19 100644 --- a/cmake/compiler/gcc/target.cmake +++ b/cmake/compiler/gcc/target.cmake @@ -140,3 +140,4 @@ include(${ZEPHYR_BASE}/cmake/compiler/${COMPILER}/target_cpp.cmake) include(${ZEPHYR_BASE}/cmake/compiler/${COMPILER}/target_asm.cmake) include(${ZEPHYR_BASE}/cmake/compiler/${COMPILER}/target_baremetal.cmake) include(${ZEPHYR_BASE}/cmake/compiler/${COMPILER}/target_warnings.cmake) +include(${ZEPHYR_BASE}/cmake/compiler/${COMPILER}/target_imacros.cmake) diff --git a/cmake/compiler/gcc/target_imacros.cmake b/cmake/compiler/gcc/target_imacros.cmake new file mode 100644 index 000000000000..31eadf2c66f1 --- /dev/null +++ b/cmake/compiler/gcc/target_imacros.cmake @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: Apache-2.0 + +# See root CMakeLists.txt for description and expectations of these macros + +macro(toolchain_cc_imacros header_file) + + zephyr_compile_options(-imacros ${header_file}) + +endmacro() diff --git a/cmake/compiler/host-gcc/target.cmake b/cmake/compiler/host-gcc/target.cmake index 0ccd4d8dee3b..220800571a31 100644 --- a/cmake/compiler/host-gcc/target.cmake +++ b/cmake/compiler/host-gcc/target.cmake @@ -89,3 +89,4 @@ include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_cpp.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_asm.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_baremetal.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_warnings.cmake) +include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_imacros.cmake) diff --git a/cmake/compiler/xcc/target.cmake b/cmake/compiler/xcc/target.cmake index 779dc6ca5f2a..137cff37fe0a 100644 --- a/cmake/compiler/xcc/target.cmake +++ b/cmake/compiler/xcc/target.cmake @@ -83,3 +83,4 @@ include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_cpp.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_asm.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_baremetal.cmake) include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_warnings.cmake) +include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_imacros.cmake)