1#!/usr/bin/env bash 2 3# Copyright 2016 The Fuchsia Authors 4# Copyright (c) 2008 Travis Geiselbrecht 5# 6# Use of this source code is governed by a MIT-style 7# license that can be found in the LICENSE file or at 8# https://opensource.org/licenses/MIT 9 10function HELP { 11 echo "help:" 12 echo "-a arg : Pass arg to make" 13 echo "-f : Exit on first failure" 14 echo "-r : Also build release mode builds" 15 echo "-c : Also build with clang" 16 echo "-A : Also build with ASan" 17 echo "-q : Build quietly" 18 echo "-h for help" 19 exit 1 20} 21 22FAIL_FAST=0 23DO_RELEASE=0 24DO_CLANG=0 25DO_ASAN=0 26MAKE_ARGS= 27QUIET=0 28 29while getopts Aa:fhrcq FLAG; do 30 case $FLAG in 31 A) DO_ASAN=1;; 32 a) MAKE_ARGS="${MAKE_ARGS} ${OPTARG}";; 33 f) FAIL_FAST=1;; 34 h) HELP;; 35 r) DO_RELEASE=1;; 36 c) DO_CLANG=1;; 37 q) QUIET=1;; 38 \?) 39 echo unrecognized option 40 HELP 41 esac 42done 43shift $((OPTIND-1)) 44 45PROJECTS= 46# build everything in the projects directory 47for p in kernel/project/*.mk; do 48 p=${p##*/} 49 p=${p%.mk} 50 case "$p" in 51 user-*|zircon-*) ;; 52 *) PROJECTS="$PROJECTS $p" 53 esac 54done 55 56FAILED="" 57 58DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 59STATUS=0 60export QUIET 61 62for p in $PROJECTS; do 63 echo building $p 64 nice $DIR/make-parallel $p ${MAKE_ARGS} 65 STATUS=$? 66 if [ "$STATUS" -ne 0 ]; then 67 FAILED="$FAILED $p" 68 if [ "$FAIL_FAST" -eq 1 ]; then 69 break 70 fi 71 fi 72 73 if [ "$DO_CLANG" -eq 1 ]; then 74 echo building $p with clang 75 nice $DIR/make-parallel $p ${MAKE_ARGS} USE_CLANG=true 76 STATUS=$? 77 if [ "$STATUS" -ne 0 ]; then 78 FAILED="$FAILED $p-clang" 79 if [ "$FAIL_FAST" -eq 1 ]; then 80 break 81 fi 82 fi 83 fi 84 85 if [ "$DO_ASAN" -eq 1 ]; then 86 echo building $p with ASan 87 nice $DIR/make-parallel $p ${MAKE_ARGS} USE_ASAN=true 88 STATUS=$? 89 if [ "$STATUS" -ne 0 ]; then 90 FAILED="$FAILED $p-asan" 91 if [ "$FAIL_FAST" -eq 1 ]; then 92 break 93 fi 94 fi 95 fi 96 97 if [ "$DO_RELEASE" -eq 1 ]; then 98 echo building $p with release 99 nice $DIR/make-release $p ${MAKE_ARGS} 100 STATUS=$? 101 if [ "$STATUS" -ne 0 ]; then 102 FAILED="$FAILED $p-release" 103 if [ "$FAIL_FAST" -eq 1 ]; then 104 break 105 fi 106 fi 107 if [ "$DO_CLANG" -eq 1 ]; then 108 echo building $p with release and clang 109 nice $DIR/make-release $p ${MAKE_ARGS} USE_CLANG=true 110 STATUS=$? 111 if [ "$STATUS" -ne 0 ]; then 112 FAILED="$FAILED $p-clang-release" 113 if [ "$FAIL_FAST" -eq 1 ]; then 114 break 115 fi 116 fi 117 fi 118 fi 119done 120 121if [ "$FAILED" != "" ]; then 122 echo 123 echo some projects have failed to build: 124 echo $FAILED 125fi 126 127exit $STATUS 128