diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2020-06-11 07:35:39 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-06-11 07:35:39 +0200 |
commit | 1fb15fcfe9ecb079b88df7eb01f1e29144cd8f96 (patch) | |
tree | 651ae01bac7ed264934baccd0fccbfeec6905da6 /scripts | |
parent | d6757bacf8180b17692682c58dd6a9938d0c3c1d (diff) | |
parent | aa2cd910c7465eaf6de04da1b4d110205ad63c77 (diff) | |
download | barebox-1fb15fcfe9ecb079b88df7eb01f1e29144cd8f96.tar.gz barebox-1fb15fcfe9ecb079b88df7eb01f1e29144cd8f96.tar.xz |
Merge branch 'for-next/sandbox-compile-test'
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Kconfig.include | 53 | ||||
-rwxr-xr-x | scripts/gcc-64bitptr.sh | 9 | ||||
-rwxr-xr-x | scripts/gcc-version.sh | 20 |
3 files changed, 82 insertions, 0 deletions
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,<command>,<then>,<else>) +# Return <then> if <command> exits with 0, <else> otherwise. +if-success = $(shell,{ $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)") + +# $(success,<command>) +# Return y if <command> exits with 0, n otherwise +success = $(if-success,$(1),y,n) + +# $(failure,<command>) +# Return n if <command> exits with 0, y otherwise +failure = $(if-success,$(1),n,y) + +# $(cc-option,<flag>) +# Return y if the compiler supports <flag>, n otherwise +cc-option = $(success,$(CC) -Werror $(CLANG_FLAGS) $(1) -S -x c /dev/null -o /dev/null) + +# $(ld-option,<flag>) +# Return y if the linker supports <flag>, n otherwise +ld-option = $(success,$(LD) -v $(1)) + +# $(as-instr,<instr>) +# Return y if the assembler supports <instr>, 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-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 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 <gcc-command>\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 |