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:
Paolo Bonzini 2010-10-21 10:18:40 +02:00 committed by Blue Swirl
parent 48118b0205
commit 2b2e59e6c9
3 changed files with 93 additions and 44 deletions

4
configure vendored
View File

@ -92,6 +92,7 @@ libs_softmmu=""
libs_tools="" libs_tools=""
audio_pt_int="" audio_pt_int=""
audio_win_int="" audio_win_int=""
cc_i386=i386-pc-linux-gnu-gcc
# parse CC options first # parse CC options first
for opt do for opt do
@ -789,12 +790,14 @@ case "$cpu" in
i386) i386)
QEMU_CFLAGS="-m32 $QEMU_CFLAGS" QEMU_CFLAGS="-m32 $QEMU_CFLAGS"
LDFLAGS="-m32 $LDFLAGS" LDFLAGS="-m32 $LDFLAGS"
cc_i386='$(CC) -m32'
helper_cflags="-fomit-frame-pointer" helper_cflags="-fomit-frame-pointer"
host_guest_base="yes" host_guest_base="yes"
;; ;;
x86_64) x86_64)
QEMU_CFLAGS="-m64 $QEMU_CFLAGS" QEMU_CFLAGS="-m64 $QEMU_CFLAGS"
LDFLAGS="-m64 $LDFLAGS" LDFLAGS="-m64 $LDFLAGS"
cc_i386='$(CC) -m32'
host_guest_base="yes" host_guest_base="yes"
;; ;;
arm*) 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_DATA=$install -m0644 -p" >> $config_host_mak
echo "INSTALL_PROG=$install -m0755 -p" >> $config_host_mak echo "INSTALL_PROG=$install -m0755 -p" >> $config_host_mak
echo "CC=$cc" >> $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 echo "HOST_CC=$host_cc" >> $config_host_mak
if test "$sparse" = "yes" ; then if test "$sparse" = "yes" ; then
echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak

View File

@ -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 VPATH_SUFFIXES = %.c %.h %.S %.m %.mak %.texi
set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath $(PATTERN) $1))) 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 # Generate timestamp files for .h include files
%.h: %.h-timestamp %.h: %.h-timestamp

View File

@ -3,82 +3,118 @@
$(call set-vpath, $(SRC_PATH)/tests) $(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=-Wall -O2 -g -fno-strict-aliasing -I..
#CFLAGS+=-msse2 #CFLAGS+=-msse2
LDFLAGS= LDFLAGS=
ifeq ($(ARCH),i386) # TODO: automatically detect ARM and MIPS compilers, and run those too
TESTS=linux-test testthread sha1-i386 test-i386
# 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 endif
ifeq ($(ARCH),x86_64)
TESTS=test-x86_64 TESTS = test_path
ifneq ($(call find-in-path, $(CC_I386)),)
TESTS += $(I386_TESTS)
endif 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 .PHONY: $(patsubst %,run-%,$(TESTS))
$(CC) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $<
strip $@
testthread: testthread.c run-%: %
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lpthread -$(QEMU) ./$*
test_path: test_path.c run-hello-i386: hello-i386
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< run-linux-test: linux-test
./$@ || { rm $@; exit 1; } run-testthread: testthread
run-sha1-i386: sha1-i386
# i386/x86_64 emulation test (test various opcodes) */ run-test-i386: test-i386
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
./test-i386 > test-i386.ref ./test-i386 > test-i386.ref
else -$(QEMU) test-i386 > test-i386.out
test:
endif
$(QEMU) test-i386 > test-i386.out
@if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi @if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi
.PHONY: test-mmap run-test-x86_64: test-x86_64
test-mmap: test-mmap.c ./test-x86_64 > test-x86_64.ref
$(CC) $(CFLAGS) -Wall -static -O2 $(LDFLAGS) -o $@ $< -$(QEMU_X86_64) test-x86_64 > test-x86_64.out
-./test-mmap @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) ./test-mmap
-$(QEMU) -p 8192 ./test-mmap 8192 -$(QEMU) -p 8192 ./test-mmap 8192
-$(QEMU) -p 16384 ./test-mmap 16384 -$(QEMU) -p 16384 ./test-mmap 16384
-$(QEMU) -p 32768 ./test-mmap 32768 -$(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 # generic Linux and CPU test
linux-test: linux-test.c 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 # speed test
sha1-i386: sha1.c sha1-i386: sha1.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $<
sha1: sha1.c sha1: sha1.c
$(HOST_CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
speed: sha1 sha1-i386 speed: sha1 sha1-i386
time ./sha1 time ./sha1
time $(QEMU) ./sha1-i386 time $(QEMU) ./sha1-i386
# vm86 test # broken test
runcom: runcom.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
# NOTE: -fomit-frame-pointer is currently needed : this is a bug in libqemu # NOTE: -fomit-frame-pointer is currently needed : this is a bug in libqemu
qruncom: qruncom.c ../ioport-user.c ../i386-user/libqemu.a 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 \ $(CC) $(CFLAGS) -fomit-frame-pointer $(LDFLAGS) -I../target-i386 -I.. -I../i386-user -I../fpu \