.PHONY: all check check-locks clean fetch image run

MOUSE_ARCH_INPUT := $(MOUSE_ARCH)
MOUSE_ARCH_RESOLVED := $(shell \
	MOUSE_ARCH='$(MOUSE_ARCH_INPUT)' \
	MOUSE_BUILDER_PLATFORM='$(MOUSE_BUILDER_PLATFORM)' \
	sh -c '. ./scripts/mouse-arch.sh; printf "%s" "$$MOUSE_ARCH"')
ifeq ($(MOUSE_ARCH_RESOLVED),)
$(error unable to resolve MOUSE_ARCH)
endif
override MOUSE_ARCH := $(MOUSE_ARCH_RESOLVED)

MOUSE_BUILD_DIR ?= $(CURDIR)/build/$(MOUSE_ARCH)
MOUSE_SOURCE_DIR ?= $(CURDIR)/build/sources
MOUSE_PORTS_DIR ?= $(CURDIR)/../ports
MOUSE_BUILDER_CPUS ?= 8
MOUSE_BUILDER_MEMORY ?= 8G
MOUSE_BUILD_JOBS ?= 8
MOUSE_BOOT_MODE ?= firmware
MOUSE_NETWORK ?= 1
MOUSE_GRAPHICAL ?= 1

BUILD_ENV = \
	MOUSE_ARCH="$(MOUSE_ARCH)" \
	MOUSE_BUILD_DIR="$(MOUSE_BUILD_DIR)" \
	MOUSE_SOURCE_DIR="$(MOUSE_SOURCE_DIR)" \
	MOUSE_PORTS_DIR="$(MOUSE_PORTS_DIR)" \
	MOUSE_BUILDER_PLATFORM="$(MOUSE_BUILDER_PLATFORM)" \
	MOUSE_BUILDER_CPUS="$(MOUSE_BUILDER_CPUS)" \
	MOUSE_BUILDER_MEMORY="$(MOUSE_BUILDER_MEMORY)" \
	MOUSE_BUILD_JOBS="$(MOUSE_BUILD_JOBS)"

CHECKS = admin boot firmware world service-integration storage btrfs network \
	multi-user toolchain

all: image

check-locks:
	./scripts/check-source-locks.sh

fetch: check-locks
	MOUSE_SOURCE_DIR="$(MOUSE_SOURCE_DIR)" ./scripts/fetch-sources.sh

image: check-locks
	$(BUILD_ENV) ./scripts/build-in-container.sh

run:
	MOUSE_ARCH="$(MOUSE_ARCH)" \
	MOUSE_BUILD_DIR="$(MOUSE_BUILD_DIR)" \
	MOUSE_BOOT_MODE="$(MOUSE_BOOT_MODE)" \
	MOUSE_NETWORK="$(MOUSE_NETWORK)" \
	MOUSE_GRAPHICAL="$(MOUSE_GRAPHICAL)" \
	./scripts/run-qemu.sh

check: check-locks
	$(BUILD_ENV) MOUSE_INCLUDE_TEST_FIXTURES=1 \
	./scripts/build-in-container.sh
	@set -e; for check in $(CHECKS); do \
		MOUSE_ARCH="$(MOUSE_ARCH)" \
		MOUSE_BUILD_DIR="$(MOUSE_BUILD_DIR)" \
			./tests/acceptance/$$check.sh; \
	done

clean:
	rm -rf build/*
	cd base/cheesed; cargo clean
