util/scripts: Add script to run abuild on specific SOCs
This finds all the boards using a specified Kconfig option and runs both CrOS and non-CrOS abuilds on them to make sure they're working. Nobody wants to run the full what-jenkins-does build on their host machine. Hopefully this can help get some tests run locally before pushing to coreboot.org. Signed-off-by: Martin Roth <gaumless@gmail.com> Change-Id: Ifc71c28bf64a805f203a815a9468ff9fe882aad3 Reviewed-on: https://review.coreboot.org/c/coreboot/+/68956 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
This commit is contained in:
parent
f158c9c961
commit
815c3634e3
|
@ -0,0 +1,180 @@
|
|||
#!/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 "$@"
|
Loading…
Reference in New Issue