# This makefile generates the docker files for Yocto builds.
# The containers for the current architecture are the one built using make all.
# To build containers for a different architecture, you need to call make for
# the image you want explicitely.
# The containers are named this way:
# YOCTOVERSION-TARGET for x86_64 hosts
# YOCTOVERSION-TARGET-arm64v8 for arm64 hosts
# For example you can build an arm64 container with the following command:
# make yocto/kirkstone-qemuarm64-arm64v8

# Yocto versions we are currently using.
YOCTO_VERSION = kirkstone

# Yocto BSPs we want to build for.
YOCTO_TARGETS = qemuarm64 qemuarm qemux86-64

# Supported container architectures.
YOCTO_ARCHS = amd64 arm64v8

# Architecture we want to use in gitlab CI (depends on runners arch).
CI_ARCH = arm64v8

define GEN_DOCKER
# Make all is generating architecture we use in the CI.
ifeq ($(CI_ARCH),$(3))
CONTAINERS += yocto/$(1)-$(2)$(4)
else
CONTAINERS_EXTRA += yocto/$(1)-$(2)$(4)
endif

.INTERMEDIATE: yocto/$(1)-$(2)$(4).dockerfile

yocto/$(1)-$(2)$(4).dockerfile: yocto/yocto.dockerfile.in
	@cat $$< | \
	    sed -e "s,##YOCTOVERSION##,$(1),g" | \
	    sed -e "s,##YOCTOTARGET##,$(2),g" | \
	    sed -e "s,##DOCKERPLAT##,$(3)/,g" > $$@

endef

$(eval $(foreach version,$(YOCTO_VERSION),\
       $(foreach target,$(YOCTO_TARGETS),\
       $(foreach arch,$(YOCTO_ARCHS),\
       $(call GEN_DOCKER,$(version),$(target),$(arch),$(if $(filter amd64,$(arch)),,-$(arch)))))))
