# Makefile for Docker tests

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

NULL :=
SPACE := $(NULL) #
COMMA := ,

HOST_ARCH = $(shell uname -m)
USER = $(if $(NOUSER),,$(shell id -un))
UID = $(if $(NOUSER),,$(shell id -u))

DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles
ifeq ($(HOST_ARCH),x86_64)
DOCKER_DEFAULT_REGISTRY := registry.gitlab.com/qemu-project/qemu
endif
DOCKER_REGISTRY := $(if $(REGISTRY),$(REGISTRY),$(DOCKER_DEFAULT_REGISTRY))

CONTAINER_ENGINE = auto
DOCKER_SCRIPT=$(SRC_PATH)/tests/docker/docker.py --engine $(CONTAINER_ENGINE)
RUNC ?= $(shell $(DOCKER_SCRIPT) probe)

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

DOCKER_V ?= $(V)

.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)

# General rule for building docker images.
docker-image-%: $(DOCKER_FILES_DIR)/%.docker
	  $(call quiet-command,			\
		DOCKER_BUILDKIT=1 $(RUNC) build		\
		$(if $(DOCKER_V),,--quiet)		\
		$(if $(NOCACHE),--no-cache,		\
			$(if $(DOCKER_REGISTRY),--cache-from $(DOCKER_REGISTRY)/qemu/$*)) \
		--build-arg BUILDKIT_INLINE_CACHE=1 	\
		$(if $(NOUSER),,			\
			--build-arg USER=$(USER)	\
			--build-arg UID=$(UID))		\
		-t qemu/$* - < $< $(if $(DOCKER_V),,> /dev/null),\
		"BUILD", $*)

# General rule for inspecting registry images.
docker-verify-%: $(DOCKER_FILES_DIR)/%.docker
	  $(call quiet-command,			\
		skopeo inspect 			\
			--format '{{.Created}}' \
			docker://$(DOCKER_REGISTRY)/qemu/$*	\
		$(if $V,,> /dev/null),\
		"VERIFY", $*)

# 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) 					\
			$(if $(DEB_URL),DEB_URL=$(DEB_URL),)			\
			$(DOCKER_SCRIPT) build -t qemu/debian-$* -f $< 		\
			$(if $(DOCKER_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"))

# Special case cross-compiling x86_64 on non-x86_64 systems.
ifeq ($(HOST_ARCH),x86_64)
DOCKER_PARTIAL_IMAGES += debian-amd64-cross
else
DOCKER_PARTIAL_IMAGES += debian-amd64
endif

# For non-x86 hosts not all cross-compilers have been packaged
ifneq ($(HOST_ARCH),x86_64)
DOCKER_PARTIAL_IMAGES += debian-ppc64el-cross
DOCKER_PARTIAL_IMAGES += debian-s390x-cross
DOCKER_PARTIAL_IMAGES += fedora
endif

# alpine has no adduser
docker-image-alpine: NOUSER=1

debian-toolchain-run = \
	$(if $(NOCACHE)$(NOFETCH),					\
		$(call quiet-command,					\
			$(DOCKER_SCRIPT) build -t qemu/$1 -f $< 	\
			$(if $(DOCKER_V),,--quiet) 			\
			$(if $(NOCACHE),--no-cache)			\
			--registry $(DOCKER_REGISTRY) --extra-files	\
			$(DOCKER_FILES_DIR)/$1.d/build-toolchain.sh,	\
			"BUILD", $1),				        \
		$(call quiet-command,					\
			$(DOCKER_SCRIPT) fetch $(if $(DOCKER_V),,--quiet) \
				qemu/$1 $(DOCKER_REGISTRY),		\
			"FETCH", $1)					\
		$(call quiet-command,					\
			$(DOCKER_SCRIPT) update $(if $(DOCKER_V),,--quiet) \
				qemu/$1 				\
				$(if $(NOUSER),,--add-current-user) 	\
			"PREPARE", $1))
debian-toolchain = $(call debian-toolchain-run,$(patsubst docker-image-%,%,$1))

docker-image-debian-microblaze-cross: $(DOCKER_FILES_DIR)/debian-toolchain.docker \
    $(DOCKER_FILES_DIR)/debian-microblaze-cross.d/build-toolchain.sh
	$(call debian-toolchain, $@)

# These images may be good enough for building tests but not for test builds
DOCKER_PARTIAL_IMAGES += debian-microblaze-cross
DOCKER_PARTIAL_IMAGES += debian-xtensa-cross

# images that are only used to build other images
DOCKER_VIRTUAL_IMAGES := debian-bootstrap debian-toolchain

__IMAGES := $(sort $(filter-out $(DOCKER_VIRTUAL_IMAGES), $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker)))))
DOCKER_IMAGES := $(if $(IMAGES), $(filter $(IMAGES), $(__IMAGES)), $(__IMAGES))

