blob: 95d06f7ad215d0942613729bb368348ff6498b3b [file] [log] [blame]
#!/bin/bash
set -e
top_dir=$(readlink -e $(dirname $0)/../../)
declare -A PRODUCT_LIST=([sirocco]="sirocco-p1 sirocco-b1 sirocco-b3 sirocco-b4")
function Help() {
echo "Usage: $0 <eureka_workspace> <product/board> [optional build number] [other options]"
echo " valid product : sirocco"
echo " available options: --venv_root=<venv_root>"
}
function parse_args() {
readonly eureka_src_path="$( cd "$( dirname "${1}" )" && pwd )/$(basename $1)"
# Set the target profile as per SOC
product=""
revision=""
# Check if user specify product or board
if [[ "$2" =~ ^.+-[pb][0-9]$ ]]; then
product=`echo $2 | cut -d "-" -f1`
revision=`echo $2 | cut -d "-" -f2`
else
product=$2
fi
readonly product
readonly revision
deterministic_build=""
shift # product
shift # eureka_src_path
for arg in "$@"
do
case $arg in
--venv_root=*)
pyvenv_path="${arg#*=}"
shift # past argument=value
;;
*[!0-9]* | '') # not a number
echo "unknown option ${arg}"
;;
*)
build_number=$arg
shift
;;
esac
done
if [ -z "$build_number" ]; then
build_number="${USER}-private_build"
else
# If we were supplied a build number, this is probably a build server build so
# build kernel deterministically
deterministic_build="-d"
fi
}
function setup_pyvenv() {
if [ -d "${pyvenv_path}" -a -f "${pyvenv_path}/bin/activate" ]; then
source ${pyvenv_path}/bin/activate
echo "activated virtual environment at ${pyvenv_path}"
fi
}
function IsProductValid() {
local available_product
local ret=1
for available_product in ${!PRODUCT_LIST[@]}; do
if [ "${available_product}" == "$1" ]; then
ret=0
break
fi
done
return ${ret}
}
function build_for_board() {
board=$1
# Build kernel
pushd ${top_dir}/kernel
echo "Build kernel for ${board}..."
./build.sh ${deterministic_build} ${board} ${eureka_src_path}
popd
# Build u-boot
pushd ${top_dir}/bootloader
echo "Build bootloader for ${board}..."
./build.sh ${deterministic_build} ${board} ${eureka_src_path}
popd
}
function BuildAll() {
if [ -z ${eureka_src_path} ]; then
echo "eureka_src_path doesn't exist"
exit 1
fi
if ! IsProductValid ${product}; then
echo "Invalid product: $product"
Help
exit 1
fi
if [ $revision ]; then
echo "Build for board ${product}-${revision}"
build_for_board $product-$revision
else
echo "Build for all board revisions for product: ${product}"
for board in ${PRODUCT_LIST[${product}]}; do
build_for_board $board
done
fi
# Build sdk modules
pushd ${top_dir}/sdk/qca-ssdk
./build.sh ${product} ${eureka_src_path}
popd
pushd ${top_dir}/sdk/qca-nss-dp
./build.sh ${product} ${eureka_src_path}
popd
pushd ${top_dir}/sdk/nat46
./build.sh ${product} ${eureka_src_path}
popd
pushd ${top_dir}/sdk/qca-nss-sfe
./build.sh ${product} ${eureka_src_path}
popd
pushd ${top_dir}/sdk/qca-nss-ecm
./build.sh ${product} ${eureka_src_path}
popd
}
#########################
####### Main Entry ######
#########################
if [[ "$#" -lt 2 ]] || [[ "$#" -gt 4 ]]; then
echo "Error: Incorrect arguments."
Help
exit 1
fi
parse_args $@
# Create SDK Version number
mkdir -p ${eureka_src_path}/vendor/qualcomm/${product}
sdk_version_manifest=${eureka_src_path}/vendor/qualcomm/${product}/SDK_VERSION
echo "Build #${build_number}|$(TZ='America/Los_Angeles' date)" > $sdk_version_manifest
setup_pyvenv
BuildAll