mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH v2 01/25] scripts: import Linux Kconfig.include
Date: Tue,  2 Jun 2020 10:53:48 +0200	[thread overview]
Message-ID: <20200602085412.16554-2-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20200602085412.16554-1-a.fatoum@pengutronix.de>

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 <a.fatoum@pengutronix.de>
---
 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

diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
new file mode 100644
index 000000000000..496d11c92c97
--- /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-version.sh b/scripts/gcc-version.sh
new file mode 100755
index 000000000000..ae353432539b
--- /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
-- 
2.27.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2020-06-02  8:54 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-02  8:53 [PATCH v2 00/25] sandbox: support COMPILE_TESTing drivers Ahmad Fatoum
2020-06-02  8:53 ` Ahmad Fatoum [this message]
2020-06-02  8:53 ` [PATCH v2 02/25] sandbox: define CONFIG_64BIT as appropriate Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 03/25] sandbox: asm: bitsperlong.h: detect bitness according to 64BIT symbol Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 04/25] sandbox: support forcing 32-bit x86 Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 05/25] include: asm-generic: provide (in|out)_(le|be)(16|32) helpers for all archs Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 06/25] ARM: asm/io.h: fall back to <asm-generic/bitio.h> out_be32 and friends Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 07/25] sandbox: <asm/io.h>: include bitio accessors Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 08/25] clocksource: arm_global_timer.c: remove unused asm/ header Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 09/25] mtd: nand: orion: depend on ARM Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 10/25] ddr: fsl: " Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 11/25] net: fec_imx: depend on HAS_DMA Ahmad Fatoum
2020-06-02  8:53 ` [PATCH v2 12/25] net: macb: " Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 13/25] sandbox: implement stub physical virtual translation Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 14/25] sandbox: asm: implement stub DMA functions Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 15/25] sandbox: select HAS_DMA Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 16/25] ARM: atomic.h: move generic implementation to asm-generic Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 17/25] include: <asm-generic/atomic.h>: remove stub IRQ save/restore Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 18/25] sandbox: asm: implement <asm/atomic.h> Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 19/25] usb: xhci-hcd: remove unused #include <asm/cache.h> Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 20/25] usb: xhci-hcd: replace opencoded non-atomic 64-bit MMIO with lo_hi helper Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 21/25] include: bitops: fix dead increment in fls() and ffs() Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 22/25] commands: tftp: drop unused variable Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 23/25] commands: test: drop dead assignment Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 24/25] sandbox: os: add_image: fix memory leak Ahmad Fatoum
2020-06-02  8:54 ` [PATCH v2 25/25] mtd: nand: base: fix use of uninitialized struct member Ahmad Fatoum
2020-06-03  8:04 ` [PATCH v2 00/25] sandbox: support COMPILE_TESTing drivers Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200602085412.16554-2-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox