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

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

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)

# General rule for building docker images.
docker-image-%: $(DOCKER_FILES_DIR)/%.docker
	  $(call quiet-command,			\
		DOCKER_BUILDKIT=1 $(RUNC) build		\
		$(if $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 $V,,> /dev/null),\
		"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) 					\
			$(if $(DEB_URL),DEB_URL=$(DEB_URL),)			\
			$(DOCKER_SCRIPT) build -t qemu/debian-$* -f $< 		\
			$(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"))

# 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-mipsel-cross debian-mips64el-cross
DOCKER_PARTIAL_IMAGES += debian-ppc64el-cross
DOCKER_PARTIAL_IMAGES += debian-s390x-cross
DOCKER_PARTIAL_IMAGES += fedora
endif

# The native build should never use the registry
docker-image-debian-native: DOCKER_REGISTRY=

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

debian-toolchain-run = \
	$(if $(NOCACHE), 						\
		$(call quiet-command,					\
			$(DOCKER_SCRIPT) build -t qemu/$1 -f $< 	\
			$(if $V,,--quiet) --no-cache 			\
			--registry $(DOCKER_REGISTRY) --extra-files	\
			$(DOCKER_FILES_DIR)/$1.d/build-toolchain.sh,	\
			"BUILD", $1),				        \
		$(call quiet-command,					\
			$(DOCKER_SCRIPT) fetch $(if $V,,--quiet)	\
				qemu/$1 $(DOCKER_REGISTRY),		\
			"FETCH", $1)					\
		$(call quiet-command,					\
			$(DOCKER_SCRIPT) update $(if $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, $@)

docker-image-debian-nios2-cross: $(DOCKER_FILES_DIR)/debian-toolchain.docker \
    $(DOCKER_FILES_DIR)/debian-nios2-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-alpha-cross
DOCKER_PARTIAL_IMAGES += debian-powerpc-test-cross
DOCKER_PARTIAL_IMAGES += debian-hppa-cross
DOCKER_PARTIAL_IMAGES += debian-loongarch-cross
DOCKER_PARTIAL_IMAGES += debian-m68k-cross debian-mips64-cross
DOCKER_PARTIAL_IMAGES += debian-microblaze-cross
DOCKER_PARTIAL_IMAGES += debian-mips-cross
DOCKER_PARTIAL_IMAGES += debian-nios2-cross
DOCKER_PARTIAL_IMAGES += debian-riscv64-test-cross
DOCKER_PARTIAL_IMAGES += debian-sh4-cross debian-sparc64-cross
DOCKER_PARTIAL_IMAGES += debian-xtensa-cross
DOCKER_PARTIAL_IMAGES += fedora-cris-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 Docker or Podman 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 '    EXECUTABLE=<path>    Include executable in image.'
	@echo '    EXTRA_FILES="<path> [... <path>]"'
	@echo '                         Include extra files in image.'
	@echo '    ENGINE=auto/docker/podman'
	@echo '                         Specify which container engine to run.'
	@echo '    REGISTRY=url         Cache builds from registry (default:$(DOCKER_REGISTRY))'

docker-help: docker

# Use a global constant ccache directory to speed up repetitive builds
DOCKER_CCACHE_DIR := $$HOME/.cache/qemu-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_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),,-u $(UID)) 			\
			--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 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)")

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

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