diff mbox

fix include paths when the kernel source and build directory are different

Message ID 20090603125840.GA16209@dupont.ts-a (mailing list archive)
State New, archived
Headers show

Commit Message

James Pike June 3, 2009, 12:58 p.m. UTC
Use correct architecture includes when kernel source and build directory
are different.
Signed-off-by: James Pike <james@chilon.net>

Comments

Jan Kiszka June 8, 2009, 8:31 a.m. UTC | #1
James Pike wrote:
> Use correct architecture includes when kernel source and build directory
> are different.
> Signed-off-by: James Pike <james@chilon.net>
> 
> diff --git a/Makefile b/Makefile
> index 95e4c81..ad08c45 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -27,8 +27,9 @@ all:: prerequisite
>  #	include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat
>  	$(MAKE) -C $(KERNELDIR) M=`pwd` \
>  		LINUXINCLUDE="-I`pwd`/include -Iinclude \
> -		$(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \
> -		-Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \
> +		$(if $(KERNELSOURCEDIR),\
> +			-Iinclude2 -I$(KERNELSOURCEDIR)/include -I$(KERNELSOURCEDIR)/arch/${ARCH_DIR}/include, \
> +			-Iarch/${ARCH_DIR}/include) -I`pwd`/include-compat \
>  		-include include/linux/autoconf.h \
>  		-include `pwd`/$(ARCH_DIR)/external-module-compat.h $(module_defines)" \
>  		"$$@"

Just confirmed: Required when building against home-brewed kernels with
split source/binaries. Avi, please merge.

Acked-by: Jan Kiszka <jan.kiszka@siemens.com>

Jan
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Avi Kivity June 8, 2009, 8:42 a.m. UTC | #2
James Pike wrote:
> Use correct architecture includes when kernel source and build directory
> are different.
> Signed-off-by: James Pike <james@chilon.net>
>   
> --- a/Makefile
> +++ b/Makefile
> @@ -27,8 +27,9 @@ all:: prerequisite
>  #	include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat
>  	$(MAKE) -C $(KERNELDIR) M=`pwd` \
>  		LINUXINCLUDE="-I`pwd`/include -Iinclude \
> -		$(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \
> -		-Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \
> +		$(if $(KERNELSOURCEDIR),\
> +			-Iinclude2 -I$(KERNELSOURCEDIR)/include -I$(KERNELSOURCEDIR)/arch/${ARCH_DIR}/include, \
> +			-Iarch/${ARCH_DIR}/include) -I`pwd`/include-compat \
>  		-include include/linux/autoconf.h \
>  		-include `pwd`/$(ARCH_DIR)/external-module-compat.h $(module_defines)" \
>  		"$$@"
>   

This removes -Iarch/${ARCH_DIR}/include when KERNELSOURCEDIR is not 
defined.  What is the reason for this change?
Jan Kiszka June 8, 2009, 9:04 a.m. UTC | #3
Avi Kivity wrote:
> James Pike wrote:
>> Use correct architecture includes when kernel source and build directory
>> are different.
>> Signed-off-by: James Pike <james@chilon.net>
>>   --- a/Makefile
>> +++ b/Makefile
>> @@ -27,8 +27,9 @@ all:: prerequisite
>>  #    include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat
>>      $(MAKE) -C $(KERNELDIR) M=`pwd` \
>>          LINUXINCLUDE="-I`pwd`/include -Iinclude \
>> -        $(if $(KERNELSOURCEDIR),-Iinclude2
>> -I$(KERNELSOURCEDIR)/include) \
>> -        -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \
>> +        $(if $(KERNELSOURCEDIR),\
>> +            -Iinclude2 -I$(KERNELSOURCEDIR)/include
>> -I$(KERNELSOURCEDIR)/arch/${ARCH_DIR}/include, \
>> +            -Iarch/${ARCH_DIR}/include) -I`pwd`/include-compat \
>>          -include include/linux/autoconf.h \
>>          -include `pwd`/$(ARCH_DIR)/external-module-compat.h
>> $(module_defines)" \
>>          "$$@"
>>   
> 
> This removes -Iarch/${ARCH_DIR}/include when KERNELSOURCEDIR is not
> defined.  What is the reason for this change?
> 

As far as I can see (I do wear my glasses today...),
-Iarch/${ARCH_DIR}/include is present in the else part of $(if).

The reason for this change is the missing arch include from the source
directory in case it's separate from the build dir (yeah, the changelog
has room for improvements).

I ran into the same issue after building and installing a recent kernel
tree with O=. The split trees SUSE leaves behind do not suffer from
this, but they also still work after the change. Same for classic
unified trees.

