Paolo Bonzini <pbonz...@redhat.com> writes:
> Avoid the repeated inclusions of config-target.mak, which have > risks of namespace pollution, and instead build minimal configuration > files in a configuration script. The same configuration files can > also be included in Makefile and Makefile.qemu > <snip> > if [ "$fdt" = "git" ]; then > echo "config-host.h: dtc/all" >> $config_host_mak > fi > @@ -7923,15 +7799,14 @@ fi > # so the build tree will be missing the link back to the new file, and > # tests might fail. Prefer to keep the relevant files in their own > # directory and symlink the directory instead. > -DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos > tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" > +DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema > tests/qemu-iotests tests/vm" > DIRS="$DIRS tests/fp tests/qgraph" > DIRS="$DIRS docs docs/interop fsdev scsi" > DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" > DIRS="$DIRS roms/seabios roms/vgabios" > -LINKS="Makefile tests/tcg/Makefile" > -LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" > -LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" > -LINKS="$LINKS tests/fp/Makefile" > +LINKS="Makefile" > +LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" > +LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile" Is this why I get complaints on a clean tree: libpmem support no libudev yes default devices yes /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: 179: /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: cannot create tests/tcg/config-aarch64-linux-user.mak: Directory nonexistent /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: 180: /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: cannot create tests/tcg/config-aarch64-linux-user.mak: Directory nonexistent /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: 183: /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: cannot create tests/tcg/config-aarch64-linux-user.mak: Directory nonexistent /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: 184: /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: cannot create tests/tcg/config-aarch64-linux-user.mak: Directory nonexistent /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: 193: /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: cannot create tests/tcg/config-aarch64-linux-user.mak: Directory nonexistent /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: 213: /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: cannot create tests/tcg/config-aarch64-linux-user.mak: Directory nonexistent /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: 179: /home/alex/lsrc/qemu.git/tests/tcg/configure.sh: cannot create tests/tcg/config-arm-linux-user.mak: Directory nonexist ... > LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" > LINKS="$LINKS pc-bios/spapr-rtas/Makefile" > LINKS="$LINKS pc-bios/s390-ccw/Makefile" > diff --git a/tests/Makefile.include b/tests/Makefile.include > index 8bb5c97..a3ee649 100644 > --- a/tests/Makefile.include > +++ b/tests/Makefile.include > @@ -1058,30 +1058,28 @@ BUILD_TCG_TARGET_RULES=$(patsubst > %,build-tcg-tests-%, $(TARGET_DIRS)) > CLEAN_TCG_TARGET_RULES=$(patsubst %,clean-tcg-tests-%, $(TARGET_DIRS)) > RUN_TCG_TARGET_RULES=$(patsubst %,run-tcg-tests-%, $(TARGET_DIRS)) > > -ifeq ($(HAVE_USER_DOCKER),y) > # Probe for the Docker Builds needed for each build > $(foreach PROBE_TARGET,$(TARGET_DIRS), \ > $(eval -include $(SRC_PATH)/tests/tcg/Makefile.prereqs)) > -endif > > build-tcg-tests-%: > $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \ > -f $(SRC_PATH)/tests/tcg/Makefile.qemu \ > SRC_PATH=$(SRC_PATH) \ > - V="$(V)" TARGET_DIR="$*/" guest-tests, \ > + V="$(V)" TARGET="$*" guest-tests, \ > "BUILD", "TCG tests for $*") > > run-tcg-tests-%: build-tcg-tests-% %/all > $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \ > -f $(SRC_PATH)/tests/tcg/Makefile.qemu \ > SRC_PATH=$(SRC_PATH) SPEED="$(SPEED)" \ > - V="$(V)" TARGET_DIR="$*/" run-guest-tests, \ > + V="$(V)" TARGET="$*" run-guest-tests, \ > "RUN", "TCG tests for $*") > > clean-tcg-tests-%: > $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \ > -f $(SRC_PATH)/tests/tcg/Makefile.qemu \ > - SRC_PATH=$(SRC_PATH) TARGET_DIR="$*/" clean-guest-tests, \ > + SRC_PATH=$(SRC_PATH) TARGET="$*" clean-guest-tests, \ > "RUN", "TCG tests for $*") > > .PHONY: build-tcg > diff --git a/tests/tcg/Makefile.prereqs b/tests/tcg/Makefile.prereqs > index 53b0196..7494b31 100644 > --- a/tests/tcg/Makefile.prereqs > +++ b/tests/tcg/Makefile.prereqs > @@ -7,24 +7,12 @@ > # selection of required docker targets before we invoke a sub-make for > # each target. > > -# First we need the target makefile which tells us the target architecture > -CROSS_CC_GUEST:= > --include $(BUILD_DIR)/$(PROBE_TARGET)/config-target.mak > - > -# Then we load up the target architecture makefiles which tell us > -# about the compilers > DOCKER_IMAGE:= > > --include $(SRC_PATH)/tests/tcg/$(TARGET_BASE_ARCH)/Makefile.include > --include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.include > +-include $(BUILD_DIR)/tests/tcg/config-$(PROBE_TARGET).mak > > -ifndef CROSS_CC_GUEST > ifneq ($(DOCKER_IMAGE),) > build-tcg-tests-$(PROBE_TARGET): docker-image-$(DOCKER_IMAGE) > +$(BUILD_DIR)/tests/tcg/config_$(PROBE_TARGET).mak: config-host.mak > +config-host.mak: $(SRC_PATH)/tests/tcg/configure.sh > endif > -endif > - > -# Clean-up > -# undefine TARGET_NAME > -# undefine TARGET_BASE_ARCH > -# undefine TARGET_ABI_DIR > diff --git a/tests/tcg/Makefile.qemu b/tests/tcg/Makefile.qemu > index d3f3437..c8bec7b 100644 > --- a/tests/tcg/Makefile.qemu > +++ b/tests/tcg/Makefile.qemu > @@ -8,17 +8,22 @@ > # to do it for us. > # > > -# The per ARCH makefile, if it exists, holds extra information about > +include $(SRC_PATH)/rules.mak > + > +# The configure script fills in extra information about > # useful docker images or alternative compiler flags. > > -include $(TARGET_DIR)config-target.mak > -include $(SRC_PATH)/rules.mak > -include $(wildcard \ > - $(SRC_PATH)/tests/tcg/$(TARGET_BASE_ARCH)/Makefile.include \ > - $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.include) > +CROSS_CC_GUEST:= > +DOCKER_IMAGE:= > +-include $(BUILD_DIR)/tests/tcg/config-$(TARGET).mak > > GUEST_BUILD= > TCG_MAKE=../Makefile.target > + > +# We also need the Docker make rules to depend on > +SKIP_DOCKER_BUILD=1 > +include $(SRC_PATH)/tests/docker/Makefile.include > + > # Support installed Cross Compilers > > ifdef CROSS_CC_GUEST > @@ -26,11 +31,11 @@ ifdef CROSS_CC_GUEST > .PHONY: cross-build-guest-tests > cross-build-guest-tests: > $(call quiet-command, \ > - (mkdir -p tests/tcg/$(TARGET_DIR) && cd tests/tcg/$(TARGET_DIR) && \ > - $(MAKE) -f $(TCG_MAKE) TARGET_DIR="$(TARGET_DIR)" > CC="$(CROSS_CC_GUEST)" \ > + (mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \ > + $(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" CC="$(CROSS_CC_GUEST)" \ > SRC_PATH="$(SRC_PATH)" > BUILD_STATIC=$(CROSS_CC_GUEST_STATIC) \ > - EXTRA_CFLAGS=$(CROSS_CC_GUEST_CFLAGS)), \ I expect given we need config-FOO.mak files before that these mkdir's are in the wrong place. <snip> Otherwise I think this is going in the right direction. -- Alex Bennée