BAL and Maple Release 2.2

Signed-off-by: Shad Ansari <developer@Carbon.local>
diff --git a/bal_release/mk/src_release.sh b/bal_release/mk/src_release.sh
new file mode 100755
index 0000000..0db73d8
--- /dev/null
+++ b/bal_release/mk/src_release.sh
@@ -0,0 +1,296 @@
+#!/bin/bash
+###############################################################################
+#
+#  <: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.
+#  :>
+#
+###############################################################################
+
+# This script is called from the main Makefile.
+# Prerequisites:
+# 1. BAL standalone or ofpal_of_agent binaries are built.
+# 2. Environment variables defined:
+#    - SRC_RELEASE_FILE_PREFIX : source release file prefix (string)
+#    - INCLUDE_MAPLE_SDK_RELEASE : include maple SDK release (if set, then Maple SDK release is included, and its zip actually contains BAL's code, without OMCI and SDN-PAL).
+
+if [[ "$SRC_RELEASE_FILE_PREFIX" == "" ]]; then
+   echo SRC_RELEASE_FILE_PREFIX variable must be set
+   exit -1
+fi
+
+TMP_DIR=/tmp/bal_src_release/`date +%d_%m_%Y_%H_%M_%S`
+
+BAL_RELEASE_PREFIX=bal.$SRC_RELEASE_FILE_PREFIX
+SDN_PAL_RELEASE_PREFIX=sdn_pal.$SRC_RELEASE_FILE_PREFIX
+OMCI_RELEASE_PREFIX=omci.$SRC_RELEASE_FILE_PREFIX
+
+BAL_RELEASE_DIR=$TMP_DIR/bal/$SRC_RELEASE_FILE_PREFIX
+SDN_PAL_RELEASE_DIR=$TMP_DIR/sdn_pal/$SRC_RELEASE_FILE_PREFIX
+OMCI_RELEASE_DIR=$TMP_DIR/omci/$SRC_RELEASE_FILE_PREFIX
+
+BAL_SRC_RELEASE_FILE=$BAL_RELEASE_PREFIX.tar.gz
+SDN_PAL_SRC_RELEASE_FILE=$SDN_PAL_RELEASE_PREFIX.tar.gz
+OMCI_SRC_RELEASE_FILE=$OMCI_RELEASE_PREFIX.tar.gz
+
+CP="cp -R --parents"
+
+if [ -d build/core ]; then
+    SUBSYSTEM=core
+elif [ -d build/agent ]; then
+    SUBSYSTEM=agent
+else
+   echo Neither build/core nor build/agent subdirectories exist
+   exit -1
+fi
+
+if [ ! -f build/$SUBSYSTEM/src/common/include/bal_model_ids.h ]; then
+    echo Generated BAL header files are missing. Build BAL first
+    exit -1
+fi
+
+if [ ! -f build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_ids.h ]; then
+    echo Generated OMCI SVC header files are missing. Build OMCI SVC first
+    exit -1
+fi
+
+mkdir -p $BAL_RELEASE_DIR
+mkdir -p $SDN_PAL_RELEASE_DIR
+mkdir -p $OMCI_RELEASE_DIR
+
+# Copy auto-generated files first, as we will need to do "make clean" afterwards (because some 3rdparty libraries have binaries in the source directories and we need to clean those).
+# 1. BAL
+mkdir -p $BAL_RELEASE_DIR/src/common/include
+cp \
+    build/$SUBSYSTEM/src/common/include/bal_model_ids.h \
+    build/$SUBSYSTEM/src/common/include/bal_model_types.h \
+    $BAL_RELEASE_DIR/src/common/include
+
+mkdir -p $BAL_RELEASE_DIR/src/lib/libobjmsg
+cp  \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_model_funcs.c \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_model_funcs.h \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h \
+    $BAL_RELEASE_DIR/src/lib/libobjmsg
+
+mkdir -p $BAL_RELEASE_DIR/src/lib/libbalapicli
+cp \
+    build/$SUBSYSTEM/src/lib/libbalapicli/bal_api_cli_helpers.h \
+    build/$SUBSYSTEM/src/lib/libbalapicli/bal_api_cli_helpers.c \
+    build/$SUBSYSTEM/src/lib/libbalapicli/bal_api_cli_handlers.c \
+    $BAL_RELEASE_DIR/src/lib/libbalapicli
+
+# 2. OMCI
+# Copy auto-generated files to the sources directory
+mkdir -p $OMCI_RELEASE_DIR/src/lib/libomcisvc
+cp \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_ids.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_types.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_funcs.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_funcs.c \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_cli_handlers.c \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_cli_helpers.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_cli_helpers.c \
+    $OMCI_RELEASE_DIR/src/lib/libomcisvc
+
+# Clean
+make clean
+make clean BUILD_NC_AGENT=y
+
+# Now recreate the subsystem directory (wiped out by the make clean), because the archive artifacts from the build will go there
+mkdir -p build/$SUBSYSTEM
+
+# Now main copy
+
+# 1. BAL
+
+# Copy only relevant sources.
+for file in `find mk -maxdepth 1 -type f`; do cp -L --parents $file $BAL_RELEASE_DIR; done
+$CP 3rdparty/bcm-sdk/make $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/Makefile $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/Makefile.sdk $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/make_ing_dir.sh $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/rc $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/*.patch $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/sh $BAL_RELEASE_DIR/
+$CP 3rdparty/linenoise $BAL_RELEASE_DIR/
+$CP 3rdparty/maple/Makefile $BAL_RELEASE_DIR/
+$CP branch.info $BAL_RELEASE_DIR/
+chmod +w $BAL_RELEASE_DIR/branch.info
+echo PERFORCE_REVISION=$BUILD_PERFORCE_REVISION >> $BAL_RELEASE_DIR/branch.info
+$CP COPYRIGHT $BAL_RELEASE_DIR/
+$CP doxygen $BAL_RELEASE_DIR/
+$CP Makefile $BAL_RELEASE_DIR/
+$CP README* $BAL_RELEASE_DIR/
+$CP mk/boards $BAL_RELEASE_DIR/
+$CP mk/core/Makefile* $BAL_RELEASE_DIR/
+$CP mk/core/modules.core.bal $BAL_RELEASE_DIR/
+$CP mk/agent/modules.agent.bal $BAL_RELEASE_DIR/
+$CP scripts $BAL_RELEASE_DIR/
+$CP src/common $BAL_RELEASE_DIR/
+$CP src/core $BAL_RELEASE_DIR/
+$CP src/apps/bal_cli $BAL_RELEASE_DIR/
+$CP src/datamodel/bal.objset $BAL_RELEASE_DIR/
+$CP src/lib/common $BAL_RELEASE_DIR/
+$CP src/lib/libbalapi $BAL_RELEASE_DIR/
+$CP src/lib/libbalapicli $BAL_RELEASE_DIR/
+$CP src/lib/libobjmsg $BAL_RELEASE_DIR/
+$CP src/lib/librscmgr $BAL_RELEASE_DIR/
+$CP src/lib/libtopology $BAL_RELEASE_DIR/
+$CP src/lib/libutils $BAL_RELEASE_DIR/
+$CP src/lib/libcmdline $BAL_RELEASE_DIR/
+$CP tools $BAL_RELEASE_DIR/
+
+# The following file will indicate a release build
+touch $BAL_RELEASE_DIR/.release_build
+
+# Add write permission to all the copied files
+find $BAL_RELEASE_DIR -type f | xargs -d '\n' chmod +w
+
+# Remove codegen_templates and .ccache
+find $BAL_RELEASE_DIR -name codegen_templates | xargs rm -rf
+find $BAL_RELEASE_DIR -name .ccache | xargs rm -rf
+
+cd $BAL_RELEASE_DIR/..
+tar -czf $BAL_SRC_RELEASE_FILE $SRC_RELEASE_FILE_PREFIX
+cd - > /dev/null
+mv $TMP_DIR/bal/$BAL_SRC_RELEASE_FILE .
+echo ./$BAL_SRC_RELEASE_FILE created
+
+# 2. SDN-PAL
+
+# Copy only relevant sources.
+for file in `find mk -maxdepth 1 -type f`; do cp --parents $file $SDN_PAL_RELEASE_DIR; done
+$CP 3rdparty/loci $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libxml2 $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libxslt $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libgpg-error $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libgcrypt $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libssh $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libcurl $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libnetconf $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/indigo $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/openyuma $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/yang/BBF $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/yang/IANA $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/yang/IETF $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/pyang $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/netopeer $SDN_PAL_RELEASE_DIR/
+$CP mk/agent/Makefile* $SDN_PAL_RELEASE_DIR/
+$CP mk/agent/modules.agent.sdn_pal $SDN_PAL_RELEASE_DIR/
+$CP src/agent $SDN_PAL_RELEASE_DIR/
+$CP src/netconf $SDN_PAL_RELEASE_DIR/
+$CP src/ofpal $SDN_PAL_RELEASE_DIR/
+
+# Add write permission to all the copied files
+find $SDN_PAL_RELEASE_DIR -type f | xargs -d '\n' chmod +w
+
+# Remove .ccache
+find $SDN_PAL_RELEASE_DIR -name .ccache | xargs rm -rf
+
+cd $SDN_PAL_RELEASE_DIR/..
+tar -czf $SDN_PAL_SRC_RELEASE_FILE $SRC_RELEASE_FILE_PREFIX
+cd - > /dev/null
+mv $TMP_DIR/sdn_pal/$SDN_PAL_SRC_RELEASE_FILE .
+echo ./$SDN_PAL_SRC_RELEASE_FILE created
+
+# 3. OMCI
+
+# Copy only relevant sources.
+$CP mk/core/modules.core.omci $OMCI_RELEASE_DIR/
+$CP mk/agent/modules.agent.omci $OMCI_RELEASE_DIR/
+$CP src/datamodel/omci* $OMCI_RELEASE_DIR/
+$CP src/lib/libomcistack $OMCI_RELEASE_DIR/
+$CP src/lib/libomcisvc $OMCI_RELEASE_DIR/
+
+# Remove OCS OMCI stack from modules.*.omci
+sed -i '/3rdparty\/ocs_omci/d' $OMCI_RELEASE_DIR/mk/core/modules.core.omci
+sed -i '/3rdparty\/ocs_omci/d' $OMCI_RELEASE_DIR/mk/agent/modules.agent.omci
+
+# Add write permission to all the copied files
+find $OMCI_RELEASE_DIR -type f | xargs -d '\n' chmod +w
+
+# Remove codegen_templates and .ccache
+find $OMCI_RELEASE_DIR -name codegen_templates | xargs rm -rf
+find $OMCI_RELEASE_DIR -name .ccache | xargs rm -rf
+
+# Add a flag to OMCI SVC's Makefile, so that when OMCI package is extracted, builds will include real OMCI SVC, not stubs.
+echo "USE_BCM_OMCI_SVC_IN_RELEASE=y" >> $OMCI_RELEASE_DIR/src/lib/libomcisvc/Makefile.config.omci
+
+cd $OMCI_RELEASE_DIR/..
+tar -czf $OMCI_SRC_RELEASE_FILE $SRC_RELEASE_FILE_PREFIX
+cd - > /dev/null
+mv $TMP_DIR/omci/$OMCI_SRC_RELEASE_FILE .
+echo ./$OMCI_SRC_RELEASE_FILE created
+
+# If INCLUDE_MAPLE_SDK_RELEASE is defined, then we create a maple release that will wrap the BAL release.
+if [[ "$INCLUDE_MAPLE_SDK_RELEASE" != "" ]]; then
+    OLD_DIR=`pwd`
+    BAL_MAPLE_RELEASE_DIR=$TMP_DIR/bal_maple_release
+    ./3rdparty/maple/cur/scripts/rel_delivery.sh $MAPLE_REL_DELIVERY_PREFIX
+    BCM68620_ZIP_FILE=`ls ./3rdparty/maple/cur/SW-BCM68620*.zip`
+    mkdir -p $BAL_MAPLE_RELEASE_DIR/bcm68620_release
+    unzip $BCM68620_ZIP_FILE -d $BAL_MAPLE_RELEASE_DIR/bcm68620_release
+    
+    cd $BAL_MAPLE_RELEASE_DIR
+    ln -s bcm68620_release/release/docs docs
+
+    mkdir -p bal_release
+    cd $BAL_RELEASE_DIR
+    $CP . $BAL_MAPLE_RELEASE_DIR/bal_release/
+    cd $BAL_MAPLE_RELEASE_DIR/bal_release/3rdparty/maple
+    ln -s ../../../bcm68620_release cur
+
+    cd $BAL_MAPLE_RELEASE_DIR
+    zip -y -r `basename $BCM68620_ZIP_FILE` ./*
+    cd $OLD_DIR
+    mv $BAL_MAPLE_RELEASE_DIR/`basename $BCM68620_ZIP_FILE` .
+    echo `basename ./$BCM68620_ZIP_FILE` created
+fi
+
+echo Instructions of how to extract and compile source release packages exist in `ls README*` files
+
+rm -rf $TMP_DIR
+