fix compilation error with CROSS_COMPILE
PATCH RESEND 1/1 fix compilation error with CROSS_COMPILE
$ make CROSS_COMPILE=x86_64-linux-gnu-
...
cc1: error: unrecognized command line option "-m64"
cc1: error: unrecognized command line option "-mno-red-zone"
cc1: error: unrecognized command line option "-mcmodel=kernel"
cc1: error: unrecognized command line option "-maccumulate-outgoing-args"---
Andrew: the compile error only occurs in the -mm tree
The bug is introduced by patch "Linux has an recent option to define CROSS_COMPILE in menuconfig.".
Makefile +1 -1
@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2) +CROSS_COMPILE ?= $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2) # Architecture as present in compile.h UTS_MACHINE := $(ARCH)
Quoted 21 lines · Wu Fengguang
$ make CROSS_COMPILE=x86_64-linux-gnu- ... cc1: error: unrecognized command line option "-m64" cc1: error: unrecognized command line option "-mno-red-zone" cc1: error: unrecognized command line option "-mcmodel=kernel" cc1: error: unrecognized command line option "-maccumulate-outgoing-args"Cc Tiago Maluta <[email protected]>Cc Michal Marek <[email protected]>Signed-off-by Wu Fengguang <[email protected]>---
Andrew: the compile error only occurs in the -mm tree
The bug is introduced by patch "Linux has an recent option to defineCROSS_COMPILEin menuconfig.".Makefile +0
-0
Makefile SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ · line 193
Quoted 5 lines
Makefile +1
-1@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2) +CROSS_COMPILE ?= $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2)
I cannot see how this would solve your problem.
Any variable assigned using := or ?= can be overrided by variable assigned on the command line like this:
make VAR=values
Please note that there is a big difference between the above and this:
VAR=value make
In the latter case you pass in VAR using the enviroment and it is just like any other environment variable as seen from make.
On top of that the upstream kernel does not have the first assignmnet to CROSS_COMPILE - so you need to update your sources (or Andrews --mm is not recent enough.
Please try again with upstream kernel and let us know what you conclude.
Sam
Quoted 32 lines · Sam Ravnborg
Quoted 21 lines · Wu Fengguang
$ make CROSS_COMPILE=x86_64-linux-gnu- ... cc1: error: unrecognized command line option "-m64" cc1: error: unrecognized command line option "-mno-red-zone" cc1: error: unrecognized command line option "-mcmodel=kernel" cc1: error: unrecognized command line option "-maccumulate-outgoing-args"Cc Tiago Maluta <[email protected]>Cc Michal Marek <[email protected]>Signed-off-by Wu Fengguang <[email protected]>---
Andrew: the compile error only occurs in the -mm tree
The bug is introduced by patch "Linux has an recent option to defineCROSS_COMPILEin menuconfig.".Makefile +0
-0Makefile SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ · line 193
Quoted 5 lines
Makefile +1
-1@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2) +CROSS_COMPILE ?= $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2)I cannot see how this would solve your problem.
Any variable assigned using := or ?= can be overrided by variable assigned on the command line like this:
Quoted 5 lines
make VAR=values
Please note that there is a big difference between the above and this:
VAR=value make
Ah yes I'm using that form indeed. Sorry for the confusion.
Quoted 9 lines
In the latter case you pass in VAR using the enviroment and it is just like any other environment variable as seen from make.
On top of that the upstream kernel does not have the first assignmnet to
CROSS_COMPILE- so you need to update your sources (or Andrews --mm is not recent enough.Please try again with upstream kernel and let us know what you conclude.
Upstream kernel uses the ?= form and runs always OK.
The recent -mm kernels I tried all have the problem.
Thanks,
Fengguang
Quoted 48 lines · Wu Fengguang
Quoted 32 lines · Sam Ravnborg
Quoted 21 lines · Wu Fengguang
$ make CROSS_COMPILE=x86_64-linux-gnu- ... cc1: error: unrecognized command line option "-m64" cc1: error: unrecognized command line option "-mno-red-zone" cc1: error: unrecognized command line option "-mcmodel=kernel" cc1: error: unrecognized command line option "-maccumulate-outgoing-args"Cc Tiago Maluta <[email protected]>Cc Michal Marek <[email protected]>Signed-off-by Wu Fengguang <[email protected]>---
Andrew: the compile error only occurs in the -mm tree
The bug is introduced by patch "Linux has an recent option to defineCROSS_COMPILEin menuconfig.".Makefile +0
-0Makefile SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ · line 193
Quoted 5 lines
Makefile +1
-1@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2) +CROSS_COMPILE ?= $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2)I cannot see how this would solve your problem.
Any variable assigned using := or ?= can be overrided by variable assigned on the command line like this:Quoted 5 lines
make VAR=values
Please note that there is a big difference between the above and this:
VAR=value make
Ah yes I'm using that form indeed. Sorry for the confusion.
Quoted 7 lines
In the latter case you pass in VAR using the enviroment and it is just like any other environment variable as seen from make.
On top of that the upstream kernel does not have the first assignmnet to
CROSS_COMPILE- so you need to update your sources (or Andrews --mm is not recent enough.
Quoted 6 lines
Quoted 2 lines
Please try again with upstream kernel and let us know what you conclude.
Upstream kernel uses the ?= form and runs always OK.
The recent -mm kernels I tried all have the problem.
Good.
Then we can assume that next -mm has this fixed when he picks up this change from upstream. Or maybe -mm has a patch in needs for revert.
Took a quick looks at -mm and only fould this:
kbuild-fix-config_cross_compile-issue-in-config.patch And this is already upstream.
So I suggest you to fix it locally and check that
next -mm is correct.
Sam
Quoted 34 lines · Sam Ravnborg
Quoted 33 lines · Wu Fengguang
Quoted 32 lines · Sam Ravnborg
Quoted 21 lines · Wu Fengguang
$ make CROSS_COMPILE=x86_64-linux-gnu- ... cc1: error: unrecognized command line option "-m64" cc1: error: unrecognized command line option "-mno-red-zone" cc1: error: unrecognized command line option "-mcmodel=kernel" cc1: error: unrecognized command line option "-maccumulate-outgoing-args"Cc Tiago Maluta <[email protected]>Cc Michal Marek <[email protected]>Signed-off-by Wu Fengguang <[email protected]>---
Andrew: the compile error only occurs in the -mm tree
The bug is introduced by patch "Linux has an recent option to defineCROSS_COMPILEin menuconfig.".Makefile +0
-0Makefile SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ · line 193
Quoted 5 lines
Makefile +1
-1@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2) +CROSS_COMPILE ?= $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2)I cannot see how this would solve your problem.
Any variable assigned using := or ?= can be overrided by variable assigned on the command line like this:
Quoted 7 lines
Quoted 7 lines
Quoted 5 lines
make VAR=values
Please note that there is a big difference between the above and this:
VAR=value make
Ah yes I'm using that form indeed. Sorry for the confusion.
Here is the exact command line (w/o this patch):
wfg@bee ~/cc/mmotm% ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- /usr/bin/make /home/wfg/cc/mmotm/arch/x86/Makefile:81: stack protector enabled but no compiler support
CHK include/linux/version.h CHK include/generated/utsrelease.h CC kernel/bounds.s
cc1: error: unrecognized command line option "-m64"
cc1: error: unrecognized command line option "-mno-red-zone"
cc1: error: unrecognized command line option "-mcmodel=kernel"
cc1: error: unrecognized command line option "-maccumulate-outgoing-args" make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
Quoted 12 lines
Quoted 12 lines
Quoted 9 lines
In the latter case you pass in VAR using the enviroment and it is just like any other environment variable as seen from make.
On top of that the upstream kernel does not have the first assignmnet to
CROSS_COMPILE- so you need to update your sources (or Andrews --mm is not recent enough.Please try again with upstream kernel and let us know what you conclude.
Upstream kernel uses the ?= form and runs always OK.
Quoted 8 lines
Quoted 1 line
The recent -mm kernels I tried all have the problem.
Good.
Then we can assume that next -mm has this fixed when he picks up this change from upstream. Or maybe -mm has a patch in needs for revert.Took a quick looks at -mm and only fould this:
kbuild-fix-config_cross_compile-issue-in-config.patch
Yes it is.
Quoted 1 line
And this is already upstream.
However I confirmed that the linux-2.6 tree is OK, the above patch that caused the problem is still sitting in -mm tree:
commit 7f48a0a8c15c41f382f2265088bc96007836e608
Author: Tiago Maluta <[email protected]> Date: Mon Jun 21 22:00:17 2010 +0200
Linux has an recent option to define CROSS_COMPILE in menuconfig.
Typically, one of the options when building for another target is ('arm' is just an example):
# make ARCH=arm CROSS_COMPILE=arm-cc O=../build
If I omit CROSS_COMPILE and use the new way in .config:
CONFIG_CROSS_COMPILE="arm-cc"
I got:
cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mabi=aapcs-linux"
cc1: error: unrecognized command line option "-mno-thumb-interwork" /usr/src/linux/kernel/bounds.c:1: error: bad value (armv5t) for -march= switch /usr/src/linux/kernel/bounds.c:1: error: bad value (armv5t) for -mtune= switch make[2]: *** [kernel/bounds.s] Error 1
make[1]: *** [prepare0] Error 2
make: *** [sub-make] Error 2
Verbose output clearly says that I'm using the host compiler instead cross compiler. This patch fixed my problem.
Makefile +1 -1
@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) +CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2) # Architecture as present in compile.h UTS_MACHINE := $(ARCH)
Thanks,
Fengguang
Quoted 40 lines
However I confirmed that the linux-2.6 tree is OK, the above patch that caused the problem is still sitting in -mm tree:
commit
7f48a0a8c15c41f382f2265088bc96007836e608Author: Tiago Maluta <[email protected]> Date: Mon Jun 21 22:00:17 2010 +0200Linux has an recent option to define
CROSS_COMPILEin menuconfig.Typically, one of the options when building for another target is ('arm' is just an example):
# make ARCH=arm CROSS_COMPILE=arm-cc O=../build
If I omit
CROSS_COMPILEand use the new way in .config:
CONFIG_CROSS_COMPILE="arm-cc"I got:
cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mabi=aapcs-linux"
cc1: error: unrecognized command line option "-mno-thumb-interwork"/usr/src/linux/kernel/bounds.c:1: error: bad value (armv5t) for -march= switch/usr/src/linux/kernel/bounds.c:1: error: bad value (armv5t) for -mtune= switch make[2]: *** [kernel/bounds.s] Error 1
make[1]: *** [prepare0] Error 2
make: *** [sub-make] Error 2Verbose output clearly says that I'm using the host compiler instead cross compiler. This patch fixed my problem.
Cc Michal Marek <[email protected]>Signed-off-by Andrew Morton <[email protected]>Makefile +0
-0
Makefile SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ · line 193
Quoted 5 lines
Makefile +1
-1@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) +CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2)
So this patch does two things:
1) It grep for CONFIG_CROSS_COMPILE because we may not have incldued .config
2) It no longer pick up CROSS_COMPILE from the environment.
Traditionally we have picked up ARCH and CROSS_COMPILE from the environmnet, hence the use of "?=".
"?=" says - perfrom this assignmnet unless lhs is already defined. And lhs may be already defined is we have the ysmbol defined in the environmnet.
I think the original submitter chenged from ?= to := without realising this.
So the patch should be adjusted to use ?= again as you suggest before it is applied.
I assume Michal / Andrew will take care.
Subject on patch could also be better.
Suggestion: kbuild: fix reading CROSS_COMPILE from .config
Sam
Quoted 5 lines · Sam Ravnborg
Quoted 5 lines
commit
7f48a0a8c15c41f382f2265088bc96007836e608Author: Tiago Maluta<[email protected]> Date: Mon Jun 21 22:00:17 2010 +0200Linux has an recent option to define
CROSS_COMPILEin menuconfig.
[...]
Quoted 21 lines
Makefile SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ · line 193
Quoted 10 lines
Makefile +1
-1@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= -CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) +CROSS_COMPILE := $(shell grep CONFIG_CROSS_COMPILE .config | cut -d'"' -f2)So this patch does two things:
1) It grep forCONFIG_CROSS_COMPILEbecause we may not have incldued .config
2) It no longer pick upCROSS_COMPILEfrom the environment.Traditionally we have picked up ARCH and
CROSS_COMPILEfrom the environmnet, hence the use of "?=".
"?=" says - perfrom this assignmnet unless lhs is already defined. And lhs may be already defined is we have the ysmbol defined in the environmnet.
Quoted 5 lines
I think the original submitter chenged from ?= to := without realising this.
So the patch should be adjusted to use ?= again as you suggest before it is applied.
I assume Michal / Andrew will take care.
I would rather check if the patch is still needed at all. Tiago, can you try vanilla 2.6.36-rc1, which has the first "CROSS_COMPILE ?="
line removed (commit 235caa2) and check if your original problem still presists?
Thanks,
Michal