Jan
Avi Kivity June 8, 2009, 9:33 a.m. UTC | #4
Jan Kiszka wrote:
> Avi Kivity wrote:
>   
>> James Pike wrote:
>>     
>>> Use correct architecture includes when kernel source and build directory
>>> are different.
>>> Signed-off-by: James Pike <james@chilon.net>
>>>   --- a/Makefile
>>> +++ b/Makefile
>>> @@ -27,8 +27,9 @@ all:: prerequisite
>>>  #    include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat
>>>      $(MAKE) -C $(KERNELDIR) M=`pwd` \
>>>          LINUXINCLUDE="-I`pwd`/include -Iinclude \
>>> -        $(if $(KERNELSOURCEDIR),-Iinclude2
>>> -I$(KERNELSOURCEDIR)/include) \
>>> -        -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \
>>> +        $(if $(KERNELSOURCEDIR),\
>>> +            -Iinclude2 -I$(KERNELSOURCEDIR)/include
>>> -I$(KERNELSOURCEDIR)/arch/${ARCH_DIR}/include, \
>>> +            -Iarch/${ARCH_DIR}/include) -I`pwd`/include-compat \
>>>          -include include/linux/autoconf.h \
>>>          -include `pwd`/$(ARCH_DIR)/external-module-compat.h
>>> $(module_defines)" \
>>>          "$$@"
>>>   
>>>       
>> This removes -Iarch/${ARCH_DIR}/include when KERNELSOURCEDIR is not
>> defined.  What is the reason for this change?
>>
>>     
>
> As far as I can see (I do wear my glasses today...),
> -Iarch/${ARCH_DIR}/include is present in the else part of $(if).
>   

Yeah, I missed the comma.  Maybe I need to visit your optometrist.

> The reason for this change is the missing arch include from the source
> directory in case it's separate from the build dir (yeah, the changelog
> has room for improvements).
>
> I ran into the same issue after building and installing a recent kernel
> tree with O=. The split trees SUSE leaves behind do not suffer from
> this, but they also still work after the change. Same for classic
> unified trees.
>   

Okay, will apply the patch.
James Pike Aug. 15, 2009, 10:33 p.m. UTC | #5
> This removes -Iarch/${ARCH_DIR}/include when KERNELSOURCEDIR is not 
> defined.  What is the reason for this change?

No you've interpreted the change wrong. The "else" part of the if clause
ensures this is not removed.

Here is how the make if call works:

$(if <string>,<string for true clase>,<string for else clause>)

What my patch does do is *add* this define in for the case when
KERNELSOURCEDIR is defined, but at the correct source location.

I'd like to ask again if anybody is testing this builds properly against
an out of place kernel build, as I've needed these patches across
several different machines running different distributions at work, so
I'm very sceptical that it can work for many people, doesn't mean I'm
right though..

Thanks, James

On Mon, Jun 08, 2009 at 11:42:05AM +0300, Avi Kivity wrote:
> James Pike wrote:
> > Use correct architecture includes when kernel source and build directory
> > are different.
> > Signed-off-by: James Pike <james@chilon.net>
> >   
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -27,8 +27,9 @@ all:: prerequisite
> >  #	include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat
> >  	$(MAKE) -C $(KERNELDIR) M=`pwd` \
> >  		LINUXINCLUDE="-I`pwd`/include -Iinclude \
> > -		$(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \
> > -		-Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \
> > +		$(if $(KERNELSOURCEDIR),\
> > +			-Iinclude2 -I$(KERNELSOURCEDIR)/include -I$(KERNELSOURCEDIR)/arch/${ARCH_DIR}/include, \
> > +			-Iarch/${ARCH_DIR}/include) -I`pwd`/include-compat \
> >  		-include include/linux/autoconf.h \
> >  		-include `pwd`/$(ARCH_DIR)/external-module-compat.h $(module_defines)" \
> >  		"$$@"
> >   
> 
> 
> -- 
> error compiling committee.c: too many arguments to function
> 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/Makefile b/Makefile
index 95e4c81..ad08c45 100644
--- a/Makefile
+++ b/Makefile
@@ -27,8 +27,9 @@  all:: prerequisite
 #	include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat
 	$(MAKE) -C $(KERNELDIR) M=`pwd` \
 		LINUXINCLUDE="-I`pwd`/include -Iinclude \
-		$(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \
-		-Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \
+		$(if $(KERNELSOURCEDIR),\
+			-Iinclude2 -I$(KERNELSOURCEDIR)/include -I$(KERNELSOURCEDIR)/arch/${ARCH_DIR}/include, \
+			-Iarch/${ARCH_DIR}/include) -I`pwd`/include-compat \
 		-include include/linux/autoconf.h \
 		-include `pwd`/$(ARCH_DIR)/external-module-compat.h $(module_defines)" \
 		"$$@"