mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alexey Brodkin <Alexey.Brodkin@synopsys.com>
To: "yamada.masahiro@socionext.com" <yamada.masahiro@socionext.com>
Cc: "keescook@chromium.org" <keescook@chromium.org>,
	"linux-kbuild@vger.kernel.org" <linux-kbuild@vger.kernel.org>,
	"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-snps-arc@lists.infradead.org" 
	<linux-snps-arc@lists.infradead.org>
Subject: defconfig fails if CROSS_COMPILE is set while cross-gcc is not avaialble
Date: Wed, 12 Sep 2018 12:08:40 +0000	[thread overview]
Message-ID: <0854f35e92c95e552721dc6a46f4ee2bc4020bc1.camel@synopsys.com> (raw)

Hello Masahiro-san,

Starting from kernel v4.17 it is no longer possible to install kernel headers
for ARC architecture if there's no cross-toolchain in PATH.

Note installation of headers is just one of use-cases when we might not
have cross-tools available but still want to run "make xxx_defconfig".
I.e. the problem is "make xxx_defconfig" with no cross-toolchain.

That's what I see:
----------------------------->8--------------------------
./scripts/gcc-version.sh: line 26: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 27: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 26: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 27: arc-linux-gcc: command not found
make: arc-linux-gcc: Command not found
/bin/sh: arc-linux-gcc: command not found
/bin/sh: arc-linux-gcc: command not found
*** Default configuration is based on 'nsim_700_defconfig'
./scripts/gcc-version.sh: line 26: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 27: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 29: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 26: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 27: arc-linux-gcc: command not found
./scripts/gcc-version.sh: line 29: arc-linux-gcc: command not found
init/Kconfig:17: syntax error
init/Kconfig:16: invalid option
./scripts/clang-version.sh: line 15: arc-linux-gcc: command not found
./scripts/gcc-plugin.sh: line 11: arc-linux-gcc: command not found
make[1]: *** [scripts/kconfig/Makefile:91: defconfig] Error 1
make: *** [Makefile:531: defconfig] Error 2
----------------------------->8--------------------------

That doesn't happen for ARM and other arches simply because for ARC
we define CROSS_COMPILE if it is not set by user, see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arc/Makefile#n9

Still if CROSS_COMPILE is set before execution of "make defconfig"
then the same problem happens for others.

I was able to find a series of commits which cause this problem,
here they are:
----------------------------->8--------------------------
59f53855babf - gcc-plugins: test plugin support in Kconfig and clean up Makefile
469cb7376c06 - kconfig: add CC_IS_CLANG and CLANG_VERSION
a4353898980c - kconfig: add CC_IS_GCC and GCC_VERSION
----------------------------->8--------------------------

What happen is "$(CC)" is passed as an argument and in its turn CC is
"$(CROSS_COMPILE)gcc", see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Makefile#n385


So if I substitute "CC" with "HOSTCC" in a couple of places (see below)
the problem goes away. But I'm not really sure if what I do is correct.
I.e. when we're interested in CC for target and when only host CC is of
our interest.

Would be interesting to know your opinion here.

-Alexey

-------------------------------------->8---------------------------------------------
diff --git a/arch/Kconfig b/arch/Kconfig
index d1f2ed462ac8..53c8c7994e6b 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -412,7 +412,7 @@ preferred-plugin-hostcc := $(if-success,[ $(gcc-version) -ge 40800 ],$(HOSTCXX),
 
 config PLUGIN_HOSTCC
        string
-       default "$(shell,$(srctree)/scripts/gcc-plugin.sh "$(preferred-plugin-hostcc)" "$(HOSTCXX)" "$(CC)")"
+       default "$(shell,$(srctree)/scripts/gcc-plugin.sh "$(preferred-plugin-hostcc)" "$(HOSTCXX)" "$(HOSTCC)")"
        help
          Host compiler used to build GCC plugins.  This can be $(HOSTCXX),
          $(HOSTCC), or a null string if GCC plugin is unsupported.
diff --git a/init/Kconfig b/init/Kconfig
index 2a48832fd40e..a0094ddb8244 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -13,7 +13,7 @@ config CC_IS_GCC
 
 config GCC_VERSION
        int
-       default $(shell,$(srctree)/scripts/gcc-version.sh -p $(CC) | sed 's/^0*//') if CC_IS_GCC
+       default $(shell,$(srctree)/scripts/gcc-version.sh -p $(HOSTCC) | sed 's/^0*//') if CC_IS_GCC
        default 0
 
 config CC_IS_CLANG
@@ -21,7 +21,7 @@ config CC_IS_CLANG
 
 config CLANG_VERSION
        int
-       default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
+       default $(shell,$(srctree)/scripts/clang-version.sh $(HOSTCC))
 
 config CONSTRUCTORS
        bool
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 86321f06461e..684cd645eeb1 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -109,7 +109,7 @@ as-instr = $(call try-run,\
        printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
 
 # __cc-option
-# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
+# Usage: MY_CFLAGS += $(call __cc-option,$(HOSTCC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
 __cc-option = $(call try-run,\
        $(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4))
 
@@ -143,11 +143,11 @@ cc-disable-warning = $(call try-run,\
 cc-name = $(shell $(CC) -v 2>&1 | grep -q "clang version" && echo clang || echo gcc)
 
 # cc-version
-cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
+cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(HOSTCC))
 
 # cc-fullversion
 cc-fullversion = $(shell $(CONFIG_SHELL) \
-       $(srctree)/scripts/gcc-version.sh -p $(CC))
+       $(srctree)/scripts/gcc-version.sh -p $(HOSTCC))
 
 # cc-ifversion
 # Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
index dad5583451af..3b28bf94cb24 100644
--- a/scripts/Kconfig.include
+++ b/scripts/Kconfig.include
@@ -27,4 +27,4 @@ cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null)
 ld-option = $(success,$(LD) -v $(1))
 
 # gcc version including patch level
-gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh -p $(CC) | sed 's/^0*//')
+gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh -p $(HOSTCC) | sed 's/^0*//')
-------------------------------------->8---------------------------------------------

             reply	other threads:[~2018-09-12 12:08 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-12 12:08 Alexey Brodkin [this message]
2018-09-12 12:53 ` Masahiro Yamada
2018-09-12 13:43   ` Alexey Brodkin
2018-09-12 14:59     ` Masahiro Yamada

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=0854f35e92c95e552721dc6a46f4ee2bc4020bc1.camel@synopsys.com \
    --to=alexey.brodkin@synopsys.com \
    --cc=keescook@chromium.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-snps-arc@lists.infradead.org \
    --cc=yamada.masahiro@socionext.com \
    /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

all inboxes | Powered by JetHome®