From ede7fb68e78ad4a74bcc9c9f7c5bae62b8175fab Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Tue, 2 Jun 2020 10:53:48 +0200 Subject: scripts: import Linux Kconfig.include With this include, we can have goodies like $(cc-option ...) and $(success ...) inside our Kconfig files. gcc-version also now becomes available. While unused for now, it can allow us to selectively turn on warnings on new GCC versions, which were previously disabled because of their too high false positive rate. Signed-off-by: Ahmad Fatoum Signed-off-by: Sascha Hauer --- scripts/Kconfig.include | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ scripts/gcc-version.sh | 20 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 scripts/Kconfig.include create mode 100755 scripts/gcc-version.sh (limited to 'scripts') diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include new file mode 100644 index 0000000000..496d11c92c --- /dev/null +++ b/scripts/Kconfig.include @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-2.0-only +# Kconfig helper macros + +# Convenient variables +comma := , +quote := " +squote := ' +empty := +space := $(empty) $(empty) +dollar := $ +right_paren := ) +left_paren := ( + +# $(if-success,,,) +# Return if exits with 0, otherwise. +if-success = $(shell,{ $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)") + +# $(success,) +# Return y if exits with 0, n otherwise +success = $(if-success,$(1),y,n) + +# $(failure,) +# Return n if exits with 0, y otherwise +failure = $(if-success,$(1),n,y) + +# $(cc-option,) +# Return y if the compiler supports , n otherwise +cc-option = $(success,$(CC) -Werror $(CLANG_FLAGS) $(1) -S -x c /dev/null -o /dev/null) + +# $(ld-option,) +# Return y if the linker supports , n otherwise +ld-option = $(success,$(LD) -v $(1)) + +# $(as-instr,) +# Return y if the assembler supports , n otherwise +as-instr = $(success,printf "%b\n" "$(1)" | $(CC) $(CLANG_FLAGS) -c -x assembler -o /dev/null -) + +# check if $(CC) and $(LD) exist +$(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found) +$(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found) + +# Fail if the linker is gold as it's not capable of linking the kernel proper +$(error-if,$(success, $(LD) -v | grep -q gold), gold linker '$(LD)' not supported) + +# gcc version including patch level +gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC)) + +# machine bit flags +# $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise. +# $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise. +cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$(1)) +m32-flag := $(cc-option-bit,-m32) +m64-flag := $(cc-option-bit,-m64) diff --git a/scripts/gcc-version.sh b/scripts/gcc-version.sh new file mode 100755 index 0000000000..ae35343253 --- /dev/null +++ b/scripts/gcc-version.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# gcc-version gcc-command +# +# Print the gcc version of `gcc-command' in a 5 or 6-digit form +# such as `29503' for gcc-2.95.3, `30301' for gcc-3.3.1, etc. + +compiler="$*" + +if [ ${#compiler} -eq 0 ]; then + echo "Error: No compiler specified." >&2 + printf "Usage:\n\t$0 \n" >&2 + exit 1 +fi + +MAJOR=$(echo __GNUC__ | $compiler -E -x c - | tail -n 1) +MINOR=$(echo __GNUC_MINOR__ | $compiler -E -x c - | tail -n 1) +PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -x c - | tail -n 1) +printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL -- cgit v1.2.3 From 33bfb72092aa4348de4901a7470cde146c1d26a0 Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Tue, 2 Jun 2020 10:53:49 +0200 Subject: sandbox: define CONFIG_64BIT as appropriate All 64-bit architectures are supposed to define CONFIG_64BIT to support the relevant 64-bit MMIO accessors. The sandbox architecture is a bit of a special case, because barebox uses the toolchain default and doesn't force a bitness. Add 64BIT as promptless symbol, which reflects the pointer size of the target platform. Signed-off-by: Ahmad Fatoum Signed-off-by: Sascha Hauer --- arch/sandbox/Kconfig | 9 +++++++++ scripts/gcc-64bitptr.sh | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100755 scripts/gcc-64bitptr.sh (limited to 'scripts') diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig index 6ec71a99e5..46cfe8b4b1 100644 --- a/arch/sandbox/Kconfig +++ b/arch/sandbox/Kconfig @@ -1,3 +1,5 @@ +source "scripts/Kconfig.include" + config SANDBOX bool select OFTREE @@ -20,3 +22,10 @@ config SANDBOX_UNWIND default y select ARCH_HAS_STACK_DUMP depends on UBSAN || KASAN + +config CC_IS_64BIT + def_bool $(success,$(srctree)/scripts/gcc-64bitptr.sh $(CC)) + +config 64BIT + bool + default CC_IS_64BIT diff --git a/scripts/gcc-64bitptr.sh b/scripts/gcc-64bitptr.sh new file mode 100755 index 0000000000..7fb05703b8 --- /dev/null +++ b/scripts/gcc-64bitptr.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0-only + +cat << "END" | $@ -x c - -c -o /dev/null +int main(void) +{ + return sizeof(struct { int:-!(sizeof(void *) == 8); }); +} +END -- cgit v1.2.3