| #!/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/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 |