#
# Utility for building L4 contrib packages
#
# Variables that steer the behaviour of this makefile:
#
# TARGET - name of target
# PKGS   - list of L4 packages to visit in order to create
#          the target
#

ifeq ($(filter-out $(SPECS),x86_32),)
	L4_BUILD_ARCH := x86_586
endif

ifeq ($(filter-out $(SPECS),x86_64),)
	L4_BUILD_ARCH := amd_k9
endif

ifeq ($(filter-out $(SPECS),arm_v7a),)
	L4_BUILD_ARCH := arm_armv7a
endif

ifeq ($(filter-out $(SPECS),arm_v6),)
	L4_BUILD_ARCH := arm_armv6
endif

ifeq ($(filter-out $(SPECS),arm_v8),)
	L4_BUILD_ARCH := arm64_armv8a
endif


ifeq ($(L4_BUILD_ARCH),)
$(error L4_BUILD_ARCH undefined, architecture not supported)
endif

L4_BUILD_OPT = CROSS_COMPILE=$(CROSS_DEV_PREFIX)
L4_PKG_DIR  := $(call select_from_ports,foc)/src/kernel/foc/l4/pkg
PKG_TAGS     = $(addsuffix .tag,$(addsuffix .$(BOARD),$(PKGS)))

BUILD_OUTPUT_FILTER = 2>&1 | sed "s~^~      [$*]  ~"

#
# Execute the rules in this file only at the second build stage when we know
# about the complete build settings, e.g., 'CROSS_DEV_PREFIX'.
#
ifeq ($(called_from_lib_mk),yes)
all: $(PKG_TAGS)
endif

#
# We preserve the order of processing 'l4/pkg/' directories because of
# inter-package dependencies. However, within each directory, make is working
# in parallel.
#
.NOTPARALLEL: $(PKG_TAGS)

%.$(BOARD).tag:
	$(VERBOSE_MK) set -o pipefail; \
	              $(MAKE) $(VERBOSE_DIR) O=$(L4_BUILD_DIR) -C $(L4_PKG_DIR)/$* \
	                      "$(L4_BUILD_OPT)" WARNINGS=$(WARNINGS) $(BUILD_OUTPUT_FILTER)
	$(VERBOSE)mkdir -p $(dir $@) && touch $@

