Patchwork [03/12] Switch build system to accompanied kernel headers

login
register
mail settings
Submitter Jan Kiszka
Date June 22, 2011, 9:37 p.m.
Message ID <4E02608F.7010500@web.de>
Download mbox | patch
Permalink /patch/101554/
State New
Headers show

Comments

Jan Kiszka - June 22, 2011, 9:37 p.m.
On 2011-06-22 22:51, Stefan Weil wrote:
> Am 08.06.2011 16:10, schrieb Jan Kiszka:
>> This helps reducing our build-time checks for feature support in the
>> available Linux kernel headers. And it helps users that do not have
>> sufficiently recent headers installed on their build machine.
>>
>> Consequently, the patch removes and build-time checks for kvm and vhost
>> in configure, the --kerneldir switch, and KVM_CFLAGS. Kernel headers are
>> supposed to be provided by QEMU only.
>>
>> s390 needs some extra love as it carries redefinitions from kernel
>> headers.
>>
>> CC: Alexander Graf <agraf@suse.de>
>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>> ---
>> Makefile.target | 4 +-
>> configure | 151 ++++++----------------------------------------
>> target-s390x/cpu.h | 10 ---
>> target-s390x/op_helper.c | 1 +
>> 4 files changed, 21 insertions(+), 145 deletions(-)
>>
>> diff --git a/Makefile.target b/Makefile.target
>> index 5c22df8..be9c0e8 100644
>> --- a/Makefile.target
>> +++ b/Makefile.target
>> @@ -14,7 +14,7 @@ endif
>>
>> TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
>> $(call set-vpath, $(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw)
>> -QEMU_CFLAGS+= -I.. -I$(TARGET_PATH) -DNEED_CPU_H
>> +QEMU_CFLAGS+= -I.. -I../linux-headers -I$(TARGET_PATH) -DNEED_CPU_H
>>
>> include $(SRC_PATH)/Makefile.objs
>>
>> @@ -37,8 +37,6 @@ ifndef CONFIG_HAIKU
>> LIBS+=-lm
>> endif
>>
>> -kvm.o kvm-all.o vhost.o vhost_net.o kvmclock.o:
>> QEMU_CFLAGS+=$(KVM_CFLAGS)
>> -
>> config-target.h: config-target.h-timestamp
>> config-target.h-timestamp: config-target.mak
>>
>> diff --git a/configure b/configure
>> index d38b952..0e1dc46 100755
>> --- a/configure
>> +++ b/configure
>> @@ -113,8 +113,7 @@ curl=""
>> curses=""
>> docs=""
>> fdt=""
>> -kvm=""
>> -kvm_para=""
>> +kvm="yes"
>> nptl=""
> 
> Are you planning to add kvm support for all platforms which don't
> support it today?

That would mean replacing all their kernels with Linux. Will take a bit
longer.

I simply overshot with my cleanups:


Will post this as a patch tomorrow.

> If not, kvm="yes" should be restricted to platforms with kvm support.
> 
> Otherwise, QEMU builds will fail very early:
> 
>  ERROR: Host kernel lacks signalfd() support,
>  but KVM depends on it when the IO thread is disabled.
> 
> Of course, users of those non-kvm platforms can set --disable-kvm,
> but I don't think that is the correct solution.
> 
> Even with kvm disabled, builds still fail for non-kvm systems:
> 
>  In file included from /qemu/hw/kvmclock.c:21:
>  /qemu/linux-headers/linux/kvm_para.h:26:26: warning: asm/kvm_para.h: No
> such file or directory

That indicates symlink emulation under Windows does not support
directories. Can you confirm this (check what
<builddir>/linux-headers/asm became)? Then we would have to link all
files in the arch header dir individually.

Jan
Stefan Weil - June 23, 2011, 5:37 a.m.
Am 22.06.2011 23:37, schrieb Jan Kiszka:
> On 2011-06-22 22:51, Stefan Weil wrote:
>> If not, kvm="yes" should be restricted to platforms with kvm support.
>>
>> Otherwise, QEMU builds will fail very early:
>>
>> ERROR: Host kernel lacks signalfd() support,
>> but KVM depends on it when the IO thread is disabled.
>>
>> Of course, users of those non-kvm platforms can set --disable-kvm,
>> but I don't think that is the correct solution.
>>
>> Even with kvm disabled, builds still fail for non-kvm systems:
>>
>> In file included from /qemu/hw/kvmclock.c:21:
>> /qemu/linux-headers/linux/kvm_para.h:26:26: warning: asm/kvm_para.h: No
>> such file or directory
>
> That indicates symlink emulation under Windows does not support
> directories. Can you confirm this (check what
> <builddir>/linux-headers/asm became)? Then we would have to link all
> files in the arch header dir individually.
>
> Jan

Even when cross compiling for w32 (on a linux host), kvmclock.c
does not compile:

$ LANG=C make CFLAGS=-g
   CC    i386-softmmu/kvmclock.o
In file included from /home/stefan/src/qemu/savannah/qemu/hw/kvmclock.c:20:
/home/stefan/src/qemu/savannah/qemu/linux-headers/linux/kvm.h:10:25: 
warning: linux/types.h: No such file or directory
/home/stefan/src/qemu/savannah/qemu/linux-headers/linux/kvm.h:12:25: 
warning: linux/ioctl.h: No such file or directory
In file included from 
/home/stefan/src/qemu/savannah/qemu/linux-headers/linux/kvm.h:13,
                  from /home/stefan/src/qemu/savannah/qemu/hw/kvmclock.c:20:
../linux-headers/asm/kvm.h:32: error: expected specifier-qualifier-list 
before '__u32'
../linux-headers/asm/kvm.h:41: error: expected specifier-qualifier-list 
before '__u8'
../linux-headers/asm/kvm.h:61: error: expected specifier-qualifier-list 
before '__u64'

Is kvmclock.c really needed for non-kvm platforms? Or does it simply need
a obj-i386-$(CONFIG_KVM) in Makefile.target?

Stefan
Jan Kiszka - June 23, 2011, 7:18 a.m.
On 2011-06-23 07:37, Stefan Weil wrote:
> Am 22.06.2011 23:37, schrieb Jan Kiszka:
>> On 2011-06-22 22:51, Stefan Weil wrote:
>>> If not, kvm="yes" should be restricted to platforms with kvm support.
>>>
>>> Otherwise, QEMU builds will fail very early:
>>>
>>> ERROR: Host kernel lacks signalfd() support,
>>> but KVM depends on it when the IO thread is disabled.
>>>
>>> Of course, users of those non-kvm platforms can set --disable-kvm,
>>> but I don't think that is the correct solution.
>>>
>>> Even with kvm disabled, builds still fail for non-kvm systems:
>>>
>>> In file included from /qemu/hw/kvmclock.c:21:
>>> /qemu/linux-headers/linux/kvm_para.h:26:26: warning: asm/kvm_para.h: No
>>> such file or directory
>>
>> That indicates symlink emulation under Windows does not support
>> directories. Can you confirm this (check what
>> <builddir>/linux-headers/asm became)? Then we would have to link all
>> files in the arch header dir individually.
>>
>> Jan
> 
> Even when cross compiling for w32 (on a linux host), kvmclock.c
> does not compile:
> 
> $ LANG=C make CFLAGS=-g
>   CC    i386-softmmu/kvmclock.o
> In file included from /home/stefan/src/qemu/savannah/qemu/hw/kvmclock.c:20:
> /home/stefan/src/qemu/savannah/qemu/linux-headers/linux/kvm.h:10:25:
> warning: linux/types.h: No such file or directory
> /home/stefan/src/qemu/savannah/qemu/linux-headers/linux/kvm.h:12:25:
> warning: linux/ioctl.h: No such file or directory
> In file included from
> /home/stefan/src/qemu/savannah/qemu/linux-headers/linux/kvm.h:13,
>                  from /home/stefan/src/qemu/savannah/qemu/hw/kvmclock.c:20:
> ../linux-headers/asm/kvm.h:32: error: expected specifier-qualifier-list
> before '__u32'
> ../linux-headers/asm/kvm.h:41: error: expected specifier-qualifier-list
> before '__u8'
> ../linux-headers/asm/kvm.h:61: error: expected specifier-qualifier-list
> before '__u64'
> 
> Is kvmclock.c really needed for non-kvm platforms? Or does it simply need
> a obj-i386-$(CONFIG_KVM) in Makefile.target?

It's not needed, specifically as we do not (yet) emulate the pv
interfaces of KVM. But changing the makefile won't suffice, we also need
to stub out kvmclock_create.

Right now I'm fighting to get a mingw build that far at all. The version
I have here (gcc 4.6 based) does not include liberity (but apparently
links fine without as well). Then there are tons of other errors and
warnings. Do you have some tree with recent fixes?

I would suggest you to set up a buildbot for the Windows platform. That
should help to get notifications about breakages a bit earlier. And that
may help to keep their number down (this broken window thing: once the
first few got damaged, no one will bother about smashing another one.

Jan

Patch

diff --git a/configure b/configure
index 3286e33..e6847c4 100755
--- a/configure
+++ b/configure
@@ -113,7 +113,7 @@  curl=""
 curses=""
 docs=""
 fdt=""
-kvm="yes"
+kvm=""
 nptl=""
 sdl=""
 vnc="yes"
@@ -129,7 +129,7 @@  xen=""
 xen_ctrl_version=""
 linux_aio=""
 attr=""
-vhost_net="yes"
+vhost_net=""
 xfs=""

 gprof="no"
@@ -457,6 +457,8 @@  Haiku)
   linux="yes"
   linux_user="yes"
   usb="linux"
+  kvm="yes"
+  vhost_net="yes"
   if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
     audio_possible_drivers="$audio_possible_drivers fmod"
   fi