public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH][RESEND] fix compilation error with CROSS_COMPILE
@ 2010-08-21  6:21 Wu Fengguang
  2010-08-21  7:24 ` Sam Ravnborg
  0 siblings, 1 reply; 7+ messages in thread
From: Wu Fengguang @ 2010-08-21  6:21 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Tiago Maluta, Michal Marek, LKML

        $ 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.maluta@gmail.com>
Cc: Michal Marek <mmarek@suse.cz>
Signed-off-by: Wu Fengguang <fengguang.wu@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)

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH][RESEND] fix compilation error with CROSS_COMPILE
  2010-08-21  6:21 [PATCH][RESEND] fix compilation error with CROSS_COMPILE Wu Fengguang
@ 2010-08-21  7:24 ` Sam Ravnborg
  2010-08-21  7:29   ` Wu Fengguang
  0 siblings, 1 reply; 7+ messages in thread
From: Sam Ravnborg @ 2010-08-21  7:24 UTC (permalink / raw)
  To: Wu Fengguang; +Cc: Andrew Morton, Tiago Maluta, Michal Marek, LKML

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.maluta@gmail.com>
> Cc: Michal Marek <mmarek@suse.cz>
> Signed-off-by: Wu Fengguang <fengguang.wu@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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH][RESEND] fix compilation error with CROSS_COMPILE
  2010-08-21  7:24 ` Sam Ravnborg
@ 2010-08-21  7:29   ` Wu Fengguang
  2010-08-21  7:40     ` Sam Ravnborg
  0 siblings, 1 reply; 7+ messages in thread
From: Wu Fengguang @ 2010-08-21  7:29 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: Andrew Morton, Tiago Maluta, Michal Marek, LKML

On Sat, Aug 21, 2010 at 03:24:54PM +0800, Sam Ravnborg wrote:
> 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.maluta@gmail.com>
> > Cc: Michal Marek <mmarek@suse.cz>
> > Signed-off-by: Wu Fengguang <fengguang.wu@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

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH][RESEND] fix compilation error with CROSS_COMPILE
  2010-08-21  7:29   ` Wu Fengguang
@ 2010-08-21  7:40     ` Sam Ravnborg
  2010-08-21  9:26       ` Wu Fengguang
  0 siblings, 1 reply; 7+ messages in thread
From: Sam Ravnborg @ 2010-08-21  7:40 UTC (permalink / raw)
  To: Wu Fengguang; +Cc: Andrew Morton, Tiago Maluta, Michal Marek, LKML

On Sat, Aug 21, 2010 at 03:29:56PM +0800, Wu Fengguang wrote:
> On Sat, Aug 21, 2010 at 03:24:54PM +0800, Sam Ravnborg wrote:
> > 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.maluta@gmail.com>
> > > Cc: Michal Marek <mmarek@suse.cz>
> > > Signed-off-by: Wu Fengguang <fengguang.wu@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
> 
> 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.

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH][RESEND] fix compilation error with CROSS_COMPILE
  2010-08-21  7:40     ` Sam Ravnborg
@ 2010-08-21  9:26       ` Wu Fengguang
  2010-08-21 12:58         ` Sam Ravnborg
  0 siblings, 1 reply; 7+ messages in thread
From: Wu Fengguang @ 2010-08-21  9:26 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: Andrew Morton, Tiago Maluta, Michal Marek, LKML

On Sat, Aug 21, 2010 at 03:40:21PM +0800, Sam Ravnborg wrote:
> On Sat, Aug 21, 2010 at 03:29:56PM +0800, Wu Fengguang wrote:
> > On Sat, Aug 21, 2010 at 03:24:54PM +0800, Sam Ravnborg wrote:
> > > 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.maluta@gmail.com>
> > > > Cc: Michal Marek <mmarek@suse.cz>
> > > > Signed-off-by: Wu Fengguang <fengguang.wu@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
> > 
> > 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

> > > 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.maluta@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 <mmarek@suse.cz>
    Signed-off-by: Andrew Morton <akpm@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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH][RESEND] fix compilation error with CROSS_COMPILE
  2010-08-21  9:26       ` Wu Fengguang
@ 2010-08-21 12:58         ` Sam Ravnborg
  2010-08-23 11:36           ` Michal Marek
  0 siblings, 1 reply; 7+ messages in thread
From: Sam Ravnborg @ 2010-08-21 12:58 UTC (permalink / raw)
  To: Wu Fengguang; +Cc: Andrew Morton, Tiago Maluta, Michal Marek, LKML

> 
> 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.maluta@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 <mmarek@suse.cz>
>     Signed-off-by: Andrew Morton <akpm@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)

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH][RESEND] fix compilation error with CROSS_COMPILE
  2010-08-21 12:58         ` Sam Ravnborg
@ 2010-08-23 11:36           ` Michal Marek
  0 siblings, 0 replies; 7+ messages in thread
From: Michal Marek @ 2010-08-23 11:36 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: Wu Fengguang, Andrew Morton, Tiago Maluta, LKML

On 21.8.2010 14:58, Sam Ravnborg wrote:
>> commit 7f48a0a8c15c41f382f2265088bc96007836e608
>> Author: Tiago Maluta<tiago.maluta@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

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-08-23 11:36 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-21  6:21 [PATCH][RESEND] fix compilation error with CROSS_COMPILE Wu Fengguang
2010-08-21  7:24 ` Sam Ravnborg
2010-08-21  7:29   ` Wu Fengguang
2010-08-21  7:40     ` Sam Ravnborg
2010-08-21  9:26       ` Wu Fengguang
2010-08-21 12:58         ` Sam Ravnborg
2010-08-23 11:36           ` Michal Marek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox