1 # -*- Mode: makefile -*-
5 # These are complicated by the fact we want to build them for guest
6 # systems. This requires knowing what guests we are building and which
7 # ones we have cross-compilers for or docker images with
10 # The tests themselves should be as minimal as possible as
11 # cross-compilers don't always have a large amount of libraries
14 # We only include the host build system for SRC_PATH and we don't
15 # bother with the common rules.mk. We expect the following:
17 # CC - the C compiler command
18 # EXTRA_CFLAGS - any extra CFLAGS
19 # BUILD_STATIC - are we building static binaries
21 # By default all tests are statically compiled but some host systems
22 # may not package static libraries by default. If an external
23 # cross-compiler can only build dynamic libraries the user might need
24 # to make extra efforts to ensure ld.so can link at runtime when the
27 # We also accept SPEED=slow to enable slower running tests
29 # We also expect to be in the tests build dir for the FOO-(linux-user|softmmu).
32 -include ..
/..
/config-host.mak
33 -include ..
/config-target.mak
35 # for including , in command strings
38 quiet-command
= $(if
$(V
),$1,$(if
$(2),@printf
" %-7s %s\n" $2 $3 && $1, @
$1))
40 # $1 = test name, $2 = cmd, $3 = desc
41 ifdef CONFIG_USER_ONLY
42 run-test
= $(call quiet-command
, timeout
$(TIMEOUT
) $2 > $1.out
,"TEST",$3)
44 run-test
= $(call quiet-command
, timeout
$(TIMEOUT
) $2,"TEST",$3)
47 # $1 = test name, $2 = reference
48 diff-out
= $(call quiet-command
, diff
-u
$1.out
$2 | head
-n
10,"DIFF","$1.out with $2")
50 # $1 = test name, $2 = reason
51 skip-test
= @printf
" SKIPPED %s on $(TARGET_NAME) because %s\n" $1 $2
53 # Tests we are building
56 # Start with a blank slate, the build targets get to add stuff first
61 # The QEMU for this TARGET
62 ifdef CONFIG_USER_ONLY
63 QEMU
=..
/qemu-
$(TARGET_NAME
)
65 QEMU
=..
/qemu-system-
$(TARGET_NAME
)
70 # If TCG debugging is enabled things are a lot slower
71 ifeq ($(CONFIG_DEBUG_TCG
),y
)
77 ifdef CONFIG_USER_ONLY
78 # The order we include is important. We include multiarch, base arch
79 # and finally arch if it's not the same as base arch.
80 -include $(SRC_PATH
)/tests
/tcg
/multiarch
/Makefile.target
81 -include $(SRC_PATH
)/tests
/tcg
/$(TARGET_BASE_ARCH
)/Makefile.target
82 ifneq ($(TARGET_BASE_ARCH
),$(TARGET_NAME
))
83 -include $(SRC_PATH
)/tests
/tcg
/$(TARGET_NAME
)/Makefile.target
86 # Add the common build options
87 CFLAGS
+=-Wall
-O0
-g
-fno-strict-aliasing
88 ifeq ($(BUILD_STATIC
),y
)
93 $(CC
) $(CFLAGS
) $(EXTRA_CFLAGS
) $< -o
$@
$(LDFLAGS
)
95 # For softmmu targets we include a different Makefile fragement as the
96 # build options for bare programs are usually pretty different. They
97 # are expected to provide their own build recipes.
98 -include $(SRC_PATH
)/tests
/tcg
/minilib
/Makefile.target
99 -include $(SRC_PATH
)/tests
/tcg
/$(TARGET_BASE_ARCH
)/Makefile.softmmu-target
100 ifneq ($(TARGET_BASE_ARCH
),$(TARGET_NAME
))
101 -include $(SRC_PATH
)/tests
/tcg
/$(TARGET_NAME
)/Makefile.softmmu-target
111 # By default we just run the test with the appropriate QEMU for the
112 # target. More advanced tests may want to override the runner in their
113 # specific make rules. Additional runners for the same binary should
114 # be added to EXTRA_RUNS.
117 RUN_TESTS
=$(patsubst %,run-
%, $(TESTS
))
118 RUN_TESTS
+=$(EXTRA_RUNS
)
120 ifdef CONFIG_USER_ONLY
122 $(call run-test
, $<, $(QEMU
) $(QEMU_OPTS
) $<, "$< on $(TARGET_NAME)")
125 $(call run-test
, $<, \
126 $(QEMU
) -monitor none
-display none \
127 -chardev file
$(COMMA
)path
=$<.out
$(COMMA
)id
=output \
129 "$< on $(TARGET_NAME)")
133 gdb
--args
$(QEMU
) $(QEMU_OPTS
) $<
138 # There is no clean target, the calling make just rm's the tests build dir