提交 2b2e59e6 编写于 作者: P Paolo Bonzini 提交者: Blue Swirl

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: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
上级 48118b02
...@@ -92,6 +92,7 @@ libs_softmmu="" ...@@ -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 ...@@ -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 ...@@ -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
......
...@@ -42,6 +42,15 @@ cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \ ...@@ -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
......
...@@ -3,82 +3,118 @@ ...@@ -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))
# rules to run tests
.PHONY: $(patsubst %,run-%,$(TESTS))
run-%: %
-$(QEMU) ./$*
run-hello-i386: hello-i386
run-linux-test: linux-test
run-testthread: testthread
run-sha1-i386: sha1-i386
run-test-i386: test-i386
./test-i386 > test-i386.ref
-$(QEMU) test-i386 > test-i386.out
@if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi
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
all: $(TESTS) test_path: test_path.o
test_path.o: test_path.c
hello-i386: hello-i386.c hello-i386: hello-i386.c
$(CC) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $< $(CC_I386) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $<
strip $@ strip $@
testthread: testthread.c testthread: testthread.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lpthread $(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $< -lpthread
test_path: test_path.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
./$@ || { rm $@; exit 1; }
# i386/x86_64 emulation test (test various opcodes) */ # i386/x86_64 emulation test (test various opcodes) */
test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \ test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \
test-i386.h test-i386-shift.h test-i386-muldiv.h test-i386.h test-i386-shift.h test-i386-muldiv.h
$(CC) -m32 $(CFLAGS) $(LDFLAGS) -static -o $@ \ $(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ \
$(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm $(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm
test-x86_64: test-i386.c \ test-x86_64: test-i386.c \
test-i386.h test-i386-shift.h test-i386-muldiv.h test-i386.h test-i386-shift.h test-i386-muldiv.h
$(CC) -m64 $(CFLAGS) $(LDFLAGS) -static -o $@ $(<D)/test-i386.c -lm $(CC_X86_64) $(CFLAGS) $(LDFLAGS) -o $@ $(<D)/test-i386.c -lm
ifeq ($(ARCH),i386)
test: test-i386
./test-i386 > test-i386.ref
else
test:
endif
$(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
-$(QEMU) ./test-mmap
-$(QEMU) -p 8192 ./test-mmap 8192
-$(QEMU) -p 16384 ./test-mmap 16384
-$(QEMU) -p 32768 ./test-mmap 32768
# 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 \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册