181 lines
3.4 KiB
Plaintext
181 lines
3.4 KiB
Plaintext
|
#!/bin/bash
|
||
|
set -e -o pipefail
|
||
|
|
||
|
PROGNAME="$(basename "${0}")"
|
||
|
VERSION="1.00"
|
||
|
|
||
|
ABUILD="./util/abuild/abuild"
|
||
|
OUTPUT="coreboot-builds"
|
||
|
MAINBOARDS=()
|
||
|
UNSORTED=()
|
||
|
CPUS=$(nproc || echo "4")
|
||
|
NO_CROS=0
|
||
|
|
||
|
# Text STYLE variables
|
||
|
BOLD="\033[1m"
|
||
|
RED='\033[38;5;9m'
|
||
|
GREEN='\033[38;5;2m'
|
||
|
NO_COLOR='\033[0m'
|
||
|
|
||
|
usage() {
|
||
|
cat <<EOF
|
||
|
The ${PROGNAME} script helps select boards to run test builds on. It searches
|
||
|
through all of the mainboard Kconfig files for specified identifiers and then
|
||
|
runs abuild on the mainboards it finds.
|
||
|
|
||
|
Usage: ${PROGNAME} [options]
|
||
|
|
||
|
Options:
|
||
|
-C | --cpus <num> Specify number of CPUs to use (currently ${CPUS})
|
||
|
-K | --kconfig <CONFIG> Search for Kconfig option
|
||
|
-n | --no_cros Don't run chromeos builds
|
||
|
-h | --help Print usage and exit
|
||
|
-D | --debug Print debug information. Use -DD to show all commands
|
||
|
-V | --version Print the version and exit
|
||
|
--nocolor Don't print color codes
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
_echo_color() {
|
||
|
local color="$1"
|
||
|
local text="$2"
|
||
|
local newline="${3:-0}"
|
||
|
if [[ ${newline} == "0" ]]; then
|
||
|
printf "${color}%s${NO_COLOR}" "${text}"
|
||
|
else
|
||
|
printf "${color}%s${NO_COLOR}\n" "${text}"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
_echo_error() {
|
||
|
_echo_color "${RED}" "$*" 1 >&2
|
||
|
}
|
||
|
|
||
|
show_version() {
|
||
|
echo
|
||
|
_echo_color "${BOLD}${GREEN}" "${PROGNAME} version ${VERSION}"
|
||
|
echo
|
||
|
}
|
||
|
|
||
|
get_real_dir() (
|
||
|
cd -- "$1" >/dev/null 2>&1 || exit 1
|
||
|
pwd -P
|
||
|
)
|
||
|
|
||
|
get_args() {
|
||
|
local mblist
|
||
|
local mainboards=()
|
||
|
|
||
|
if ! args="$(getopt -l version,help,debug,nocolor,kconfig:,cpus:,no_cros -o C:K:nDhV -- "$@")"; then
|
||
|
usage
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
eval set -- "${args}"
|
||
|
|
||
|
while true; do
|
||
|
case "$1" in
|
||
|
-C | --cpus)
|
||
|
shift
|
||
|
CPUS=$1
|
||
|
;;
|
||
|
-K | --kconfig)
|
||
|
shift
|
||
|
mblist=$(grep -r "$1" src/mainboard | sed 's|src/mainboard/||;s|/Kconfig.*||')
|
||
|
printf "Adding mainboard for %s\n%s\n" "$1" "${mblist}"
|
||
|
echo
|
||
|
mapfile -t mainboards <<<"$mblist"
|
||
|
UNSORTED+=(${mainboards[@]})
|
||
|
;;
|
||
|
-n | no_cros)
|
||
|
NO_CROS=1
|
||
|
;;
|
||
|
-D | --debug)
|
||
|
if [ -n "${VERBOSE}" ]; then
|
||
|
set -x
|
||
|
else
|
||
|
VERBOSE="V=1"
|
||
|
fi
|
||
|
;;
|
||
|
-h | --help)
|
||
|
usage
|
||
|
exit 0
|
||
|
;;
|
||
|
--nocolor)
|
||
|
BOLD=""
|
||
|
RED=""
|
||
|
GREEN=""
|
||
|
NO_COLOR=""
|
||
|
;;
|
||
|
-V | --version) exit 0 ;;
|
||
|
--)
|
||
|
shift
|
||
|
break
|
||
|
;;
|
||
|
*)
|
||
|
_echo_error "Unknown argument '$1'"
|
||
|
usage
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
if [[ -n $1 ]]; then
|
||
|
_echo_error "Unknown command '$1'"
|
||
|
echo
|
||
|
usage
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
main() {
|
||
|
show_version
|
||
|
get_args "$@"
|
||
|
|
||
|
if [[ ! -f "MAINTAINERS" ]]; then
|
||
|
echo "${PWD}"
|
||
|
_echo_error "Error: This doesn't look like the coreboot directory."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Sort and dedupe list
|
||
|
mapfile -t MAINBOARDS <<<"$(printf "%s\n" "${UNSORTED[@]}" | sort -u)"
|
||
|
|
||
|
if [[ "${#MAINBOARDS[@]}" != "0" ]]; then
|
||
|
echo "Using ${CPUS} CPUs to build ${#MAINBOARDS[@]} boards:"
|
||
|
printf "%s\n" "${MAINBOARDS[@]}"
|
||
|
echo
|
||
|
else
|
||
|
_echo_error "Error: No mainboards found/specified."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
for board in ${MAINBOARDS[*]}; do
|
||
|
rm -rf "./${OUTPUT}"
|
||
|
|
||
|
# Non-CrOS build
|
||
|
if ! "${ABUILD}" --exitcode --cpus ${CPUS} --target "${board}"; then
|
||
|
_echo_error "Error: Non-cros build of ${board} failed."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# CrOS build
|
||
|
if [[ ${NO_CROS} -eq 0 ]]; then
|
||
|
rm -rf "./${OUTPUT}"
|
||
|
if ! "${ABUILD}" --exitcode --cpus ${CPUS} --target "${board}" --chromeos; then
|
||
|
_echo_error "Error: CrOS build of ${board} failed."
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
done
|
||
|
|
||
|
echo
|
||
|
echo "Successfully built all boards:"
|
||
|
printf "%s\n" "${MAINBOARDS[@]}"
|
||
|
|
||
|
}
|
||
|
|
||
|
main "$@"
|