mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
rewrite i386 tests Makefile
1) compute path to i386 compiler from configure. If it is found, run the i386 tests. I use macros so that this approach could be applied for other arches as well. 2) provide an easily extensible way to add tests Most tests fail, but at least "make test" does something meaningful. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
48118b0205
commit
2b2e59e6c9
3 changed files with 93 additions and 44 deletions
4
configure
vendored
4
configure
vendored
|
@ -92,6 +92,7 @@ libs_softmmu=""
|
|||
libs_tools=""
|
||||
audio_pt_int=""
|
||||
audio_win_int=""
|
||||
cc_i386=i386-pc-linux-gnu-gcc
|
||||
|
||||
# parse CC options first
|
||||
for opt do
|
||||
|
@ -789,12 +790,14 @@ case "$cpu" in
|
|||
i386)
|
||||
QEMU_CFLAGS="-m32 $QEMU_CFLAGS"
|
||||
LDFLAGS="-m32 $LDFLAGS"
|
||||
cc_i386='$(CC) -m32'
|
||||
helper_cflags="-fomit-frame-pointer"
|
||||
host_guest_base="yes"
|
||||
;;
|
||||
x86_64)
|
||||
QEMU_CFLAGS="-m64 $QEMU_CFLAGS"
|
||||
LDFLAGS="-m64 $LDFLAGS"
|
||||
cc_i386='$(CC) -m32'
|
||||
host_guest_base="yes"
|
||||
;;
|
||||
arm*)
|
||||
|
@ -2640,6 +2643,7 @@ echo "INSTALL_DIR=$install -d -m0755 -p" >> $config_host_mak
|
|||
echo "INSTALL_DATA=$install -m0644 -p" >> $config_host_mak
|
||||
echo "INSTALL_PROG=$install -m0755 -p" >> $config_host_mak
|
||||
echo "CC=$cc" >> $config_host_mak
|
||||
echo "CC_I386=$cc_i386" >> $config_host_mak
|
||||
echo "HOST_CC=$host_cc" >> $config_host_mak
|
||||
if test "$sparse" = "yes" ; then
|
||||
echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
|
||||
|
|
|
@ -42,6 +42,15 @@ cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \
|
|||
VPATH_SUFFIXES = %.c %.h %.S %.m %.mak %.texi
|
||||
set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath $(PATTERN) $1)))
|
||||
|
||||
# find-in-path
|
||||
# Usage: $(call find-in-path, prog)
|
||||
# Looks in the PATH if the argument contains no slash, else only considers one
|
||||
# specific directory. Returns an # empty string if the program doesn't exist
|
||||
# there.
|
||||
find-in-path = $(if $(find-string /, $1), \
|
||||
$(wildcard $1), \
|
||||
$(wildcard $(patsubst %, %/$1, $(subst :, ,$(PATH)))))
|
||||
|
||||
# Generate timestamp files for .h include files
|
||||
|
||||
%.h: %.h-timestamp
|
||||
|
|
124
tests/Makefile
124
tests/Makefile
|
@ -3,82 +3,118 @@
|
|||
|
||||
$(call set-vpath, $(SRC_PATH)/tests)
|
||||
|
||||
QEMU=../i386-linux-user/qemu-i386
|
||||
QEMU_X86_64=../x86_64-linux-user/qemu-x86_64
|
||||
CC_X86_64=$(CC_I386) -m64
|
||||
|
||||
CFLAGS=-Wall -O2 -g -fno-strict-aliasing -I..
|
||||
#CFLAGS+=-msse2
|
||||
LDFLAGS=
|
||||
|
||||
ifeq ($(ARCH),i386)
|
||||
TESTS=linux-test testthread sha1-i386 test-i386
|
||||
# TODO: automatically detect ARM and MIPS compilers, and run those too
|
||||
|
||||
# runcom maps page 0, so it requires root privileges
|
||||
# also, pi_10.com runs indefinitely
|
||||
|
||||
I386_TESTS=hello-i386 \
|
||||
linux-test \
|
||||
testthread \
|
||||
sha1-i386 \
|
||||
test-i386 \
|
||||
test-mmap \
|
||||
# runcom
|
||||
|
||||
# native i386 compilers sometimes are not biarch. assume cross-compilers are
|
||||
ifneq ($(ARCH),i386)
|
||||
I386_TESTS+=run-test-x86_64
|
||||
endif
|
||||
ifeq ($(ARCH),x86_64)
|
||||
TESTS=test-x86_64
|
||||
|
||||
TESTS = test_path
|
||||
ifneq ($(call find-in-path, $(CC_I386)),)
|
||||
TESTS += $(I386_TESTS)
|
||||
endif
|
||||
TESTS+=sha1# test_path
|
||||
#TESTS+=test_path
|
||||
#TESTS+=runcom
|
||||
|
||||
QEMU=../i386-linux-user/qemu-i386
|
||||
all: $(patsubst %,run-%,$(TESTS))
|
||||
|
||||
all: $(TESTS)
|
||||
# rules to run tests
|
||||
|
||||
hello-i386: hello-i386.c
|
||||
$(CC) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $<
|
||||
strip $@
|
||||
.PHONY: $(patsubst %,run-%,$(TESTS))
|
||||
|
||||
testthread: testthread.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lpthread
|
||||
run-%: %
|
||||
-$(QEMU) ./$*
|
||||
|
||||
test_path: test_path.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||
./$@ || { rm $@; exit 1; }
|
||||
run-hello-i386: hello-i386
|
||||
run-linux-test: linux-test
|
||||
run-testthread: testthread
|
||||
run-sha1-i386: sha1-i386
|
||||
|
||||
# i386/x86_64 emulation test (test various opcodes) */
|
||||
test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \
|
||||
test-i386.h test-i386-shift.h test-i386-muldiv.h
|
||||
$(CC) -m32 $(CFLAGS) $(LDFLAGS) -static -o $@ \
|
||||
$(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm
|
||||
|
||||
test-x86_64: test-i386.c \
|
||||
test-i386.h test-i386-shift.h test-i386-muldiv.h
|
||||
$(CC) -m64 $(CFLAGS) $(LDFLAGS) -static -o $@ $(<D)/test-i386.c -lm
|
||||
|
||||
ifeq ($(ARCH),i386)
|
||||
test: test-i386
|
||||
run-test-i386: test-i386
|
||||
./test-i386 > test-i386.ref
|
||||
else
|
||||
test:
|
||||
endif
|
||||
$(QEMU) test-i386 > test-i386.out
|
||||
-$(QEMU) test-i386 > test-i386.out
|
||||
@if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi
|
||||
|
||||
.PHONY: test-mmap
|
||||
test-mmap: test-mmap.c
|
||||
$(CC) $(CFLAGS) -Wall -static -O2 $(LDFLAGS) -o $@ $<
|
||||
-./test-mmap
|
||||
run-test-x86_64: test-x86_64
|
||||
./test-x86_64 > test-x86_64.ref
|
||||
-$(QEMU_X86_64) test-x86_64 > test-x86_64.out
|
||||
@if diff -u test-x86_64.ref test-x86_64.out ; then echo "Auto Test OK"; fi
|
||||
|
||||
run-test-mmap: test-mmap
|
||||
-$(QEMU) ./test-mmap
|
||||
-$(QEMU) -p 8192 ./test-mmap 8192
|
||||
-$(QEMU) -p 16384 ./test-mmap 16384
|
||||
-$(QEMU) -p 32768 ./test-mmap 32768
|
||||
|
||||
run-runcom: runcom
|
||||
-$(QEMU) ./runcom $(SRC_PATH)/tests/pi_10.com
|
||||
|
||||
run-test_path: test_path
|
||||
./test_path
|
||||
|
||||
# rules to compile tests
|
||||
|
||||
test_path: test_path.o
|
||||
test_path.o: test_path.c
|
||||
|
||||
hello-i386: hello-i386.c
|
||||
$(CC_I386) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $<
|
||||
strip $@
|
||||
|
||||
testthread: testthread.c
|
||||
$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $< -lpthread
|
||||
|
||||
# i386/x86_64 emulation test (test various opcodes) */
|
||||
test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \
|
||||
test-i386.h test-i386-shift.h test-i386-muldiv.h
|
||||
$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ \
|
||||
$(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm
|
||||
|
||||
test-x86_64: test-i386.c \
|
||||
test-i386.h test-i386-shift.h test-i386-muldiv.h
|
||||
$(CC_X86_64) $(CFLAGS) $(LDFLAGS) -o $@ $(<D)/test-i386.c -lm
|
||||
|
||||
# generic Linux and CPU test
|
||||
linux-test: linux-test.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lm
|
||||
$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $< -lm
|
||||
|
||||
# vm86 test
|
||||
runcom: runcom.c
|
||||
$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||
|
||||
test-mmap: test-mmap.c
|
||||
$(CC_I386) -m32 $(CFLAGS) -Wall -O2 $(LDFLAGS) -o $@ $<
|
||||
|
||||
# speed test
|
||||
sha1-i386: sha1.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||
$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||
|
||||
sha1: sha1.c
|
||||
$(HOST_CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||
|
||||
speed: sha1 sha1-i386
|
||||
time ./sha1
|
||||
time $(QEMU) ./sha1-i386
|
||||
|
||||
# vm86 test
|
||||
runcom: runcom.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||
|
||||
# broken test
|
||||
# NOTE: -fomit-frame-pointer is currently needed : this is a bug in libqemu
|
||||
qruncom: qruncom.c ../ioport-user.c ../i386-user/libqemu.a
|
||||
$(CC) $(CFLAGS) -fomit-frame-pointer $(LDFLAGS) -I../target-i386 -I.. -I../i386-user -I../fpu \
|
||||
|
|
Loading…
Reference in a new issue