This file contains instructions of how to extract BAL/SDN-PAL source release packages and compile them.
It is assumed that switch (Qumran) SDK is obtained from its relevant repository and it is not part of SDN-PAL source release package.

Here are the steps needed to extract and compile the source code:

1. Create a directory into which you want to extract the package. In the following steps we use /tmp/bal_src_release as an example.

   mkdir -p /tmp/bal_src_release

2. Unzip (extract) the combined Maple SDK and BAL package into the location you selected:

   unzip <path_to_release_zip>/SW-BCM68620_<revision>.zip -d /tmp/bal_src_release 

3. Extract SDN-PAL:

   tar --strip-components=1 -C /tmp/bal_src_release/bal_release -xvzf <path_to_sdn_pal_tarball>/sdn_pal.<suffix>.tar.gz

4. In case OMCI is also required, you should extract OMCI:

   tar --strip-components=1 -C /tmp/bal_src_release/bal_release -xvzf <path_to_omci_tarball>/omci.<suffix>.tar.gz

5. Obtain switch (Qumran) SDK from its repository.

6. Copy switch (Qumran) SDK to /tmp/bal_src_release/bal_release/3rdparty/bcm-sdk.

   cp /<path_to_switch_sdk>/sdk-all-<revision>.tar.gz /tmp/bal_src_release/bal_release/3rdparty/bcm-sdk

7. Change directory to the selected location.

   cd /tmp/bal_src_release/bal_release

8. Compile Maple SDK

   make maple_sdk_dir
   make maple_sdk

9. Compile switch (Qumran) SDK

   make ing_sdk_dir
   make ing_sdk

10. Compile SDN-PAL:

   make sdn_agent

11. When the build ends successfully, bal_core executable (build/core/src/core/main/bal_core) and SDN agent executable (build/agent/bcm_sdn_agent) should be created.

