e379d8860e
ASan builds by default go in build-$PROJECT-asan/. The buildall and run-magenta scripts do ASan builds with the -A switch. Code that is incompatible with sanitizer builds adds $(NO_SANITIZERS) to MODULE_COMPILEFLAGS. Everything else in userland gets built with ASan. Using USE_ASAN=true requires a Clang toolchain with the ASan runtime shared library, which will not land for a while yet. MG-71 # Enabled all-or-nothing USE_ASAN build switch for Magenta standalone. Change-Id: Ifc0628934c19affcb909b20f3cfdcc86ee54c2f9
126 linhas
2.9 KiB
Bash
Arquivo Executável
126 linhas
2.9 KiB
Bash
Arquivo Executável
#!/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 "-m : Build magenta targets only"
|
|
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
|
|
MAGENTA_ONLY=0
|
|
MAKE_ARGS=
|
|
QUIET=0
|
|
|
|
while getopts Aa:fhmrcq 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;;
|
|
m) MAGENTA_ONLY=1;;
|
|
q) QUIET=1;;
|
|
\?)
|
|
echo unrecognized option
|
|
HELP
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
if [ "$MAGENTA_ONLY" -eq 1 ]; then
|
|
# build everything in the projects directory
|
|
PROJECTS=`echo kernel/project/magenta*.mk | xargs -n1 basename | sed 's/\.mk//'`
|
|
else
|
|
PROJECTS=`echo kernel/project/*.mk | xargs -n1 basename | sed 's/\.mk//'`
|
|
fi
|
|
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
|