__TESTS := $(notdir $(shell find $(SRC_PATH)/tests/docker/ -name 'test-*' -type f))
DOCKER_TESTS := $(if $(TESTS), $(filter $(TESTS), $(__TESTS)), $(__TESTS))

# Expand all the pre-requistes for each docker image and test combination
$(foreach i,$(filter-out $(DOCKER_PARTIAL_IMAGES),$(DOCKER_IMAGES)), \
	$(foreach t,$(DOCKER_TESTS), \
		$(eval .PHONY: docker-$t@$i) \
		$(eval docker-$t@$i: docker-image-$i; @$(MAKE) docker-run TEST=$t IMAGE=qemu/$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 $(RUNC) 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)'
	@echo
	@echo 'Available tests:'
	@echo '    $(DOCKER_TESTS)'
	@echo
	@echo 'Special variables:'
	@echo '    TARGET_LIST=a,b,c    Override target list in builds.'
	@echo '    EXTRA_CONFIGURE_OPTS="..."'
	@echo '                         Extra configure options.'
	@echo '    TEST_COMMAND="..."   Override the default `make check` target.'
	@echo '    IMAGES="a b c ..":   Restrict available images to subset.'
	@echo '    TESTS="x y z .."     Restrict available tests to subset.'
	@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=1             Define to disable adding current user to containers passwd.'
	@echo '    NOCACHE=1            Ignore cache when build images.'
	@echo '    NOFETCH=1            Do not fetch from the registry.'
	@echo '    EXECUTABLE=<path>    Include executable in image.'
	@echo '    EXTRA_FILES="<path> [... <path>]"'
	@echo '                         Include extra files in image.'
	@echo '    REGISTRY=url         Cache builds from registry (default:$(DOCKER_REGISTRY))'

docker-help: docker

# Where QEMU caches build artefacts
DOCKER_QEMU_CACHE_DIR := $$HOME/.cache/qemu
# Use a global constant ccache directory to speed up repetitive builds
DOCKER_QEMU_CCACHE_DIR := DOCKER_QEMU_CACHE_DIR/docker-ccache

# 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 also ensure the image is up to date.
#
# 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_QEMU_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 $(EXECUTABLE),		\
			"  COPYING $(EXECUTABLE) to $(IMAGE)"))
	$(call quiet-command,						\
		$(RUNC) run 						\
			--rm						\
			$(if $(NOUSER),,				\
				$(if $(filter docker,$(RUNC)),		\
					-u $(UID),			\
					--userns keep-id		\
				)					\
			) 						\
			--security-opt seccomp=unconfined		\
			$(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 TEST_COMMAND="$(TEST_COMMAND)" 		\
			-e V=$V						\
			-e DOCKER_V=$(DOCKER_V)				\
			-e J=$J						\
			-e DEBUG=$(DEBUG)				\
			-e SHOW_ENV=$(SHOW_ENV) 			\
			$(if $(NOUSER),,				\
				-v $(DOCKER_QEMU_CACHE_DIR):$(DOCKER_QEMU_CACHE_DIR) 	\
				-e CCACHE_DIR=$(DOCKER_QEMU_CCACHE_DIR)	\
			)						\
			-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)")

docker-image: ${DOCKER_IMAGES:%=docker-image-%}

docker-verify: ${DOCKER_IMAGES:%=docker-verify-%}

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

# Overrides
docker-test-rust%: NETWORK=1
