Skip to contentSkip to conversation

Makefile: Fix compilation for non-standard host kernel path

PATCH In review Prerna Saxena 2 participants 3 messages Jul 2, 2010 – Jul 7, 2010 Kbuild

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Makefile: Fix compilation for non-standard host kernel path

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

---
 Makefile.target |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
Makefile.target +5 -2
index d58b201..b433112 100644
@@ -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
 
Signature · 10 lines
1.6.2.5



-- 
Prerna Saxena

Linux Technology Centre,
IBM Systems and Technology Lab,
Bangalore, India
#1 lore raw
Quoted 5 lines · Prerna Saxena

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

Quoted 28 lines
---
 Makefile.target |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
Makefile.target +5 -2
index d58b201..b433112 100644
@@ -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
 
#2 lore raw
Quoted 10 lines · Anthony Liguori
Quoted 6 lines · Prerna Saxena

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,

Signature · 5 lines
Prerna Saxena

Linux Technology Centre,
IBM Systems and Technology Lab,
Bangalore, India