.EXPORT_ALL_VARIABLES:

TARGET ?= lattice

COMMON_MAKEFILES_DIR ?= ./makefiles
include $(COMMON_MAKEFILES_DIR)/make.env
CFG_FILE ?= $(CONFIG_BR2_PACKAGE_LATTICE_CFG_FILE)
ROUTER_CFG_FILE = $(subst -bridge,,$(CFG_FILE))
BRIDGE_CFG_FILE = $(subst .xml,-bridge.xml,$(ROUTER_CFG_FILE))
PSEUDO_BRIDGE_CFG_FILE = $(subst .xml,-pseudobridge.xml,$(ROUTER_CFG_FILE))
$(TARGET)_CFLAGS = $(addprefix -I,$(shell find . -type d)) \
			$(addprefix -I,$(shell find $(PUBLIC_INCLUDE_DIR) -type d)) \
			$(LATTICE_EXTERNAL_CFLAGS)
ifeq ($(CONFIG_BR2_PACKAGE_LATTICE_SHM_SUPPORT),y)
$(TARGET)_CFLAGS  += -DLATTICE_SHM_SUPPORT
endif
$(TARGET)_LDLIBS  = -lrt -litc_rpc -lpthread -lnetsnmp $(LATTICE_EXTERNAL_LDLIBS)
ifneq (,$(filter arm64 aarch64,$(ARCH)))
$(TARGET)_CFLAGS  += -DARM64
$(TARGET)_LDLIBS += $(if $(CONFIG_BR2_PACKAGE_BCMASTRA_SUPPORTED),-lbcm_astra)
endif

-include $(PUBLIC_INCLUDE_DIR)/$(TARGET).inc
ifeq ($(LATTICE_MOCA_INCLUDED),y)
$(TARGET)_LDLIBS  += -lmocactl
endif

# Objects
# ------------------------------------------------------------------------------
-include $(BUILD_DIR)/makefile.objs

# Source
# ------------------------------------------------------------------------------
BUILD_VERSION_FILE=$(PUBLIC_INCLUDE_DIR)/core/LatticeFrameworkVersion.h
-include $(BUILD_DIR)/makefile.version

BUILD_INFO_FILE=$(BUILD_DIR)/core/LatticeFrameworkBuildInfo.c
-include $(COMMON_MAKEFILES_DIR)/make.info

BUILD_MODULE_INC=$(BUILD_DIR)/module.inc

SRC:=$(patsubst %, %.c, $(basename $(OBJS)))

OUTPUT_CFG_FILE=lattice-config.xml
OUTPUT_ROUTER_CFG_FILE=lattice-config-router.xml
OUTPUT_BRIDGE_CFG_FILE=lattice-config-bridge.xml
OUTPUT_PSEUDO_BRIDGE_CFG_FILE=lattice-config-pseudobridge.xml

# Commands
# ------------------------------------------------------------------------------
all: clean prepare config build stage release install

untar: untar_

patch: patch_

prepare: untar patch

config: config_ create_build_version create_build_info
	if [ -f $(BUILD_DIR)/config/$(CFG_FILE) ]; then \
		ln -s $(BUILD_DIR)/config/$(CFG_FILE) $(CFG_FILE); \
		$(BUILD_DIR)/buildflaggen.pl $(BUILD_DIR)/config/$(CFG_FILE) $(LINUX_DIR)/.config; \
		sed -i -e 's/CFLAGS/$$(TARGET)_CFLAGS/g' $(BUILD_MODULE_INC); \
		cat $(BUILD_MODULE_INC) makefile.env > $(PUBLIC_INCLUDE_DIR)/$(TARGET).inc; \
	else \
		echo "No Lattice config file found."; \
		exit 1; \
	fi;

build: build_

stage: stage_
	$(INSTALL) -D -m 0755 $(PUBLIC_INCLUDE_DIR)/$(TARGET).inc $(STAGING_DIR)/usr/include

release: release_
	cp -L config/$(CFG_FILE) $(RELEASE_DIR)
	if [ $(CONFIG_BR2_PACKAGE_OPENBFC_PLATFORM) = "GW" ]; then \
		cp -L config/$(ROUTER_CFG_FILE) $(RELEASE_DIR); \
		cp -L config/$(BRIDGE_CFG_FILE) $(RELEASE_DIR); \
		cp -L config/$(PSEUDO_BRIDGE_CFG_FILE) $(RELEASE_DIR); \
	fi;
#	cp -L unittest/python/*.py $(RELEASE_DIR)
#	cp -L unittest/python-$(BRCM_CHIP).tgz $(RELEASE_DIR)/python.tgz

install: install_
	mkdir -p $(INSTALL_DIR)/usr/local/etc/$(TARGET)
	$(INSTALL) -m 0644 $(CFG_FILE) $(INSTALL_DIR)/usr/local/etc/$(TARGET)/$(OUTPUT_CFG_FILE)
	if [ $(CONFIG_BR2_PACKAGE_OPENBFC_PLATFORM) = "GW" ]; then \
		$(INSTALL) -m 0644 $(ROUTER_CFG_FILE) $(INSTALL_DIR)/usr/local/etc/$(TARGET)/$(OUTPUT_ROUTER_CFG_FILE); \
		$(INSTALL) -m 0644 $(BRIDGE_CFG_FILE) $(INSTALL_DIR)/usr/local/etc/$(TARGET)/$(OUTPUT_BRIDGE_CFG_FILE); \
		$(INSTALL) -m 0644 $(PSEUDO_BRIDGE_CFG_FILE) $(INSTALL_DIR)/usr/local/etc/$(TARGET)/$(OUTPUT_PSEUDO_BRIDGE_CFG_FILE); \
	fi
#	mkdir -p $(INSTALL_DIR)/usr/local/etc/python
#	$(INSTALL) -m 0755 *.py $(INSTALL_DIR)/usr/local/etc/python

clean: clean_
	rm -f $(BUILD_VERSION_FILE)
	rm -f $(BUILD_INFO_FILE)
	rm -f $(BUILD_MODULE_INC)
	rm -f $(CFG_FILE)
	rm -f $(ROUTER_CFG_FILE)
	rm -f $(BRIDGE_CFG_FILE)
	rm -f $(PSEUDO_BRIDGE_CFG_FILE)

distclean: distclean_

# Common Makefiles
# ------------------------------------------------------------------------------
include $(COMMON_MAKEFILES_DIR)/make.lib
