###############################################################################
#
#  <:copyright-BRCM:2016:proprietary:standard
#   
#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
#     All Rights Reserved
#   
#  This program is the proprietary software of Broadcom Ltd. and/or its
#  licensors, and may only be used, duplicated, modified or distributed pursuant
#  to the terms and conditions of a separate, written license agreement executed
#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
#  expressly reserves all rights in and to the Software and all intellectual
#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
#   
#  Except as expressly set forth in the Authorized License,
#   
#  1. This program, including its structure, sequence and organization,
#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
#      all reasonable efforts to protect the confidentiality thereof, and to
#      use this information only in connection with your use of Broadcom Ltd.
#      integrated circuit products.
#   
#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
#      PERFORMANCE OF THE SOFTWARE.
#   
#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
#      LIMITED REMEDY.
#  :>
#
###############################################################################
# Central Makefile
#

# Identify whether it is customer or development build
ifneq ("$(wildcard .release_build)","")
    RELEASE_BUILD=y
    export RELEASE_BUILD
endif

DOCS_SUBSYSTEM := core
ifeq ("$(BUILD_OF_AGENT)", "y")
    ifneq ("$(findstring core,$(MAKECMDGOALS))", "")
        $(error Setting BUILD_OF_AGENT=$(BUILD_OF_AGENT) in incompatible with one of make targets "$(MAKECMDGOALS)"")
    endif
    # Backward compatibility
    ifeq ("$(MAKECMDGOALS)", "clean")
        OVEERIDE_GOAL = clean_agent
    endif
    ifeq ("$(MAKECMDGOALS)", "")
        OVEERIDE_GOAL = sdn_agent
    endif
    DOCS_SUBSYSTEM := agent
endif
ifeq ("$(BUILD_OF_AGENT)", "n")
    ifneq ("$(findstring agent,$(MAKECMDGOALS))", "")
        $(error Setting BUILD_OF_AGENT=$(BUILD_OF_AGENT) in incompatible with one of make targets "$(MAKECMDGOALS)"")
    endif
    # Backward compatibility
    ifeq ("$(MAKECMDGOALS)", "clean")
        OVEERIDE_GOAL = clean_core
    endif
    ifeq ("$(MAKECMDGOALS)", "")
        OVEERIDE_GOAL = core
    endif
endif
ifneq ("$(findstring agent,$(MAKECMDGOALS))", "")
    BUILD_OF_AGENT = y
endif

BUILD_NC_AGENT ?= y

export BUILD_OF_AGENT
export BUILD_NC_AGENT

PLATFORM ?= maple
TOP_DIR=$(shell pwd)
export PLATFORM
export TOP_DIR

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

TOP_SRC_DIR=$(TOP_DIR)/src
export TOP_SRC_DIR

include $(MAKE_DIR)/Makefile.initial_config
include $(TOP_DIR)/branch.info

OUT_DIR          ?= $(TOP_DIR)/build
OUT_DOCS_DIR	 ?= $(OUT_DIR)/doc

export OUT_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
ifneq ("$(BOARD)", "")
    BOARD_DIR ?= $(TOP_DIR)/3rdparty/maple/boards/cur/$(BOARD)
    export BOARD_DIR
endif

# Location of Maple SDK dir
MAPLE_SDK_DIR ?= $(TOP_DIR)/3rdparty/maple/cur

LOCAL_MAPLE_SDK_DIR = 3rdparty/maple/sdk
export MAPLE_SDK_DIR
export LOCAL_MAPLE_SDK_DIR
MAPLE_BOARD ?= $(BOARD)
ifneq ("$(MAPLE_BOARD)", "")
    MAPLE_BOARD_DIR ?= $(MAPLE_SDK_DIR)/../boards/cur/$(MAPLE_BOARD)
else    
    MAPLE_BOARD_DIR = $(shell cat $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir 2> /dev/null)
    tmp = $(shell ; rm -f $(OUT_DIR)/.maple_board_dir)
endif

ING_SDK_VER ?= 6.5.7
ING_SDK ?= sdk-all-$(ING_SDK_VER)
ING_SDK_PATCH ?=sdk-bal-$(ING_SDK_VER).patch
ING_SDK_TOP_DIR ?= $(TOP_DIR)/3rdparty/bcm-sdk
ifeq ("$(BOARD)", "")
	ING_SDK_DEFAULT_DIR := $(ING_SDK_TOP_DIR)/build/$(ING_SDK)
else
	ING_SDK_DEFAULT_DIR := $(ING_SDK_TOP_DIR)/build-$(BOARD)/$(ING_SDK)
endif
ING_SDK_DIR ?= $(ING_SDK_DEFAULT_DIR)
export ING_SDK_VER
export ING_SDK
export ING_SDK_PATCH
export ING_SDK_TOP_DIR 
export ING_SDK_DIR 

SWITCH ?= qax
export SWITCH

TMP_BAL_VERSION_H=${MAKE_DIR}/bal_version.tmp
BAL_VERSION_H:=${TOP_DIR}/src/common/include/bal_version.h

# NOTE: BUILD_INFO is set and exported by Jenkins when built by that tool
export JENKINS_BUILD
ifeq ("$(JENKINS_BUILD)", "y")
    PERFORCE_REVISION:=$(P4_CHANGELIST)
else ifneq ("$(RELEASE_BUILD), "y") 
    PERFORCE_REVISION:=$(shell p4 changes -m 1 //$(DEPOT)/$(BRANCH)/...\#have | cut -d " " -f 2)
    BUILD_INFO="Developer build \("${USER}"@"${PWD}"\)"
    export BUILD_INFO
else
    BUILD_INFO="Customer Release Build \("${USER}"@"${PWD}"\)"
    export BUILD_INFO
endif


RELEASE_TYPE:=${RELEASE_TYPE}
BUILD_USER:=${USER}
BUILD_TOPDIR:=${TOP_DIR}
BUILD_PERFORCE_REVISION:=$(PERFORCE_REVISION)
BUILD_VERSION_PREFIX:=$(RELEASE_TYPE)$(MAJOR).$(MINOR).$(PATCH)
BUILD_VERSION:=$(BUILD_VERSION_PREFIX).${BUILD_PERFORCE_REVISION}
BUILD_DATE:=`date +%m-%d-%Y-%H%M%S`
export BUILD_VERSION
export BUILD_PERFORCE_REVISION
export SRC_RELEASE_FILE_PREFIX ?= release.src.$(BUILD_VERSION_PREFIX)
export INCLUDE_MAPLE_SDK_RELEASE ?= y

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

# Include board support file
# It exports variables such as CROSS_COMPILE
ifneq ("$(BOARD)", "")
   -include mk/boards/$(BOARD)/board.config
endif

ifneq ("$(OVEERIDE_GOAL)", "")
all: $(OVEERIDE_GOAL)
else
all: print_maple_dir core sdn_agent
endif

clean: clean_core clean_agent clean_ocs_omci
	$(SILENT_BUILD)rm -fr $(OUT_DIR)

help_general:
	@echo "make parameters:"
	@echo "   BOARD             - board to build for"
	@echo "   BOARD_DIR         - board directory"
	@echo "   V=<output_level>  - =1-verbose command output, =2-makefile debug output"
	@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 "make targets:"
	@echo "   all               - build all subsystems. This is the default target"
	@echo "   core              - build core subsystem (BAL standalone)"
	@echo "   sdn_agent         - build agent subsystem (BAL SDN agent)"
	@echo "   maple_sdk_dir     - create 3rdparty/maple/sdk"
	@echo "   maple_sdk         - build maple sdk. Please set BOARD=<board> parameter"
	@echo "   maple_sdk_clean   - clean maple sdk"
	@echo "   ing_sdk_dir       - create 3rdparty/bcm-sdk/build"
	@echo "   ing_sdk           - build 3rdparty/bcm-sdk/build"
	@echo "   ing_sdk_clean     - clean 3rdparty/bcm-sdk/build"
	@echo "   ing_bcm_user      - build the bcm_user binary (toolchains paths must be set correctly first)"
	@echo "   clean             - clean everything"
	@echo "   clean_core        - clean core subsystem"
	@echo "   clean_sdn_agent   - clean SDN agent"
	@echo "   clean_ocs_omci    - clean OCS OMCI stack"
	@echo "   clean_bcm_omci    - clean Broadcom OMCI stack"
	@echo "   docs              - generate reference document in html format"
	@echo "   docs_pdf          - generate reference document in pdf format"
	@echo "   docs_clean        - clean documents"
	@echo "   version_file      - builds BAL version file"
	@echo "   bin_release_core      - create BAL core binary release archive"
	@echo "   bin_release_sdn_agent - create BAL SDN agent binary release archive"
	@echo "   bin_release           - create BAL core and SDN agent binary release archives"
	@echo "   src_release       - create all BAL source release archives"
	@echo ""
	@echo "Optional make arguments:"
	@echo ""
	@echo "   BUILD_NC_AGENT=n          - do NOT build NETCONF agent into bcm_sdn_agent. Used with make target \"sdn_agent\""
	@echo "   TEST_SW_UTIL_LOOPBACK=y   - stub out the switch utils"
	@echo ""


help: help_general help_core

.PHONY: version_file

version_file:
	@echo "  Generating $@"
	@echo "/*************************************************************" > $(TMP_BAL_VERSION_H)
	@echo " * DO NOT EDIT! THIS FILE WAS AUTO GENERATED. DO NOT EDIT!   *" >> $(TMP_BAL_VERSION_H)
	@echo " *************************************************************/" >> $(TMP_BAL_VERSION_H)
	@echo "  wrote header..."
	@$(BUILD_TOPDIR)/tools/copyright_tools/insert_copyright.pl -t c -l $(BUILD_TOPDIR)/COPYRIGHT >> $(TMP_BAL_VERSION_H)
	@echo "#if !defined(BAL_VERSION_H)" >> $(TMP_BAL_VERSION_H)
	@echo "#define BAL_VERSION_H" >> $(TMP_BAL_VERSION_H)
	@echo "" >> $(TMP_BAL_VERSION_H)
	@echo "#define BAL_VERSION          \"${BUILD_VERSION}\"" >> $(TMP_BAL_VERSION_H)
	@echo "#define BAL_VERSION_STR_LEN  (`echo ${BUILD_VERSION} | wc -c`)" >> $(TMP_BAL_VERSION_H)
	@echo "" >> $(TMP_BAL_VERSION_H)
	@echo "#define BAL_BUILD_DATE \"`date`\"" >> $(TMP_BAL_VERSION_H)
	@echo "#define BAL_BUILD_INFO       \"${BUILD_INFO}\"" >> $(TMP_BAL_VERSION_H)
	@echo "" >> $(TMP_BAL_VERSION_H)
	@echo "#endif  /* BAL_VERSION_H */" >> $(TMP_BAL_VERSION_H)
	@diff $(TMP_BAL_VERSION_H) $(BAL_VERSION_H) > /dev/null; \
	if [ $$? -ne 0 ]; then                                    \
	    mv -f $(TMP_BAL_VERSION_H) $(BAL_VERSION_H);          \
	fi

.PHONY: overlay_bal_maple_scripts

overlay_bal_maple_scripts:
	@echo "Creating and Overlaying BAL-specific svk_init.sh and trx_init.sh onto maple fs"
	@echo "(in $(LOCAL_MAPLE_SDK_DIR)/build/fs/)"
	@cp -f $(LOCAL_MAPLE_SDK_DIR)/host_customized/board/wrx/fs/svk_init.sh ~/svk_init.sh
	@cat ~/svk_init.sh | sed s/".\/bcm_user_appl"/'.\/bcm_user_appl < trx_init.sh \&\& .\/bcm_user_appl'/g > ~/svk_init_for_bal.sh
	@cat ~/svk_init.sh | sed s/".\/bcm_user_appl"/'.\/bcm_user_appl < trx_init.sh'/g > ~/svk_init_for_bal_startup.sh
	@mkdir -p $(LOCAL_MAPLE_SDK_DIR)/build/fs/
	@mv -f ~/svk_init_for_bal.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init.sh
	@mv -f ~/svk_init_for_bal_startup.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init_startup.sh
	@chmod 755 $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init.sh
	@chmod 755 $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init_startup.sh
	@cp -f $(TOP_DIR)/scripts/trx_init.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/.
	@rm ~/svk_init.sh

.PHONY:

.PHONY: sdn_agent
sdn_agent: version_file build_sdn_agent

.PHONY: build_sdn_agent
build_sdn_agent: build_agent
	$(SILENT_BUILD)mv $(TOP_DIR)/build/agent/3rdparty/indigo/ofpal_of_agent $(TOP_DIR)/build/agent/bcm_sdn_agent
	$(SILENT_BUILD)mk/create_artifacts.sh

.PHONY: ing_bcm_user

ing_bcm_user:
	@echo "Building ING bcm.user"
	@pushd 3rdparty/bcm-sdk/build/sdk-all-6.4.4/systems/linux/user/gto-2_6 && make && popd


# The following variables are only set if they have not been set
# previously or passed in.

.PHONY: docs
docs: docs_$(DOCS_SUBSYSTEM)

docs_pdf: docs_$(DOCS_SUBSYSTEM)
	$(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

.PHONY: print_maple_dir

print_maple_dir:
	@echo "Using MAPLE from $(MAPLE_SDK_DIR) copied to $(LOCAL_MAPLE_SDK_DIR)"

core: version_file build_core
	$(SILENT_BUILD)export BUILD_NC_AGENT=n;\
	export BUILD_OF_AGENT=n;\
	mk/create_artifacts.sh

%_core:
	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=core -f $(MAKE_DIR)/Makefile.main BUILD_NC_AGENT=n $@

agent: version_file build_agent

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

.PHONY: bin_release_sdn_agent
bin_release_sdn_agent: bin_release_agent

.PHONY: bin_release
bin_release: bin_release_core bin_release_agent

.PHONY: maple_sdk_devel_to_release

maple_sdk_devel_to_release:
ifneq ("$(RELEASE_BUILD)", "y")
	$(SILENT_BUILD)if [ ! -f $(MAPLE_SDK_DIR)/build/maple/host/fs/bcm68620_boot.bin ]; then \
	   echo !!! Build maple first;\
	   echo make -C $(MAPLE_SDK_DIR) BOARD=wrx;\
	   exit -1;\
	fi
	$(SILENT_BUILD)cd $(MAPLE_SDK_DIR) && rm -fr release && scripts/rel_delivery.sh $(MAPLE_REL_DELIVERY_PREFIX)
	$(SILENT_BUILD)rm -fr $(LOCAL_MAPLE_SDK_DIR)
endif
	$(SILENT_BUILD)mkdir -p $(LOCAL_MAPLE_SDK_DIR)
	$(SILENT_BUILD)cp -ar $(MAPLE_SDK_DIR)/release/* $(LOCAL_MAPLE_SDK_DIR)/
ifneq ("$(RELEASE_BUILD)", "y")
	$(SILENT_BUILD)cp $(MAPLE_SDK_DIR)/make/bcm68620/lint.sh $(LOCAL_MAPLE_SDK_DIR)/make/bcm68620/
endif

.PHONY: maple_sdk_dir
maple_sdk_dir: maple_sdk_devel_to_release
	$(SILENT_BUILD)if [ ! -f $(LOCAL_MAPLE_SDK_DIR)/embedded_binaries/bcm68620_boot.bin ]; then \
	   echo !!! $(LOCAL_MAPLE_SDK_DIR)/embedded_binaries/bcm68620_boot.bin is absent;\
	   echo !!! Please copy BCM68620 SDK release to $(LOCAL_MAPLE_SDK_DIR);\
	   exit -1;\
	fi
	$(SILENT_BUILD)mkdir -p src/common/os_abstraction
	$(SILENT_BUILD)rm -fr src/common/os_abstraction/*
	$(SILENT_BUILD)cd src/common/os_abstraction && ln -s ../../../$(LOCAL_MAPLE_SDK_DIR)/host_customized/os_abstraction/* .
	$(SILENT_BUILD)rm -f src/common/os_abstraction/bcmos_platform.h

src_release:
	$(SILENT_BUILD)$(MAKE_DIR)/src_release.sh

.PHONY: maple_sdk
maple_sdk: maple_sdk_build overlay_bal_maple_scripts

maple_sdk_build:
	$(SILENT_BUILD)rm -fr $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/*
	$(SILENT_BUILD)cd $(LOCAL_MAPLE_SDK_DIR) && \
       unset OUT_DIR && \
       BOARD=$(MAPLE_BOARD) BOARD_DIR=$(MAPLE_BOARD_DIR) $(MAKE) $(SILENT) 
ifeq ("$(BOARD)", "")
	$(SILENT_BUILD)mkdir -p $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/
	$(SILENT_BUILD)find $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR) -name 'lib*.a' -exec ln -s \{\} $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/ 2> /dev/null \;
	$(SILENT_BUILD)rm -f $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir
else
	$(SILENT_BUILD)echo $(MAPLE_BOARD_DIR) > $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir
endif       

maple_sdk_clean:
	$(SILENT_BUILD)OUT_DIR=$(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build OUT_DIR_BASE=$(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build \
	   BOARD_DIR=$(MAPLE_BOARD_DIR) $(MAKE) $(SILENT) -C $(LOCAL_MAPLE_SDK_DIR) TOP_DIR=$(TOP_DIR)/3rdparty/maple/sdk \
	   BOARD=$(MAPLE_BOARD) clean

ing_sdk_dir:
	$(SILENT_BUILD)$(ING_SDK_TOP_DIR)/make_ing_dir.sh

ing_sdk:
	$(SILENT_BUILD)$(MAKE) -C $(ING_SDK_TOP_DIR) -f Makefile.sdk sdk

ing_sdk_clean:
ifeq ($(ING_SDK_DEFAULT_DIR), $(ING_SDK_DIR))
	$(SILENT_BUILD)rm -fr $(ING_SDK_DIR)
else	
	$(SILENT_BUILD)$(MAKE) -C $(ING_SDK_DIR) clean
endif	

clean_ocs_omci:
	$(SILENT_BUILD)$(MAKE) -C $(TOP_DIR)/3rdparty/ocs_omci clean

#clean_bcm_omci:
#	$(SILENT_BUILD)$(MAKE) -C $(TOP_DIR)/3rdparty/ocs_omci clean

.PHONY: clean_sdn_agent 	
clean_sdn_agent: clean_agent

print-% : ; @echo $* = $($*)

