# Makefile for Docker tests

.PHONY: docker docker-test docker-clean docker-image docker-qemu-src

DOCKER_SUFFIX := .docker
DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles
DOCKER_DEPRECATED_IMAGES := debian
# we don't run tests on intermediate images (used as base by another image)
DOCKER_PARTIAL_IMAGES := debian debian8 debian9 debian8-mxe debian-ports debian-sid debian-bootstrap
DOCKER_IMAGES := $(filter-out $(DOCKER_DEPRECATED_IMAGES),$(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker)))))
DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES))
# Use a global constant ccache directory to speed up repetitive builds
DOCKER_CCACHE_DIR := $$HOME/.cache/qemu-docker-ccache

DOCKER_TESTS := $(notdir $(shell \
	find $(SRC_PATH)/tests/docker/ -name 'test-*' -type f))

DOCKER_TOOLS := travis

DOCKER_SCRIPT=$(SRC_PATH)/tests/docker/docker.py

TESTS ?= %
IMAGES ?= %

CUR_TIME := $(shell date +%Y-%m-%d-%H.%M.%S.$$$$)
DOCKER_SRC_COPY := $(BUILD_DIR)/docker-src.$(CUR_TIME)

.DELETE_ON_ERROR: $(DOCKER_SRC_COPY)
$(DOCKER_SRC_COPY):
	@mkdir $@
	$(if $(SRC_ARCHIVE), \
		$(call quiet-command, cp "$(SRC_ARCHIVE)" $@/qemu.tar, \
			"CP", "$@/qemu.tar"), \
		$(call quiet-command, cd $(SRC_PATH) && scripts/archive-source.sh $@/qemu.tar, \
			"GEN", "$@/qemu.tar"))
	$(call quiet-command, cp $(SRC_PATH)/tests/docker/run $@/run, \
		"COPY","RUNNER")

docker-qemu-src: $(DOCKER_SRC_COPY)

docker-image: ${DOCKER_TARGETS}

# General rule for building docker images. If we are a sub-make
# invoked with SKIP_DOCKER_BUILD we still check the image is upto date
# though
ifdef SKIP_DOCKER_BUILD
docker-image-%: $(DOCKER_FILES_DIR)/%.docker
	$(call quiet-command, \
		$(DOCKER_SCRIPT) check --quiet qemu:$* $<, \
		"CHECK", "$*")
else
docker-image-%: $(DOCKER_FILES_DIR)/%.docker
	$(call quiet-command,\
		$(DOCKER_SCRIPT) build qemu:$* $< \
		$(if $V,,--quiet) $(if $(NOCACHE),--no-cache) \
		$(if $(NOUSER),,--add-current-user) \
		$(if $(EXTRA_FILES),--extra-files $(EXTRA_FILES))\
		$(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)),\
		"BUILD","$*")

# Special rule for debootstraped binfmt linux-user images
docker-binfmt-image-debian-%: $(DOCKER_FILES_DIR)/debian-bootstrap.docker
	$(if $(EXECUTABLE),,\
		$(error EXECUTABLE not set, debootstrap of debian-$* would fail))
	$(if $(DEB_ARCH),,\
		$(error DEB_ARCH not set, debootstrap of debian-$* would fail))
	$(if $(DEB_TYPE),,\
		$(error DEB_TYPE not set, debootstrap of debian-$* would fail))
	$(if $(wildcard $(EXECUTABLE)),						\
		$(call quiet-command,						\
			DEB_ARCH=$(DEB_ARCH)					\
			DEB_TYPE=$(DEB_TYPE)					\
			$(DOCKER_SCRIPT) build qemu:debian-$* $< 		\
			$(if $V,,--quiet) $(if $(NOCACHE),--no-cache) 		\
			$(if $(NOUSER),,--add-current-user) 			\
			$(if $(EXTRA_FILES),--extra-files $(EXTRA_FILES))	\
			$(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)), \
			"BUILD","binfmt debian-$* (debootstrapped)"),		\
		$(call quiet-command,						\
			$(DOCKER_SCRIPT) check --quiet qemu:debian-$* $< || 	\
			{ echo "You will need to build $(EXECUTABLE)"; exit 1;},\
			"CHECK", "debian-$* exists"))

