IMAGE               ?= fpc-unix
REGISTRY            ?= codeberg.org/lyda
FPC_VERSION         ?= 3.2.2
TAG                 ?= $(FPC_VERSION)

FREEBSD_VERSION ?= 15.0-RELEASE
NETBSD_VERSION  ?= 10.1
OPENBSD_VERSION ?= 7.8

FULL_IMAGE := $(REGISTRY)/$(IMAGE):$(TAG)
BUILD_ARGS := \
    --build-arg FPC_VERSION=$(FPC_VERSION) \
    --build-arg FREEBSD_VERSION=$(FREEBSD_VERSION) \
    --build-arg NETBSD_VERSION=$(NETBSD_VERSION) \
    --build-arg OPENBSD_VERSION=$(OPENBSD_VERSION)

.PHONY: help build push test clean

help:
	@echo "Targets:"
	@echo "  build   Build the image locally"
	@echo "  push    Build and push to $(REGISTRY)"
	@echo "  test    Smoke-test cross-compiler targets"
	@echo "  clean   Remove the local image"
	@echo ""
	@echo "Variables:"
	@echo "  FPC_VERSION=$(FPC_VERSION)"
	@echo "  FREEBSD_VERSION=$(FREEBSD_VERSION)  NETBSD_VERSION=$(NETBSD_VERSION)  OPENBSD_VERSION=$(OPENBSD_VERSION)"
	@echo "  REGISTRY=$(REGISTRY)  IMAGE=$(IMAGE)"

build:
	DOCKER_BUILDKIT=0 docker build $(BUILD_ARGS) -t $(IMAGE):$(TAG) .

push:
	docker build $(BUILD_ARGS) \
		-t $(FULL_IMAGE) \
		-t $(REGISTRY)/$(IMAGE):latest \
		.
	docker push $(FULL_IMAGE)
	docker push $(REGISTRY)/$(IMAGE):latest

test: build
	@echo "=== host ==="
	docker run --rm $(IMAGE):$(TAG) -iV
	@echo ""
	@echo "=== Linux cross targets ==="
	@for t in "aarch64 linux" "arm linux" "i386 linux" "powerpc64 linux" "mipsel linux"; do \
		cpu=$$(echo $$t | cut -d' ' -f1); os=$$(echo $$t | cut -d' ' -f2); \
		printf '  %-14s ' "$$cpu-$$os:"; \
		docker run --rm $(IMAGE):$(TAG) -P$$cpu -T$$os -iTP 2>&1 | tr -d '\n'; echo; \
	done
	@echo ""
	@echo "=== BSD cross targets ==="
	@for t in "x86_64 freebsd" "x86_64 netbsd" "x86_64 openbsd"; do \
		cpu=$$(echo $$t | cut -d' ' -f1); os=$$(echo $$t | cut -d' ' -f2); \
		printf '  %-14s ' "$$cpu-$$os:"; \
		docker run --rm $(IMAGE):$(TAG) -P$$cpu -T$$os -iTP 2>&1 | tr -d '\n'; echo; \
	done
	@echo ""
	@echo "=== DOS cross targets ==="
	@for t in "i386 go32v2"; do \
		cpu=$$(echo $$t | cut -d' ' -f1); os=$$(echo $$t | cut -d' ' -f2); \
		printf '  %-14s ' "$$cpu-$$os:"; \
		docker run --rm $(IMAGE):$(TAG) -P$$cpu -T$$os -iTP 2>&1 | tr -d '\n'; echo; \
	done

clean:
	docker rmi $(IMAGE):$(TAG) 2>/dev/null || true
