-
Notifications
You must be signed in to change notification settings - Fork 522
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
1 parent
f158c9c
commit 815c363
Showing
1 changed file
with
180 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 "$@" |