endif

# Enforce dependencies for composite images
docker-image-debian: docker-image-debian9
docker-image-debian8-mxe: docker-image-debian8
docker-image-debian-amd64: docker-image-debian9
docker-image-debian-armel-cross: docker-image-debian9
docker-image-debian-armhf-cross: docker-image-debian9
docker-image-debian-arm64-cross: docker-image-debian9
docker-image-debian-mips-cross: docker-image-debian9
docker-image-debian-mipsel-cross: docker-image-debian9
docker-image-debian-mips64el-cross: docker-image-debian9
docker-image-debian-ppc64el-cross: docker-image-debian9
docker-image-debian-s390x-cross: docker-image-debian9
docker-image-debian-win32-cross: docker-image-debian8-mxe
docker-image-debian-win64-cross: docker-image-debian8-mxe

# Debian SID images - we are tracking a rolling distro so we want to
# force a re-build of the base image if we ever need to build one of
# its children.
ifndef SKIP_DOCKER_BUILD
ifeq ($(HAVE_USER_DOCKER),y)
SID_AGE=$(shell $(DOCKER_SCRIPT) check --checktype=age --olderthan=180 --quiet qemu:debian-sid)
ifeq ($(SID_AGE),)
else
docker-image-debian-sid: NOCACHE=1
endif
endif
endif

docker-image-debian-alpha-cross: docker-image-debian-sid
docker-image-debian-hppa-cross: docker-image-debian-sid
docker-image-debian-m68k-cross: docker-image-debian-sid
docker-image-debian-sh4-cross: docker-image-debian-sid
docker-image-debian-sparc64-cross: docker-image-debian-sid
docker-image-debian-mips64-cross: docker-image-debian-sid
docker-image-debian-riscv64-cross: docker-image-debian-sid
docker-image-debian-powerpc-cross: docker-image-debian-sid
docker-image-travis: NOUSER=1

# Specialist build images, sometimes very limited tools
docker-image-tricore-cross: docker-image-debian9

# These images may be good enough for building tests but not for test builds
DOCKER_PARTIAL_IMAGES += debian-alpha-cross debian-hppa-cross debian-m68k-cross debian-sh4-cross
DOCKER_PARTIAL_IMAGES += debian-sparc64-cross debian-mips64-cross debian-riscv64-cross
DOCKER_PARTIAL_IMAGES += debian-tricore-cross debian-powerpc-cross fedora-i386-cross

# Rules for building linux-user powered images
#
# These are slower than using native cross compiler setups but can
# work around issues with poorly working multi-arch systems and broken
# packages.

# Jessie is the last supported release for powerpc, but multi-arch is
# broken so we need a qemu-linux-user for this target
docker-binfmt-image-debian-powerpc-user: DEB_ARCH = powerpc
docker-binfmt-image-debian-powerpc-user: DEB_TYPE = jessie
docker-binfmt-image-debian-powerpc-user: EXECUTABLE = ${BUILD_DIR}/ppc-linux-user/qemu-ppc
docker-image-debian-powerpc-user-cross: docker-binfmt-image-debian-powerpc-user
DOCKER_USER_IMAGES += debian-powerpc-user

# Expand all the pre-requistes for each docker image and test combination
$(foreach i,$(filter-out $(DOCKER_PARTIAL_IMAGES),$(DOCKER_IMAGES) $(DOCKER_DEPRECATED_IMAGES)), \
	$(foreach t,$(DOCKER_TESTS) $(DOCKER_TOOLS), \
		$(eval .PHONY: docker-$t@$i) \
		$(eval docker-$t@$i: docker-image-$i docker-run-$t@$i) \
	) \
	$(foreach t,$(DOCKER_TESTS), \
		$(eval docker-all-tests: docker-$t@$i) \
		$(eval docker-$t: docker-$t@$i) \
	) \
)

