From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
Julien Grall <julien@xen.org>, Wei Liu <wl@xen.org>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
George Dunlap <George.Dunlap@eu.citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Jan Beulich <jbeulich@suse.com>,
Anthony PERARD <anthony.perard@citrix.com>
Subject: [Xen-devel] [XEN PATCH v3 2/6] xen: Have Kconfig check $(CC)'s version
Date: Wed, 15 Jan 2020 17:00:11 +0000 [thread overview]
Message-ID: <20200115170015.249667-3-anthony.perard@citrix.com> (raw)
In-Reply-To: <20200115170015.249667-1-anthony.perard@citrix.com>
This import several files from Linux v5.3
- scripts/Kconfig.include
- scripts/clang-version.sh
- scripts/gcc-version.sh
and several config values from from Linux's init/Kconfig file.
But gcc-version.sh have been modified to return "0" when $CC isn't
GCC, like clang-version.sh do.
Files are copied into scripts/ directory because that's were the files
are found in Linux tree, and also because we are going to import more
of Kbuild from Linux which is located in scripts/.
CONFIG_GCC_VERSION and CONFIG_CC_IS_CLANG are going to be use in
follow-up patches.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
Notes:
v3:
- Have gcc-version behave like clang-version and return 0 when the
compiler tested isn't the expected one.
v2:
- move the export CC* earlier in xen/Makefile, and add CXX to the list.
xen/Kconfig | 16 +++++++++++++++
xen/Makefile | 2 ++
xen/scripts/Kconfig.include | 39 ++++++++++++++++++++++++++++++++++++
xen/scripts/clang-version.sh | 19 ++++++++++++++++++
xen/scripts/gcc-version.sh | 25 +++++++++++++++++++++++
5 files changed, 101 insertions(+)
create mode 100644 xen/scripts/Kconfig.include
create mode 100755 xen/scripts/clang-version.sh
create mode 100755 xen/scripts/gcc-version.sh
diff --git a/xen/Kconfig b/xen/Kconfig
index 01067326b4e7..57427927abf0 100644
--- a/xen/Kconfig
+++ b/xen/Kconfig
@@ -4,9 +4,25 @@
#
mainmenu "Xen/$(SRCARCH) $(XEN_FULLVERSION) Configuration"
+source "scripts/Kconfig.include"
+
config BROKEN
bool
+config CC_IS_GCC
+ def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)
+
+config GCC_VERSION
+ int
+ default $(shell,$(BASEDIR)/scripts/gcc-version.sh $(CC))
+
+config CC_IS_CLANG
+ def_bool $(success,$(CC) --version | head -n 1 | grep -q clang)
+
+config CLANG_VERSION
+ int
+ default $(shell,$(BASEDIR)/scripts/clang-version.sh $(CC))
+
source "arch/$(SRCARCH)/Kconfig"
config DEFCONFIG_LIST
diff --git a/xen/Makefile b/xen/Makefile
index efbe9605e52b..c326fee5880e 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -18,6 +18,8 @@ export XEN_CONFIG_EXPERT ?= n
PYTHON_INTERPRETER := $(word 1,$(shell which python3 python python2 2>/dev/null) python)
export PYTHON ?= $(PYTHON_INTERPRETER)
+export CC CXX LD
+
export BASEDIR := $(CURDIR)
export XEN_ROOT := $(BASEDIR)/..
diff --git a/xen/scripts/Kconfig.include b/xen/scripts/Kconfig.include
new file mode 100644
index 000000000000..8221095ca34b
--- /dev/null
+++ b/xen/scripts/Kconfig.include
@@ -0,0 +1,39 @@
+# 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) -E -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))
+
+# 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)
+
+# gcc version including patch level
+gcc-version := $(shell,$(BASEDIR)/scripts/gcc-version.sh $(CC))
diff --git a/xen/scripts/clang-version.sh b/xen/scripts/clang-version.sh
new file mode 100755
index 000000000000..6fabf0695761
--- /dev/null
+++ b/xen/scripts/clang-version.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+#
+# clang-version clang-command
+#
+# Print the compiler version of `clang-command' in a 5 or 6-digit form
+# such as `50001' for clang-5.0.1 etc.
+
+compiler="$*"
+
+if ! ( $compiler --version | grep -q clang) ; then
+ echo 0
+ exit 1
+fi
+
+MAJOR=$(echo __clang_major__ | $compiler -E -x c - | tail -n 1)
+MINOR=$(echo __clang_minor__ | $compiler -E -x c - | tail -n 1)
+PATCHLEVEL=$(echo __clang_patchlevel__ | $compiler -E -x c - | tail -n 1)
+printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
diff --git a/xen/scripts/gcc-version.sh b/xen/scripts/gcc-version.sh
new file mode 100755
index 000000000000..b3261949dea5
--- /dev/null
+++ b/xen/scripts/gcc-version.sh
@@ -0,0 +1,25 @@
+#!/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
+
+if ! ( $compiler --version | head -n 1 | grep -q gcc ); then
+ echo 0
+ 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
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2020-01-15 17:00 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-15 17:00 [Xen-devel] [XEN PATCH v3 0/6] xen: Kconfig update with few extra Anthony PERARD
2020-01-15 17:00 ` [Xen-devel] [XEN PATCH v3 1/6] xen: Update Kconfig to Linux v5.4 Anthony PERARD
2020-01-15 17:00 ` Anthony PERARD [this message]
2020-01-16 11:30 ` [Xen-devel] [XEN PATCH v3 2/6] xen: Have Kconfig check $(CC)'s version Jan Beulich
2020-01-16 12:29 ` Anthony PERARD
2020-01-16 12:40 ` Jan Beulich
2020-01-17 16:23 ` Anthony PERARD
2020-01-20 9:26 ` Jan Beulich
2020-01-15 17:00 ` [Xen-devel] [XEN PATCH v3 3/6] xen: Import cc-ifversion from Kbuild Anthony PERARD
2020-01-15 17:00 ` [Xen-devel] [XEN PATCH v3 4/6] xen: Move CONFIG_INDIRECT_THUNK to Kconfig Anthony PERARD
2020-01-15 17:00 ` [Xen-devel] [XEN PATCH v3 5/6] xen: Use $(CONFIG_CC_IS_CLANG) instead of $(clang) in Makefile Anthony PERARD
2020-01-15 17:00 ` [Xen-devel] [XEN PATCH v3 6/6] xen: Move GCC_HAS_VISIBILITY_ATTRIBUTE to Kconfig and common Anthony PERARD
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=20200115170015.249667-3-anthony.perard@citrix.com \
--to=anthony.perard@citrix.com \
--cc=George.Dunlap@eu.citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=konrad.wilk@oracle.com \
--cc=sstabellini@kernel.org \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.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;
as well as URLs for NNTP newsgroup(s).