.EXPORT_ALL_VARIABLES:

COMMON_MAKEFILES_DIR ?= ./makefiles
include $(COMMON_MAKEFILES_DIR)/make.env

TARGET ?= dtb

TARGET_CROSS ?= $(CROSS_COMPILE)
BINARIES_DIR ?= $(INSTALL_DIR)

DTB_FILELIST:=$(patsubst %.dts,%.dtb,$(wildcard $(LINUX_DIR)/arch/$(ARCH)/boot/dts/rg.*.dts))
DTB_FILELIST+=$(patsubst %.dts,%.dtb,$(wildcard $(LINUX_DIR)/arch/$(ARCH)/boot/dts/bcm*.dts))

ifeq ($(ARCH),arm)
DATA_ONLY_REF_BOARDS=rg.$(BRCM_CHIP)*cm*.dtb rg.$(BRCM_CHIP)-park.dtb
GATEWAY_REF_BOARDS=rg.$(BRCM_CHIP)*wvg{,2}.dtb rg.$(BRCM_CHIP)-park.dtb
SILICON_VERIFICATION_BOARDS=rg.$(BRCM_CHIP)*sv.dtb rg.$(BRCM_CHIP)*sdvt.dtb rg.$(BRCM_CHIP)*slv.dtb rg.$(BRCM_CHIP)-park.dtb
CUSTOMER_BOARDS=rg.$(BRCM_CHIP)*xb?.dtb rg.$(BRCM_CHIP)*cbr8.dtb rg.$(BRCM_CHIP)-park.dtb
endif

DT_SELECT = $(HOST_DIR)/sbin/dt_select

# Commands
# ------------------------------------------------------------------------------
all: all_

untar: untar_

patch: patch_

config: config_

prepare: untar patch

build: build_
	$(MAKE) -C $(LINUX_DIR) ARCH=$(ARCH) CROSS_COMPILE=$(TARGET_CROSS) dtbs

stage:

release: release_
ifeq ($(ARCH),arm)
	cp -P $(LINUX_DIR)/arch/$(ARCH)/boot/dts/*$(BRCM_CHIP)*.dtb $(RELEASE_DIR)
	(cd $(RELEASE_DIR) && $(TAR) -czvf $(BRCM_CHIP)_ALL.dtb.tgz *.dtb)
ifneq (,$(findstring D/VCM,$(CONFIG_BR2_PACKAGE_OPENBFC_PLATFORM)))
	$(eval ALT_DTBS=$(shell cd $(LINUX_DIR)/arch/$(ARCH)/boot/dts; ls $(DATA_ONLY_REF_BOARDS) 2>/dev/null))
else ifneq (,$(findstring CERT,$(CONFIG_BR2_PACKAGE_OPENBFC_PLATFORM)))
	$(eval ALT_DTBS=$(shell cd $(LINUX_DIR)/arch/$(ARCH)/boot/dts; ls $(DATA_ONLY_REF_BOARDS) $(GATEWAY_REF_BOARDS) 2>/dev/null))
	$(eval ALT_DTBS=$(filter-out rg.$(BRCM_CHIP)-park%,$(ALT_DTBS)))
else
	$(eval ALT_DTBS=$(shell cd $(LINUX_DIR)/arch/$(ARCH)/boot/dts; ls $(GATEWAY_REF_BOARDS) 2>/dev/null))
endif
	(cd $(RELEASE_DIR) && $(TAR) -czvf $(BRCM_CHIP).dtb.tgz $(ALT_DTBS))
else
ifneq ("none",$(CONFIG_BR2_PACKAGE_OPENBFC_BRCM_CUSTOM_DTS_LIST))
	$(eval DTS_LIST=$(patsubst "%,%, \
		$(patsubst %",%,$(CONFIG_BR2_PACKAGE_OPENBFC_BRCM_CUSTOM_DTS_LIST))))
	@echo "DTB Using Custom DTS List = $(DTS_LIST)"
	$(eval DTB_LIST=$(DTS_LIST:.dts=.dtb))
else ifneq ("none",$(CONFIG_BR2_PACKAGE_OPENBFC_BRCM_CHIP_ID_LIST))
	$(eval CHIP_ID_LIST:=$(subst $\",,$(CONFIG_BR2_PACKAGE_OPENBFC_BRCM_CHIP_ID_LIST)))
	@echo "DTB Using CONFIG_BR2_PACKAGE_OPENBFC_BRCM_CHIP_ID_LIST = $(CHIP_ID_LIST)"
	@echo "dt_select=$(DT_SELECT)"
	$(eval DTB_LIST:=$(foreach CHIP_ID,$(CHIP_ID_LIST),$(shell $(DT_SELECT) -i $(CHIP_ID) -b $(LINUX_DIR)/arch/$(ARCH)/boot/dts/broadcom)) )
	@echo "DTB_LIST=[$(DTB_LIST)]"
else
	$(eval DTS_LIST=*.dts)
	$(eval DTB_LIST=$(DTS_LIST:.dts=.dtb))
endif
	cd $(LINUX_DIR)/arch/$(ARCH)/boot/dts/broadcom && \
		TAR_LIST=$$(echo "$(DTB_LIST)"| tr ' ' '\n' | sort -u | xargs) && \
		tar -czvf $(RELEASE_DIR)/$(BRCM_CHIP).dtb.tgz $${TAR_LIST} && \
		(cd $(RELEASE_DIR) && cp -Pf $(BRCM_CHIP).dtb.tgz dtbs.tgz)
endif

install: image
image: image_
ifeq ($(ARCH),arm)
	cp -P *.dtb $(BINARIES_DIR)/.
	cp -P $(BRCM_CHIP)_ALL.dtb.tgz $(BINARIES_DIR)/.
	cp -P $(BRCM_CHIP).dtb.tgz $(BINARIES_DIR)/.
else
	cp -P dtbs.tgz $(BINARIES_DIR)/.
	cp -P $(BRCM_CHIP).dtb.tgz $(BINARIES_DIR)/.
endif

clean: clean_

distclean: distclean_

# Common Makefiles
# ------------------------------------------------------------------------------
COMMON_MAKEFILES_DIR ?= ./makefiles
include $(COMMON_MAKEFILES_DIR)/make.image
