Clean up make targets list-arch and list-toolchain to be much faster and work without needing to invoke the archtecture's arch rules.mk. This should make it work on machines that do not have that particular toolchain in the path. This is setting up for using it in the github action script.
101 lines
2.2 KiB
Bash
Executable File
101 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -o pipefail
|
|
|
|
handle_interrupt() {
|
|
echo "Caught ctrl-c, exiting"
|
|
exit 1
|
|
}
|
|
|
|
trap 'handle_interrupt' SIGINT
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
function HELP {
|
|
echo "help:"
|
|
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"
|
|
exit 1
|
|
}
|
|
|
|
RELEASE=0
|
|
WERROR=0
|
|
QUIET=0
|
|
ARCH="all"
|
|
|
|
while getopts a:ehrq FLAG; do
|
|
case $FLAG in
|
|
a) ARCH="$OPTARG";;
|
|
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()
|
|
{
|
|
if (( QUIET )); then
|
|
"$@" >> buildall.log 2>&1
|
|
else
|
|
"$@" 2>&1 | tee -a buildall.log
|
|
fi
|
|
}
|
|
|
|
# find all the projects in the project directory
|
|
_PROJECTS=$(echo project/*.mk | xargs -n1 basename | sed 's/\.mk//')
|
|
FAILED=""
|
|
|
|
# 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"
|
|
|
|
if (( WERROR )); then
|
|
WERROR_MSG="with WERROR"
|
|
fi
|
|
|
|
for p in $PROJECTS; do
|
|
echo "building $p $WERROR_MSG"
|
|
WERROR=$WERROR PROJECT=$p log nice "$DIR"/make-parallel || FAILED="$FAILED $p"
|
|
done
|
|
|
|
if (( RELEASE )); then
|
|
for p in $PROJECTS; do
|
|
echo "building $p-release $WERROR_MSG"
|
|
BUILDDIR_SUFFIX=-release WERROR=$WERROR DEBUG=0 PROJECT=$p log nice "$DIR"/make-parallel || FAILED="$FAILED $p-release"
|
|
done
|
|
fi
|
|
|
|
# Print out at the end which projects failed to build
|
|
if [ "$FAILED" != "" ]; then
|
|
echo
|
|
echo some projects have failed to build:
|
|
echo "$FAILED"
|
|
exit 1
|
|
fi
|