Skip to contentSkip to conversation

Build failure with qemu-kvm 0.1x

DISCUSSION Ozan Çağlayan 1 participant 2 messages Jan 8, 2010 KVM

lore
Share & tools
lore
#0 lore raw

Hi,

(Please keep me in CC as i'm not subscribed)

I couldn't achieve to compile qemu-kvm 0.1x.y series on my 32-bit host system
I tried practically every target combination but nope. Here's the configuration part:

./configure --target-list="i386-softmmu i386-linux-user" --prefix=/usr

Install prefix    /usr
BIOS directory    /usr/share/kvm
binary directory  /usr/bin
Manual directory  /usr/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2
C compiler        gcc
Host C compiler   gcc
CFLAGS            -O2 -g
QEMU_CFLAGS       -m32 -Wold-style-definition -Wold-style-declaration
-I. -I$(SRC_PATH) -U_FORTIFY_SOURCE -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
-D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef
-Wendif-labels -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing
LDFLAGS           -Wl,--warn-common -m32 -g
make              make
install           install
host CPU          i386
host big endian   no
target list       i386-softmmu i386-linux-user
tcg debug enabled no
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
-Werror enabled   no
SDL support       yes
curses support    yes
curl support      yes
check support     no
mingw32 support   no
Audio drivers     oss
Extra audio cards ac97 es1370 sb16
Block whitelist
Mixer emulation   no
VNC TLS support   yes
VNC SASL support  yes
xen support       no
CPU emulation     yes
brlapi support    no
bluez  support    yes
Documentation     yes
NPTL support      yes
GUEST_BASE        yes
PIE user targets  no
vde support       no
IO thread         no
Linux AIO support yes
Install blobs     yes
KVM support       yes
KVM PIT support   yes
KVM device assig. yes
KVM trace support no
fdt support       no
preadv support    no
fdatasync         yes
uuid support      yes

When I run make V=1, it fails at:

gcc -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/slirp -m32 -Wold-style-definition -Wold-style-declaration -I. -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2 -U_FORTIFY_SOURCE -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -DHAS_AUDIO -DHAS_AUDIO_CHOICE -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/fpu -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/tcg -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/tcg/i386 -I.. -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/target-i386 -DNEED_CPU_H -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm/include -include /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm/include/linux/config.h -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm/include/x86 -idirafter /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/compat -MMD -MP -MT kvm-all.o -O2 -g -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm/include -include /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm/include/linux/config.h -I/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm/include/x86 -idirafter /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/compat -c -o kvm-all.o /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm-all.c In file included from /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/kvm-all.c:1105:

/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/qemu-kvm.c: In function 'kvm_set_phys_mem':
/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/qemu-kvm.c:2296: error:
'p' undeclared (first use in this function) /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/qemu-kvm.c:2296: error:
(Each undeclared identifier is reported only once /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/qemu-kvm.c:2296: error:
for each function it appears in.) /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/qemu-kvm.c:2296:
warning: implicit declaration of function 'find_mapping' /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/qemu-kvm.c:2299:
warning: implicit declaration of function 'drop_mapping'

Now looking at the code there, it seems that TARGET_I386 isn't defined so p stays undeclared:

#ifdef TARGET_I386
    struct mapping *p;

#endif

Now I restart build with MAKE V=1 CFLAGS+="-DTARGET_I386", the errors above disappears as p is now declared but:

/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c: In function 'kvm_pit_pre_save':
/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c:38:
error: storage size of 'pit2' isn't known /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c:43:
warning: implicit declaration of function 'kvm_has_pit_state2' /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c:44:
warning: implicit declaration of function 'kvm_get_pit2' /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c:38:
warning: unused variable 'pit2' /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c: In function 'kvm_pit_post_load':
/var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c:72:
error: storage size of 'pit2' isn't known /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c:97:
warning: implicit declaration of function 'kvm_set_pit2' /var/pisi/kvm-0.12.1.2-49/work/qemu-kvm-0.12.1.2/hw/i8254-kvm.c:72:
warning: unused variable 'pit2'

and so on.. I suspect some locale specific things going on with i386 and TARGET_I386 as i->I conversion is a little bit problematic in Turkish collation. That's why I experimented a bit with LC_ALL=C but didn't figure out anything useful.

And as I write this e-mail, I somehow managed to build it cleanly but I'm sure that I didn't do anything special for that. I then make clean, configure, make, and it failed again. Re-do the same cycle and now it built correctly again for the 2nd time, what the hell is going on, any ideas?

Thanks,
Ozan

#1 lore raw
Quoted 8 lines · Ozan Çağlayan

Hi,

and so on.. I suspect some locale specific things going on with i386 and TARGET_I386 as i->I conversion is a little bit problematic in Turkish collation. That's why I experimented a bit with LC_ALL=C but didn't figure out anything useful.

And yes that was it:

target_arch_name="echo $TARGET_ARCH | tr '[:lower:]' '[:upper:]'"

this can't convert i386 to I386 which then appears in #ifdef TARGET_I386. This will probably only affect languages in which CAPITAL(i) = İ
CAPITAL(ı) = I

e.g. Turkish.

I work-arounded it by exporting LC_ALL=C at the beginning of the configure script. It's on yours now to decide to fix it in upstream or not,

Thanks anyway :)
Regards,