| #!/usr/bin/env bash | |
| # Copyright 2016 The Fuchsia Authors | |
| # Copyright (c) 2008 Travis Geiselbrecht | |
| # | |
| # Use of this source code is governed by a MIT-style | |
| # license that can be found in the LICENSE file or at | |
| # https://opensource.org/licenses/MIT | |
| function HELP { | |
| echo "help:" | |
| echo "-a arg : Pass arg to make" | |
| echo "-f : Exit on first failure" | |
| echo "-r : Also build release mode builds" | |
| echo "-c : Also build with clang" | |
| echo "-A : Also build with ASan" | |
| echo "-q : Build quietly" | |
| echo "-h for help" | |
| exit 1 | |
| } | |
| FAIL_FAST=0 | |
| DO_RELEASE=0 | |
| DO_CLANG=0 | |
| DO_ASAN=0 | |
| MAKE_ARGS= | |
| QUIET=0 | |
| while getopts Aa:fhrcq FLAG; do | |
| case $FLAG in | |
| A) DO_ASAN=1;; | |
| a) MAKE_ARGS="${MAKE_ARGS} ${OPTARG}";; | |
| f) FAIL_FAST=1;; | |
| h) HELP;; | |
| r) DO_RELEASE=1;; | |
| c) DO_CLANG=1;; | |
| q) QUIET=1;; | |
| \?) | |
| echo unrecognized option | |
| HELP | |
| esac | |
| done | |
| shift $((OPTIND-1)) | |
| PROJECTS= | |
| # build everything in the projects directory | |
| for p in kernel/project/*.mk; do | |
| p=${p##*/} | |
| p=${p%.mk} | |
| case "$p" in | |
| user-*|zircon-*) ;; | |
| *) PROJECTS="$PROJECTS $p" | |
| esac | |
| done | |
| FAILED="" | |
| DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | |
| STATUS=0 | |
| export QUIET | |
| for p in $PROJECTS; do | |
| echo building $p | |
| nice $DIR/make-parallel $p ${MAKE_ARGS} | |
| STATUS=$? | |
| if [ "$STATUS" -ne 0 ]; then | |
| FAILED="$FAILED $p" | |
| if [ "$FAIL_FAST" -eq 1 ]; then | |
| break | |
| fi | |
| fi | |
| if [ "$DO_CLANG" -eq 1 ]; then | |
| echo building $p with clang | |
| nice $DIR/make-parallel $p ${MAKE_ARGS} USE_CLANG=true | |
| STATUS=$? | |
| if [ "$STATUS" -ne 0 ]; then | |
| FAILED="$FAILED $p-clang" | |
| if [ "$FAIL_FAST" -eq 1 ]; then | |
| break | |
| fi | |
| fi | |
| fi | |
| if [ "$DO_ASAN" -eq 1 ]; then | |
| echo building $p with ASan | |
| nice $DIR/make-parallel $p ${MAKE_ARGS} USE_ASAN=true | |
| STATUS=$? | |
| if [ "$STATUS" -ne 0 ]; then | |
| FAILED="$FAILED $p-asan" | |
| if [ "$FAIL_FAST" -eq 1 ]; then | |
| break | |
| fi | |
| fi | |
| fi | |
| if [ "$DO_RELEASE" -eq 1 ]; then | |
| echo building $p with release | |
| nice $DIR/make-release $p ${MAKE_ARGS} | |
| STATUS=$? | |
| if [ "$STATUS" -ne 0 ]; then | |
| FAILED="$FAILED $p-release" | |
| if [ "$FAIL_FAST" -eq 1 ]; then | |
| break | |
| fi | |
| fi | |
| if [ "$DO_CLANG" -eq 1 ]; then | |
| echo building $p with release and clang | |
| nice $DIR/make-release $p ${MAKE_ARGS} USE_CLANG=true | |
| STATUS=$? | |
| if [ "$STATUS" -ne 0 ]; then | |
| FAILED="$FAILED $p-clang-release" | |
| if [ "$FAIL_FAST" -eq 1 ]; then | |
| break | |
| fi | |
| fi | |
| fi | |
| fi | |
| done | |
| if [ "$FAILED" != "" ]; then | |
| echo | |
| echo some projects have failed to build: | |
| echo $FAILED | |
| fi | |
| exit $STATUS |