2019-03-30 20:02:18 -07:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
2023-04-04 15:46:11 -07:00
|
|
|
set -o pipefail
|
|
|
|
|
|
2024-06-14 15:35:58 -07:00
|
|
|
handle_interrupt() {
|
|
|
|
|
echo "Caught ctrl-c, exiting"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
trap 'handle_interrupt' SIGINT
|
|
|
|
|
|
2019-03-30 20:02:18 -07:00
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
2008-09-01 02:26:09 -07:00
|
|
|
|
2022-07-23 15:57:53 -07:00
|
|
|
function HELP {
|
|
|
|
|
echo "help:"
|
2025-07-18 21:32:05 -07:00
|
|
|
echo "-a <arch> : build for <arch> (default: all)"
|
|
|
|
|
echo "-e : build with WERROR=1"
|
|
|
|
|
echo "-r : also build DEBUG=0"
|
|
|
|
|
echo "-q : hide output of build"
|
|
|
|
|
echo "-h : for help"
|
2022-07-23 15:57:53 -07:00
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RELEASE=0
|
|
|
|
|
WERROR=0
|
|
|
|
|
QUIET=0
|
2025-07-18 21:32:05 -07:00
|
|
|
ARCH="all"
|
2022-07-23 15:57:53 -07:00
|
|
|
|
2025-07-18 21:32:05 -07:00
|
|
|
while getopts a:ehrq FLAG; do
|
2022-07-23 15:57:53 -07:00
|
|
|
case $FLAG in
|
2025-07-18 21:32:05 -07:00
|
|
|
a) ARCH="$OPTARG";;
|
2022-07-23 15:57:53 -07:00
|
|
|
e) WERROR=1;;
|
|
|
|
|
h) HELP;;
|
|
|
|
|
r) RELEASE=1;;
|
|
|
|
|
q) QUIET=1;;
|
|
|
|
|
\?)
|
|
|
|
|
echo unrecognized option
|
|
|
|
|
HELP
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
shift $((OPTIND-1))
|
|
|
|
|
|
|
|
|
|
echo > buildall.log
|
|
|
|
|
function log()
|
|
|
|
|
{
|
2025-07-18 20:53:35 -07:00
|
|
|
if (( QUIET )); then
|
2022-07-23 15:57:53 -07:00
|
|
|
"$@" >> buildall.log 2>&1
|
|
|
|
|
else
|
|
|
|
|
"$@" 2>&1 | tee -a buildall.log
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-18 21:32:05 -07:00
|
|
|
# find all the projects in the project directory
|
|
|
|
|
_PROJECTS=$(echo project/*.mk | xargs -n1 basename | sed 's/\.mk//')
|
2010-06-04 13:57:55 -07:00
|
|
|
FAILED=""
|
2008-09-01 02:26:09 -07:00
|
|
|
|
2025-07-18 21:32:05 -07:00
|
|
|
# If ARCH is set to all, we build for all architectures, otherwise we
|
|
|
|
|
# filter projects based on the ARCH variable.
|
|
|
|
|
if [ "$ARCH" != "all" ]; then
|
|
|
|
|
for p in $_PROJECTS; do
|
|
|
|
|
# Look for ARCH = <arch> in the output of make list-arch
|
|
|
|
|
PROJECT_ARCH="$(PROJECT=$p make list-arch | grep 'ARCH' | tail -1 | cut -d ' ' -f 3)"
|
|
|
|
|
if [ "$PROJECT_ARCH" == "$ARCH" ]; then
|
|
|
|
|
PROJECTS+="$p "
|
|
|
|
|
else
|
|
|
|
|
if (( !QUIET )); then
|
|
|
|
|
echo "Skipping $p, not compatible with architecture $ARCH"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
else
|
|
|
|
|
PROJECTS+="$_PROJECTS"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo projects to build: "$PROJECTS"
|
|
|
|
|
|
2025-07-18 20:53:35 -07:00
|
|
|
if (( WERROR )); then
|
|
|
|
|
WERROR_MSG="with WERROR"
|
2022-07-23 15:57:53 -07:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
for p in $PROJECTS; do
|
2025-07-18 20:53:35 -07:00
|
|
|
echo "building $p $WERROR_MSG"
|
|
|
|
|
WERROR=$WERROR PROJECT=$p log nice "$DIR"/make-parallel || FAILED="$FAILED $p"
|
2022-07-23 15:57:53 -07:00
|
|
|
done
|
|
|
|
|
|
2025-07-18 20:53:35 -07:00
|
|
|
if (( RELEASE )); then
|
2008-09-01 02:26:09 -07:00
|
|
|
for p in $PROJECTS; do
|
2025-07-18 20:53:35 -07:00
|
|
|
echo "building $p-release $WERROR_MSG"
|
|
|
|
|
BUILDDIR_SUFFIX=-release WERROR=$WERROR DEBUG=0 PROJECT=$p log nice "$DIR"/make-parallel || FAILED="$FAILED $p-release"
|
2008-09-01 02:26:09 -07:00
|
|
|
done
|
2022-07-23 15:57:53 -07:00
|
|
|
fi
|
2010-06-04 13:57:55 -07:00
|
|
|
|
2025-07-18 20:53:35 -07:00
|
|
|
# Print out at the end which projects failed to build
|
2010-06-04 13:57:55 -07:00
|
|
|
if [ "$FAILED" != "" ]; then
|
2019-03-30 20:02:18 -07:00
|
|
|
echo
|
|
|
|
|
echo some projects have failed to build:
|
2025-07-18 20:53:35 -07:00
|
|
|
echo "$FAILED"
|
2025-07-18 21:32:05 -07:00
|
|
|
exit 1
|
2010-06-04 13:57:55 -07:00
|
|
|
fi
|