mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
xen: Have Kconfig check $(CC)'s version
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>
This commit is contained in:
1 parent
f80fe2b34f
commit
534519f051
5 files changed
+101
No files matched your search
+16
@@ -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
|
||||
|
||||
@@ -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)/..
|
||||
|
||||
|
||||
@@ -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))
|
||||
Executable
+19
@@ -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
|
||||
Executable
+25
@@ -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
|
||||