docker:
	@echo 'Build QEMU and run tests inside Docker containers'
	@echo
	@echo 'Available targets:'
	@echo
	@echo '    docker:              Print this help.'
	@echo '    docker-all-tests:    Run all image/test combinations.'
	@echo '    docker-TEST:         Run TEST on all image combinations.'
	@echo '    docker-clean:        Kill and remove residual docker testing containers.'
	@echo '    docker-TEST@IMAGE:   Run "TEST" in container "IMAGE".'
	@echo '                         Note: "TEST" is one of the listed test name,'
	@echo '                         or a script name under $$QEMU_SRC/tests/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)'
ifneq ($(DOCKER_USER_IMAGES),)
	@echo
	@echo 'Available linux-user images (docker-binfmt-image-debian-%):'
	@echo '    $(DOCKER_USER_IMAGES)'
endif
	@echo
	@echo 'Available tests:'
	@echo '    $(DOCKER_TESTS)'
	@echo
	@echo 'Available tools:'
	@echo '    $(DOCKER_TOOLS)'
	@echo
	@echo 'Special variables:'
	@echo '    TARGET_LIST=a,b,c    Override target list in builds.'
	@echo '    EXTRA_CONFIGURE_OPTS="..."'
	@echo '                         Extra configure options.'
	@echo '    IMAGES="a b c ..":   Filters which images to build or run.'
	@echo '    TESTS="x y z .."     Filters which tests to run (for docker-test).'
	@echo '    J=[0..9]*            Overrides the -jN parameter for make commands'
	@echo '                         (default is 1)'
	@echo '    DEBUG=1              Stop and drop to shell in the created container'
	@echo '                         before running the command.'
	@echo '    NETWORK=1            Enable virtual network interface with default backend.'
	@echo '    NETWORK=$$BACKEND     Enable virtual network interface with $$BACKEND.'
	@echo '    NOUSER               Define to disable adding current user to containers passwd.'
	@echo '    NOCACHE=1            Ignore cache when build images.'
	@echo '    EXECUTABLE=<path>    Include executable in image.'
	@echo '    EXTRA_FILES="<path> [... <path>]"'
	@echo '                         Include extra files in image.'

# 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="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 "$(TEST)"; \
		then echo "Invalid target $(IMAGE)/$(TEST)"; exit 1; \
	fi
	$(if $(EXECUTABLE),						\
		$(call quiet-command,					\
			$(DOCKER_SCRIPT) update 			\
			$(IMAGE) $(EXECUTABLE),				\
			"  COPYING $(EXECUTABLE) to $(IMAGE)"))
	$(call quiet-command,						\
		$(DOCKER_SCRIPT) run 					\
			$(if $(NOUSER),,-u $(shell id -u)) 		\
			--security-opt seccomp=unconfined		\
			$(if $V,,--rm) 					\
			$(if $(DEBUG),-ti,)				\
			$(if $(NETWORK),$(if $(subst $(NETWORK),,1),--net=$(NETWORK)),--net=none) \
			-e TARGET_LIST=$(subst $(SPACE),$(COMMA),$(TARGET_LIST))	\
			-e EXTRA_CONFIGURE_OPTS="$(EXTRA_CONFIGURE_OPTS)" \
			-e V=$V -e J=$J -e DEBUG=$(DEBUG)		\
			-e SHOW_ENV=$(SHOW_ENV) 			\
			$(if $(NOUSER),,				\
				-e CCACHE_DIR=/var/tmp/ccache 		\
				-v $(DOCKER_CCACHE_DIR):/var/tmp/ccache:z \
			)						\
			-v $$(readlink -e $(DOCKER_SRC_COPY)):/var/tmp/qemu:z$(COMMA)ro \
			$(IMAGE) 					\
			/var/tmp/qemu/run 				\
			$(TEST), "  RUN $(TEST) in ${IMAGE}")
	$(call quiet-command, rm -r $(DOCKER_SRC_COPY), \
		"  CLEANUP $(DOCKER_SRC_COPY)")

# Run targets:
#
# Of the form docker-TEST-FOO@IMAGE-BAR which will then be expanded into a call to "make docker-run"
docker-run-%: CMD = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\1/')
docker-run-%: IMAGE = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\2/')
docker-run-%:
	@$(MAKE) docker-run TEST=$(CMD) IMAGE=qemu:$(IMAGE)

docker-clean:
	$(call quiet-command, $(DOCKER_SCRIPT) clean)
