# Central Makefile
#
PLATFORM ?= maple
TOP_DIR=$(shell pwd)
export PLATFORM
export TOP_DIR

ifeq ("$(PLATFORM)", "maple")
    DEVICE=bcm68620
    export DEVICE
else
    $(error Set DEVICE for $(PLATFORM))
endif

MAKE_DIR=$(TOP_DIR)/make
MAKE_DEVICE_DIR=$(MAKE_DIR)/$(DEVICE)
export MAKE_DIR
export MAKE_DEVICE_DIR

include $(MAKE_DIR)/Makefile.initial_config
OUT_DIR          ?= $(TOP_DIR)/build
OUT_DOCS_DIR	 ?= $(OUT_DIR)/doc

# Identify whether it is customer or development build
EMB_MODULE_LIST=$(realpath $(MAKE_DEVICE_DIR)/modules.embedded)
ifeq ("$(EMB_MODULE_LIST)", "")
    RELEASE_BUILD=y
    export RELEASE_BUILD
    USE_LINT=n
    export USE_LINT
    OUT_HOST_DIR 	 ?= $(OUT_DIR)
    COPY_FS_SH		 = $(TOP_DIR)/make/copy_host_fs.sh 
else
    OUT_HOST_DIR 	 ?= $(OUT_DIR)/$(PLATFORM)/host
    OUT_EMBEDDED_DIR ?= $(OUT_DIR)/$(PLATFORM)/embedded
    COPY_FS_SH		 = $(TOP_DIR)/scripts/copy_host_fs.sh 
    export OUT_EMBEDDED_DIR
endif

ifneq ("$(BOARD)", "")
    COPY_HOST_FS_CMD = $(SILENT_BUILD)$(COPY_FS_SH) TOP_DIR=$(TOP_DIR) OUT_HOST_DIR=$(OUT_HOST_DIR)
endif

export OUT_HOST_DIR
export OUT_DOCS_DIR

# List of all modules, all library modules and all application modules
export ALL_MODULES
export ALL_LIB_MODULES
export ALL_APP_MODULES

# Current board
export BOARD

V ?= 0
ifeq (x"$(V)", x"0")
	SILENT = -s
	export SILENT
	SILENT_BUILD=@
endif

ifeq ("$(RELEASE_BUILD)", "y")
all: build_host
else
all: build_host build_embedded
endif
	$(COPY_HOST_FS_CMD)
	@echo --- All done ---    

copy_host_fs:
	$(COPY_HOST_FS_CMD)

ifeq ("$(RELEASE_BUILD)", "y")
clean: clean_host
else
clean: clean_host clean_embedded
endif
	rm -fr $(OUT_DIR)

help_general:
	@echo "make parameters:"
	@echo "   PLATFORM          - platform to perform the build for. The default platform is $$PLATFORM"
	@echo "                       Supported platforms are: maple"
	@echo "   BOARD             - TBD board"
	@echo "   ENABLE_EPON       - Include EPON/10GEPON support. Default =y, unless overwritten in platform configuration"
	@echo "   ENABLE_GPON       - Include GPON support. Default =y, unless overwritten in platform configuration"
	@echo "   ENABLE_XGPON      - Include XGPON support. Default =y, unless overwritten in platform configuration"
	@echo "   V=<output_level>  - =1-verbose command output, =2-makefile debug output"
	@echo "   GEN_OBJTAGS       - Low-level option. OBGTAGS to be passed to code generator"
	@echo "   EXTRA_TYPES       - Low-level option. Space-delimited list of extra types without bcmolt_ prefix"
	@echo "   ENABLE_CLI        - =n-exclude CLI support. Included by default"
	@echo "   ENABLE_LOG        - =n-exclude dev_log support. Included by default"
	@echo "make targets:"
	@echo "   all               - build everything for the PLATFORM. This is the default target"
	@echo "   host              - build PLATFORM's host side"
	@echo "   embedded          - build PLATFORM's embedded side"
	@echo "   clean             - clean everything for the PLATFORM"
	@echo "   clean_host        - clean PLATFORM's host side"
	@echo "   clean_embedded    - clean PLATFORM's embedded side"
	@echo "   docs              - generate reference document in html format"
	@echo "   docs_pdf          - generate reference document in pdf format"
	@echo "   drivers           - generate librdb, ru_gen and hal_generator driver layers"
	@echo "   clean_drivers     - clean librdb, ru_gen and hal_generator"


ifeq ("$(RELEASE_BUILD)", "y")
help: help_general help_host
else
help: help_general help_host help_embedded
endif
	
docs: docs_host
	
docs_host:
	$(SILENT_BUILD)$(MAKE) SUBSYSTEM=host -f $(MAKE_DIR)/Makefile.main $@

docs_pdf: docs
	$(SILENT_BUILD)$(MAKE) -C $(OUT_DOCS_DIR)/latex

docs_clean:
	$(SILENT_BUILD)$(BOLD_PRINT) "Cleaning docs"
	$(SILENT_BUILD)rm -fr $(OUT_DOCS_DIR)

clobber: clean docs_clean

host: build_host
	$(COPY_HOST_FS_CMD)

clean_host:
	$(SILENT_BUILD)rm -fr $(OUT_HOST_DIR)
	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=host -f $(MAKE_DIR)/Makefile.main $@

%_host:
	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=host -f $(MAKE_DIR)/Makefile.main $@

ifneq ("$(RELEASE_BUILD)", "y")
embedded: build_embedded
	$(COPY_HOST_FS_CMD)
	
clean_embedded:
	$(SILENT_BUILD)rm -fr $(OUT_EMBEDDED_DIR)
	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=embedded -f $(MAKE_DIR)/Makefile.main $@

docs_embedded:

%_embedded:
	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=embedded -f $(MAKE_DIR)/Makefile.main $@

endif
	

hal_generator:
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/src

drivers:
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/librdb
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/ru_gen
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/pm_drv_generator


clean_drivers:
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/librdb clean 
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/ru_gen clean
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/src clean
	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/pm_drv_generator clean

