1*89c4ff92SAndroid Build Coastguard Worker#!/bin/bash 2*89c4ff92SAndroid Build Coastguard Worker# 3*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 4*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 5*89c4ff92SAndroid Build Coastguard Worker# 6*89c4ff92SAndroid Build Coastguard Worker 7*89c4ff92SAndroid Build Coastguard WorkerSOURCE="${BASH_SOURCE[0]}" 8*89c4ff92SAndroid Build Coastguard Workerwhile [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 9*89c4ff92SAndroid Build Coastguard Worker TARGET="$(readlink "$SOURCE")" 10*89c4ff92SAndroid Build Coastguard Worker if [[ $TARGET == /* ]]; then 11*89c4ff92SAndroid Build Coastguard Worker # "SOURCE '$SOURCE' is an absolute symlink to '$TARGET'" 12*89c4ff92SAndroid Build Coastguard Worker SOURCE="$TARGET" 13*89c4ff92SAndroid Build Coastguard Worker else 14*89c4ff92SAndroid Build Coastguard Worker DIR="$( dirname "$SOURCE" )" 15*89c4ff92SAndroid Build Coastguard Worker # "SOURCE '$SOURCE' is a relative symlink to '$TARGET' (relative to '$DIR')" 16*89c4ff92SAndroid Build Coastguard Worker SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 17*89c4ff92SAndroid Build Coastguard Worker fi 18*89c4ff92SAndroid Build Coastguard Workerdone 19*89c4ff92SAndroid Build Coastguard WorkerDIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" 20*89c4ff92SAndroid Build Coastguard Worker 21*89c4ff92SAndroid Build Coastguard WorkerCMD=$( basename "$0" ) 22*89c4ff92SAndroid Build Coastguard Worker 23*89c4ff92SAndroid Build Coastguard Workerusage() { 24*89c4ff92SAndroid Build Coastguard Worker echo "Usage: $CMD [options]" 25*89c4ff92SAndroid Build Coastguard Worker echo "Options: -t(type) <Debug or Release>" 26*89c4ff92SAndroid Build Coastguard Worker echo " -c(lean) build" 27*89c4ff92SAndroid Build Coastguard Worker echo " -s(tatic libraries) <1 or 0>" 28*89c4ff92SAndroid Build Coastguard Worker echo " -w(indows) build" 29*89c4ff92SAndroid Build Coastguard Worker exit 1 30*89c4ff92SAndroid Build Coastguard Worker} 31*89c4ff92SAndroid Build Coastguard Worker# defaults 32*89c4ff92SAndroid Build Coastguard WorkerTYPE=Release 33*89c4ff92SAndroid Build Coastguard WorkerCLEAN=0 34*89c4ff92SAndroid Build Coastguard WorkerSTATIC=0 35*89c4ff92SAndroid Build Coastguard WorkerWINDOWS=0 36*89c4ff92SAndroid Build Coastguard Worker 37*89c4ff92SAndroid Build Coastguard Worker# Parse the command line 38*89c4ff92SAndroid Build Coastguard Workerwhile getopts "whct:s:" opt; do 39*89c4ff92SAndroid Build Coastguard Worker case "$opt" in 40*89c4ff92SAndroid Build Coastguard Worker h|\?) usage;; 41*89c4ff92SAndroid Build Coastguard Worker t) TYPE=$OPTARG;; 42*89c4ff92SAndroid Build Coastguard Worker c) CLEAN=1;; 43*89c4ff92SAndroid Build Coastguard Worker s) STATIC=$OPTARG;; 44*89c4ff92SAndroid Build Coastguard Worker w) WINDOWS=1;; 45*89c4ff92SAndroid Build Coastguard Worker esac 46*89c4ff92SAndroid Build Coastguard Workerdone 47*89c4ff92SAndroid Build Coastguard Workershift $((OPTIND - 1)) 48*89c4ff92SAndroid Build Coastguard Worker 49*89c4ff92SAndroid Build Coastguard Workerif [ $CLEAN == 1 ]; then 50*89c4ff92SAndroid Build Coastguard Worker echo "removing ${DIR}/build" 51*89c4ff92SAndroid Build Coastguard Worker rm -rf "${DIR}"/build 52*89c4ff92SAndroid Build Coastguard Workerfi 53*89c4ff92SAndroid Build Coastguard Worker 54*89c4ff92SAndroid Build Coastguard WorkerBUILD_DIR="build" 55*89c4ff92SAndroid Build Coastguard Worker[ -d build ] || ( mkdir build || exit ) 56*89c4ff92SAndroid Build Coastguard Workerecho $WINDOWS 57*89c4ff92SAndroid Build Coastguard Workerif [ "$WINDOWS" -eq "1" ]; then 58*89c4ff92SAndroid Build Coastguard Worker echo "doing windows" 59*89c4ff92SAndroid Build Coastguard Worker cd $BUILD_DIR || exit 60*89c4ff92SAndroid Build Coastguard Worker [ -d windows ] || mkdir windows 61*89c4ff92SAndroid Build Coastguard Worker BUILD_DIR=$BUILD_DIR/windows 62*89c4ff92SAndroid Build Coastguard Worker cd "$DIR" || exit 63*89c4ff92SAndroid Build Coastguard Workerfi 64*89c4ff92SAndroid Build Coastguard Worker# lower case TYPE in a posix compliant manner 65*89c4ff92SAndroid Build Coastguard WorkerLC_TYPE=$(echo "$TYPE" | tr '[:upper:]' '[:lower:]') 66*89c4ff92SAndroid Build Coastguard Workerif [ "${LC_TYPE}" == "debug" ]; then 67*89c4ff92SAndroid Build Coastguard Worker DEBUGDIR=("$DIR/$BUILD_DIR/debug") 68*89c4ff92SAndroid Build Coastguard Worker # shellcheck disable=SC2128 69*89c4ff92SAndroid Build Coastguard Worker [ -d "$DEBUGDIR" ] || (cd ${BUILD_DIR} && ( mkdir debug || exit ) && cd ..) 70*89c4ff92SAndroid Build Coastguard Worker # shellcheck disable=SC2128 71*89c4ff92SAndroid Build Coastguard Worker BUILD_DIR=$DEBUGDIR 72*89c4ff92SAndroid Build Coastguard Workerelse 73*89c4ff92SAndroid Build Coastguard Worker RELEASEDIR=("$DIR/$BUILD_DIR/release") 74*89c4ff92SAndroid Build Coastguard Worker # shellcheck disable=SC2128 75*89c4ff92SAndroid Build Coastguard Worker [ -d "$RELEASEDIR" ] || (cd "${BUILD_DIR}" && ( mkdir release || exit ) && cd ..) 76*89c4ff92SAndroid Build Coastguard Worker # shellcheck disable=SC2128 77*89c4ff92SAndroid Build Coastguard Worker BUILD_DIR=$RELEASEDIR 78*89c4ff92SAndroid Build Coastguard Workerfi 79*89c4ff92SAndroid Build Coastguard Worker 80*89c4ff92SAndroid Build Coastguard Workerecho "Build Directory: ${BUILD_DIR}" 81*89c4ff92SAndroid Build Coastguard Worker 82*89c4ff92SAndroid Build Coastguard WorkerCMAKE=cmake 83*89c4ff92SAndroid Build Coastguard WorkerCMARGS="-DCMAKE_BUILD_TYPE=$TYPE \ 84*89c4ff92SAndroid Build Coastguard Worker -DBUILD_STATIC_PIPE_LIBS=$STATIC \ 85*89c4ff92SAndroid Build Coastguard Worker -DBUILD_PIPE_ONLY=1" 86*89c4ff92SAndroid Build Coastguard Workerif [ "$WINDOWS" -eq "1" ]; then 87*89c4ff92SAndroid Build Coastguard Worker CMARGS="$CMARGS \ 88*89c4ff92SAndroid Build Coastguard Worker -DCMAKE_TOOLCHAIN_FILE=${DIR}/toolchain-x86-ubuntu-mingw64.cmake" 89*89c4ff92SAndroid Build Coastguard Workerfi 90*89c4ff92SAndroid Build Coastguard WorkerMAKE="make" 91*89c4ff92SAndroid Build Coastguard Worker 92*89c4ff92SAndroid Build Coastguard Workercd "${BUILD_DIR}" || exit 93*89c4ff92SAndroid Build Coastguard Workerpwd 94*89c4ff92SAndroid Build Coastguard Worker( eval $CMAKE "$CMARGS" "$DIR" && eval ${MAKE} "$MAKEFLAGS" ) 95