[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 4/4] tests/docker/Makefile.include: add a gen
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH v2 4/4] tests/docker/Makefile.include: add a generic docker-run target |
Date: |
Tue, 11 Oct 2016 18:12:20 +0800 |
User-agent: |
Mutt/1.7.0 (2016-08-17) |
On Mon, 10/03 17:32, Alex Bennée wrote:
> This re-factors the docker makefile to include a docker-run target which
> 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:
>
> make docker-run TEST="test-quick" IMAGE="debian:arm64" \
> EXECUTABLE=./aarch64-linux-user/qemu-aarch64
>
> The existing address@hidden 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.
>
> Signed-off-by: Alex Bennée <address@hidden>
Actually I now realize we never use the verification for invalid tests and
images because of other implicit/pattern rules in rules.mak:
$ make address@hidden
LD -r address@hidden
/usr/bin/ld: no input files
collect2: error: ld returned 1 exit status
rules.mak:99: recipe for target 'address@hidden' failed
make: *** address@hidden Error 1
$ make address@hidden
$ make address@hidden
LD -r address@hidden
/usr/bin/ld: no input files
collect2: error: ld returned 1 exit status
rules.mak:99: recipe for target 'address@hidden' failed
make: *** address@hidden Error 1
Maybe we can simply get rid of that altogether? What do you think?
Fam
>
> ---
> 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.
>
> 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(-)
>
> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
> 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 container
> name."'
> @echo ' docker-image: Build all images.'
> @echo ' docker-image-IMAGE: Build image "IMAGE".'
> + @echo ' docker-run: For manually running a "TEST" with
> "IMAGE"'
> @echo
> @echo 'Available container images:'
> @echo ' $(DOCKER_IMAGES)'
> @@ -101,31 +102,73 @@ docker:
> @echo ' NOCACHE=1 Ignore cache when build images.'
> @echo ' EXECUTABLE=<path> Include executable in image.'
>
> -docker-run-%: CMD = $(shell echo '$@' | sed -e
> 's/docker-run-\(address@hidden)@\(.*\)/\1/')
> -docker-run-%: IMAGE = $(shell echo '$@' | sed -e
> 's/docker-run-\(address@hidden)@\(.*\)/\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
> +# address@hidden) which will do additional verification.
> +#
> +# For example: make docker-run TEST="test-quick" IMAGE="debian:arm64"
> EXECUTABLE=./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=none) \
> + -e TARGET_LIST=$(TARGET_LIST) \
> + -e EXTRA_CONFIGURE_OPTS="$(EXTRA_CONFIGURE_OPTS)" \
> + -e V=$V -e J=$J -e DEBUG=$(DEBUG) \
> + -e SHOW_ENV=$(SHOW_ENV) \
> + -e CCACHE_DIR=/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 = $(shell echo '$@' | sed -e
> 's/docker-verify-image-\(address@hidden)@\(.*\)/\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=="qemu" && $$2=="$(IMAGE)"{found=1}
> END{exit(!found)}'; then \
> - $(SRC_PATH)/tests/docker/docker.py run $(if
> $V,,--rm) \
> - -t \
> - $(if $(DEBUG),-i,--net=none) \
> - -e TARGET_LIST=$(TARGET_LIST) \
> - -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS)
> \
> - -e V=$V -e J=$J -e DEBUG=$(DEBUG) -e
> SHOW_ENV=$(SHOW_ENV)\
> - -e CCACHE_DIR=/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 = $(shell echo '$@' | sed -e
> 's/docker-verify-test-\(address@hidden)@\(.*\)/\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 address@hidden 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 = $(shell echo '$@' | sed -e
> 's/docker-run-\(address@hidden)@\(.*\)/\1/')
> +docker-run-%: IMAGE = $(shell echo '$@' | sed -e
> 's/docker-run-\(address@hidden)@\(.*\)/\2/')
> +docker-run-%: docker-verify-image-% docker-verify-test-%
> + @make docker-run TEST=$(CMD) IMAGE=qemu:$(IMAGE)
>
> docker-clean:
> $(call quiet-command, $(SRC_PATH)/tests/docker/docker.py clean)
> --
> 2.9.3
>
- [Qemu-devel] [PATCH v2 0/4] generic docker run patches, Alex Bennée, 2016/10/03
- [Qemu-devel] [PATCH v2 1/4] tests/docker: add travis dockerfile, Alex Bennée, 2016/10/03
- [Qemu-devel] [PATCH v2 3/4] tests/docker: make test-mingw honour TARGET_LIST, Alex Bennée, 2016/10/03
- [Qemu-devel] [PATCH v2 4/4] tests/docker/Makefile.include: add a generic docker-run target, Alex Bennée, 2016/10/03
- Re: [Qemu-devel] [PATCH v2 4/4] tests/docker/Makefile.include: add a generic docker-run target,
Fam Zheng <=
- Re: [Qemu-devel] [PATCH v2 0/4] generic docker run patches, Alex Bennée, 2016/10/11