From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48409) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btu2u-0008Gm-Ew for qemu-devel@nongnu.org; Tue, 11 Oct 2016 06:12:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1btu2q-0002mc-6W for qemu-devel@nongnu.org; Tue, 11 Oct 2016 06:12:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45804) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btu2p-0002m5-T6 for qemu-devel@nongnu.org; Tue, 11 Oct 2016 06:12:24 -0400 Date: Tue, 11 Oct 2016 18:12:20 +0800 From: Fam Zheng Message-ID: <20161011101220.GF5814@lemon> References: <20161003163212.8101-1-alex.bennee@linaro.org> <20161003163212.8101-5-alex.bennee@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <20161003163212.8101-5-alex.bennee@linaro.org> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 4/4] tests/docker/Makefile.include: add a generic docker-run target List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alex =?iso-8859-1?Q?Benn=E9e?= Cc: qemu-devel@nongnu.org On Mon, 10/03 17:32, Alex Benn=E9e wrote: > This re-factors the docker makefile to include a docker-run target whic= h > can be controlled entirely from environment variables specified on the > make command line. This allows us to run against any given docker image > we may have in our repository, for example: >=20 > make docker-run TEST=3D"test-quick" IMAGE=3D"debian:arm64" \ > EXECUTABLE=3D./aarch64-linux-user/qemu-aarch64 >=20 > The existing docker-foo@bar targets still work but the inline > verification has been shunted into other target prerequisites before a > sub-make is invoked for the docker-run target. >=20 > Signed-off-by: Alex Benn=E9e Actually I now realize we never use the verification for invalid tests an= d images because of other implicit/pattern rules in rules.mak: $ make docker-test-quick@bar LD -r docker-test-quick@bar.mo /usr/bin/ld: no input files collect2: error: ld returned 1 exit status rules.mak:99: recipe for target 'docker-test-quick@bar.mo' failed make: *** [docker-test-quick@bar.mo] Error 1 $ make docker-test-quick@bar^C $ make docker-test-foo@fedora LD -r docker-test-foo@fedora.mo /usr/bin/ld: no input files collect2: error: ld returned 1 exit status rules.mak:99: recipe for target 'docker-test-foo@fedora.mo' failed make: *** [docker-test-foo@fedora.mo] Error 1 Maybe we can simply get rid of that altogether? What do you think? Fam >=20 > --- > NB: I dropped the awk magic that verifies the image exists before > running. I couldn't get the thing to work in my shell so wasn't quite > sure what it was doing. >=20 > v2 > - fix spelling on arbitrary > - document docker-run in help > - add note on docker.py update > - reduce noise on verifying other images > - revert back to using filter > - fix merge conflict > --- > tests/docker/Makefile.include | 89 ++++++++++++++++++++++++++++++++---= -------- > 1 file changed, 66 insertions(+), 23 deletions(-) >=20 > diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.incl= ude > index 2fcc3c6..87735d8 100644 > --- a/tests/docker/Makefile.include > +++ b/tests/docker/Makefile.include > @@ -78,6 +78,7 @@ docker: > @echo ' "IMAGE" is one of the listed containe= r name."' > @echo ' docker-image: Build all images.' > @echo ' docker-image-IMAGE: Build image "IMAGE".' > + @echo ' docker-run: For manually running a "TEST" with "I= MAGE"' > @echo > @echo 'Available container images:' > @echo ' $(DOCKER_IMAGES)' > @@ -101,31 +102,73 @@ docker: > @echo ' NOCACHE=3D1 Ignore cache when build images.' > @echo ' EXECUTABLE=3D Include executable in image.' > =20 > -docker-run-%: CMD =3D $(shell echo '$@' | sed -e 's/docker-run-\([^@]*= \)@\(.*\)/\1/') > -docker-run-%: IMAGE =3D $(shell echo '$@' | sed -e 's/docker-run-\([^@= ]*\)@\(.*\)/\2/') > -docker-run-%: docker-qemu-src > +# This rule if for directly running against an arbitrary docker target= . > +# It is called by the expanded docker targets (e.g. make > +# docker-test-foo@bar) which will do additional verification. > +# > +# For example: make docker-run TEST=3D"test-quick" IMAGE=3D"debian:arm= 64" EXECUTABLE=3D./aarch64-linux-user/qemu-aarch64 > +# > +docker-run: docker-qemu-src > @mkdir -p "$(DOCKER_CCACHE_DIR)" > - @if test -z "$(IMAGE)" || test -z "$(CMD)"; \ > - then echo "Invalid target"; exit 1; \ > + @if test -z "$(IMAGE)" || test -z "$(TEST)"; \ > + then echo "Invalid target $(IMAGE)/$(TEST)"; exit 1; \ > + fi > + $(if $(EXECUTABLE), \ > + $(call quiet-command, \ > + $(SRC_PATH)/tests/docker/docker.py update \ > + $(IMAGE) $(EXECUTABLE), \ > + " COPYING $(EXECUTABLE) to $(IMAGE)")) > + $(call quiet-command, \ > + $(SRC_PATH)/tests/docker/docker.py run \ > + -t \ > + $(if $V,,--rm) \ > + $(if $(DEBUG),-i,--net=3Dnone) \ > + -e TARGET_LIST=3D$(TARGET_LIST) \ > + -e EXTRA_CONFIGURE_OPTS=3D"$(EXTRA_CONFIGURE_OPTS)" \ > + -e V=3D$V -e J=3D$J -e DEBUG=3D$(DEBUG) \ > + -e SHOW_ENV=3D$(SHOW_ENV) \ > + -e CCACHE_DIR=3D/var/tmp/ccache \ > + -v $$(readlink -e $(DOCKER_SRC_COPY)):/var/tmp/qemu:z$(COMMA)ro \ > + -v $(DOCKER_CCACHE_DIR):/var/tmp/ccache:z \ > + $(IMAGE) \ > + /var/tmp/qemu/run \ > + $(TEST), " RUN $(TEST) in ${IMAGE}") > + > +# > +# Verification targets > +# > +# These targets help verify the test (CMD) and docker tag (IMAGE) are > +# part of the built in set of tests and images. You can still call the > +# docker-run target directly for testsing against arbitary images. > +# > + > +docker-verify-image-%: IMAGE =3D $(shell echo '$@' | sed -e 's/docker-= verify-image-\([^@]*\)@\(.*\)/\2/') > +docker-verify-image-%: > + @if test -z "$(IMAGE)"; \ > + then echo "Invalid image"; exit 1; \ > fi > - $(if $(filter $(TESTS),$(CMD)),$(if $(filter $(IMAGES),$(IMAGE)), \ > - $(call quiet-command,\ > - if $(SRC_PATH)/tests/docker/docker.py images | \ > - awk '$$1=3D=3D"qemu" && $$2=3D=3D"$(IMAGE)"{found=3D1} END{exit(!f= ound)}'; then \ > - $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ > - -t \ > - $(if $(DEBUG),-i,--net=3Dnone) \ > - -e TARGET_LIST=3D$(TARGET_LIST) \ > - -e EXTRA_CONFIGURE_OPTS=3D$(EXTRA_CONFIGURE_OPTS) \ > - -e V=3D$V -e J=3D$J -e DEBUG=3D$(DEBUG) -e SHOW_ENV=3D$(SHOW_ENV)\ > - -e CCACHE_DIR=3D/var/tmp/ccache \ > - -v $$(readlink -e $(DOCKER_SRC_COPY)):/var/tmp/qemu:z$(COMMA)ro \ > - -v $(DOCKER_CCACHE_DIR):/var/tmp/ccache:z \ > - qemu:$(IMAGE) \ > - /var/tmp/qemu/run \ > - $(CMD); \ > - fi \ > - , " RUN $(CMD) in $(IMAGE)"))) > + $(if $(filter $(IMAGE), $(DOCKER_IMAGES)), , \ > + echo "$(IMAGE) is not a known image"; exit 1) \ > + > +docker-verify-test-%: CMD =3D $(shell echo '$@' | sed -e 's/docker-ver= ify-test-\([^@]*\)@\(.*\)/\1/') > +docker-verify-test-%: > + @if test -z "$(CMD)"; \ > + then echo "Invalid test"; exit 1; \ > + fi > + $(if $(filter $(CMD), $(DOCKER_TESTS)), , \ > + echo "$(CMD) is not a known test"; exit 1) > + > +# Run targets > +# > +# This will take a target such as docker-test-foo@bar and verify that: > +# - the test test-foo is a known test > +# - the image bar is a known image > +# > +# It will then call the docker-run > +docker-run-%: CMD =3D $(shell echo '$@' | sed -e 's/docker-run-\([^@]*= \)@\(.*\)/\1/') > +docker-run-%: IMAGE =3D $(shell echo '$@' | sed -e 's/docker-run-\([^@= ]*\)@\(.*\)/\2/') > +docker-run-%: docker-verify-image-% docker-verify-test-% > + @make docker-run TEST=3D$(CMD) IMAGE=3Dqemu:$(IMAGE) > =20 > docker-clean: > $(call quiet-command, $(SRC_PATH)/tests/docker/docker.py clean) > --=20 > 2.9.3 >=20