Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH][RESEND] fix compilation error with CROSS_COMPILE

231 views
Skip to first unread message

Wu Fengguang

unread,
Aug 21, 2010, 2:30:02 AM8/21/10
to
$ 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 <tiago....@gmail.com>
Cc: Michal Marek <mma...@suse.cz>
Signed-off-by: Wu Fengguang <fenggu...@intel.com>
---

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.".

diff --git a/Makefile b/Makefile
index d646d69..af8864e 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Sam Ravnborg

unread,
Aug 21, 2010, 3:30:01 AM8/21/10
to
On Sat, Aug 21, 2010 at 02:21:33PM +0800, Wu Fengguang wrote:
> $ 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 <tiago....@gmail.com>
> Cc: Michal Marek <mma...@suse.cz>
> Signed-off-by: Wu Fengguang <fenggu...@intel.com>
> ---
>
> 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.".
>
> diff --git a/Makefile b/Makefile
> index d646d69..af8864e 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -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

Wu Fengguang

unread,
Aug 21, 2010, 3:40:01 AM8/21/10
to

Ah yes I'm using that form indeed. Sorry for the confusion.

> 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

Sam Ravnborg

unread,
Aug 21, 2010, 3:50:01 AM8/21/10
to

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

Wu Fengguang

unread,
Aug 21, 2010, 5:30:03 AM8/21/10
to

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

> > > 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.
>
> 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.

> 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 <tiago....@gmail.com>
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.

Cc: Michal Marek <mma...@suse.cz>
Signed-off-by: Andrew Morton <ak...@linux-foundation.org>

diff --git a/Makefile b/Makefile
index 7431c28..13126ae 100644


--- a/Makefile
+++ b/Makefile
@@ -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

Sam Ravnborg

unread,
Aug 21, 2010, 9:00:02 AM8/21/10
to

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

Michal Marek

unread,
Aug 23, 2010, 7:40:01 AM8/23/10
to
On 21.8.2010 14:58, Sam Ravnborg wrote:
>> commit 7f48a0a8c15c41f382f2265088bc96007836e608
>> Author: Tiago Maluta<tiago....@gmail.com>
>> Date: Mon Jun 21 22:00:17 2010 +0200
>>
>> Linux has an recent option to define CROSS_COMPILE in menuconfig.
[...]

>> diff --git a/Makefile b/Makefile
>> index 7431c28..13126ae 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -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.

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

0 new messages