export BR2_EXTERNAL ?= $(CURDIR)
export PATH         := $(CURDIR)/bin:$(PATH)

ARCH ?= $(shell uname -m)
O    ?= output

# If a relative output path is specified, we have to translate it to
# an absolute one before handing over control to Buildroot, which will
# otherwise treat it as relative to ./buildroot.
override O := $(if $(filter /%,$O),$O,$(CURDIR)/$O)

config := $(O)/.config
bmake   = $(MAKE) -C buildroot O=$(O) $1


all: $(config) buildroot/Makefile
	@+$(call bmake,$@)

check dep coverity:
	@make -C src $@

$(config):
	@+$(call bmake,list-defconfigs)
	@echo "\e[7mERROR: No configuration selected.\e[0m"
	@echo "Please choose a configuration from the list above by running"
	@echo "'make <board>_defconfig' before building an image."
	@exit 1

%: | buildroot/Makefile
	@+$(call bmake,$@)

legal-info: | buildroot/Makefile
	$(call bmake,legal-info LINUX_LICENSE_FILES=COPYING)

cyclonedx: | buildroot/Makefile
	@echo "Generating package information..."
	@$(MAKE) --no-print-directory -C buildroot O=$(O) show-info | ./buildroot/utils/generate-cyclonedx > $(O)/cyclonedx-sbom.json
	@echo "CycloneDX SBOM generated: $(O)/cyclonedx-sbom.json"

# Workaround, see board/x86_64/board.mk
test:
	@+$(call bmake,$@)

buildroot/Makefile:
	@git submodule update --init

.PHONY: all check coverity dep test cyclonedx
