###############################################################################
#
# Makefile for LXR firmware image
# Author: Patrick Dowling
#
# This makefile uses the subdirectory makefiles to build
# - cortex firmware image
# - AVR firmware image
# - FirmwareImageBuilder tool
# - Binary firmware image
#
# For the cross-platform builds, the necessary compilers (ARM, AVR) must either
# be in the path, or the installation directories can be specified using
#  ARM_TOOLKIT_ROOT
# and
#  AVR_TOOLKIT_ROOT
#
# TODO(pld) Additional build options can be specified using environment variables
#  DESTDIR : where final binary image is written
#  FIRMWARE : name of final binary image
#
###############################################################################

ifdef VERBOSE
AT :=
else
AT := @
endif

ARM_PATH=./mainboard/LxrStm32/
AVR_PATH=./front/LxrAvr/
BINPATH=./tools/bin/
DESTDIR?="./firmware\ image"/

ARM_BINARY=$(ARM_PATH)LxrStm32.bin
AVR_BINARY=$(AVR_PATH)LxrAvr.bin
FIB=$(BINPATH)FirmwareImageBuilder
FIRMWARE?=FIRMWARE.BIN
IMAGE?="$(DESTDIR)$(FIRMWARE)"
JOBS?=-j3

.PHONY: all
all:
	@echo "Valid targets are:"
	@echo " clean : clean subdirectories"
	@echo " firmware : build firmware"

.PHONY: clean
clean:
	$(AT)make -C tools/FirmwareImageBuilder clean
	$(AT)make -C $(AVR_PATH) clean
	$(AT)make -C $(ARM_PATH) clean
	$(AT)$(RM) $(IMAGE)

.PHONY: firmware
firmware: $(IMAGE)

.PHONY: lxr-docker-builder
lxr-docker-builder:
	docker build -t lxr-docker-builder .

.PHONY: firmware-docker
firmware-docker: lxr-docker-builder
	docker run -v ${PWD}:/app lxr-docker-builder:latest make firmware

$(IMAGE): $(ARM_BINARY) $(AVR_BINARY) $(FIB)
	@echo "Building final firmware image $@..."
	$(AT)$(FIB) $(ARM_BINARY) $(AVR_BINARY) "$@"

$(FIB):
	@echo "** Building $@..."
	$(AT)make -C tools/FirmwareImageBuilder exe

$(AVR_BINARY):
	@echo "** Building $@..."
	$(AT)make $(JOBS) -C $(AVR_PATH) avr

$(ARM_BINARY):
	@echo "** Building $@..."
	$(AT)make $(JOBS) -C $(ARM_PATH) stm32