Patchwork Makefile: Fix compilation for non-standard host kernel path

login
register
mail settings
Submitter Prerna Saxena
Date July 2, 2010, 11:15 a.m.
Message ID <4C2DCA61.2080501@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/57650/
State New
Headers show

Comments

Prerna Saxena - July 2, 2010, 11:15 a.m.
Set up host kernel include paths specified by --kerneldir

When host kernel headers are placed in non-standard paths, the
KVM_CFLAGS are presently invoked only for a few .c files 
(kvm*.c,vhost*.c) and not for other files like machine.c, cpus.c
  ..etc which also depend on linux/kvm.h

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
---
  Makefile.target |    7 +++++--
  1 files changed, 5 insertions(+), 2 deletions(-)
Anthony Liguori - July 6, 2010, 7:40 p.m.
On 07/02/2010 06:15 AM, Prerna Saxena wrote:
> Set up host kernel include paths specified by --kerneldir
>
> When host kernel headers are placed in non-standard paths, the
> KVM_CFLAGS are presently invoked only for a few .c files 
> (kvm*.c,vhost*.c) and not for other files like machine.c, cpus.c
>  ..etc which also depend on linux/kvm.h

I think that's a bug.  What's the dependency of machine.c and cpus.c?

Regards,

Anthony Liguori

>
> Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
> ---
>  Makefile.target |    7 +++++--
>  1 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/Makefile.target b/Makefile.target
> index d58b201..b433112 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -29,12 +29,15 @@ QEMU_PROG=qemu-system-$(TARGET_ARCH2)$(EXESUF)
>  endif
>  endif
>
> +# Set up host kernel include paths specified by --kerneldir
> +ifdef CONFIG_KVM
> +QEMU_CFLAGS+=$(KVM_CFLAGS)
> +endif
> +
>  PROGS=$(QEMU_PROG)
>
>  LIBS+=-lm
>
> -kvm.o kvm-all.o vhost.o vhost_net.o: QEMU_CFLAGS+=$(KVM_CFLAGS)
> -
>  config-target.h: config-target.h-timestamp
>  config-target.h-timestamp: config-target.mak
>
Prerna Saxena - July 7, 2010, 8:26 a.m.
On 07/07/2010 01:10 AM, Anthony Liguori wrote:
> On 07/02/2010 06:15 AM, Prerna Saxena wrote:
>> Set up host kernel include paths specified by --kerneldir
>>
>> When host kernel headers are placed in non-standard paths, the
>> KVM_CFLAGS are presently invoked only for a few .c files
>> (kvm*.c,vhost*.c) and not for other files like machine.c, cpus.c
>> ..etc which also depend on linux/kvm.h
>
> I think that's a bug. What's the dependency of machine.c and cpus.c?
>

Both machine.d and cpus.d depend on qemu/kvm.h, which in turn needs 
linux/kvm.h

I am running a custom-compiled kernel for which the headers are placed 
separately. I pass the kernel source directory to my configure script as 
follows :

[usr@zephyr ~]$ configure --prefix=/home/bloat/qemu-git/qemu-bin 
--enable-kvm --target-list=i386-softmmu,x86_64-softmmu --enable-profiler 
--disable-docs --kerneldir=/home/bloat/kernels/linux-2.6.35-rc3
[usr@zephyr ~]$ make -j2

This is one of the errors I get : (similar ones are flagged for 
machine.o and cpus.o)

CC    i386-softmmu/arch_init.o
In file included from /home/bloat/qemu-git/qemu/arch_init.c:38:
/home/bloat/qemu-git/qemu/kvm.h:22:23: error: linux/kvm.h: No such file 
or directory
make[1]: *** [arch_init.o] Error 1

This is because the location of kernel headers is not passed as a '-I' 
switch to gcc. IMO adding the KVM_CFLAGS to QEMU_CFLAGS would be 
required for such cases.

Regards,

Patch

diff --git a/Makefile.target b/Makefile.target
index d58b201..b433112 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -29,12 +29,15 @@  QEMU_PROG=qemu-system-$(TARGET_ARCH2)$(EXESUF)
  endif
  endif

+# Set up host kernel include paths specified by --kerneldir
+ifdef CONFIG_KVM
+QEMU_CFLAGS+=$(KVM_CFLAGS)
+endif
+
  PROGS=$(QEMU_PROG)

  LIBS+=-lm

-kvm.o kvm-all.o vhost.o vhost_net.o: QEMU_CFLAGS+=$(KVM_CFLAGS)
-
  config-target.h: config-target.h-timestamp
  config-target.h-timestamp: config-target.mak