This file contains instructions of how to extract BAL source release package and compile it.
It is assumed that switch (Qumran) SDK is obtained from its relevant repository and it is not part of BAL 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. Obtain switch (Qumran) SDK from its repository.

4. 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

5. Change directory to the selected location.

   cd /tmp/bal_src_release/bal_release

6. Compile Maple SDK

   make maple_sdk_dir
   make maple_sdk

7. Compile switch (Qumran) SDK

   make ing_sdk_dir
   make ing_sdk

8. Compile BAL:

   make core

9. When the build ends successfully, bal_core executable (build/core/src/core/main/bal_core) should be created.

