BAL and Maple Release 2.2

Signed-off-by: Shad Ansari <developer@Carbon.local>
diff --git a/bal_release/Makefile b/bal_release/Makefile
new file mode 100644
index 0000000..5fa6488
--- /dev/null
+++ b/bal_release/Makefile
@@ -0,0 +1,425 @@
+###############################################################################
+#
+#  <: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 $* = $($*)
+