Skip to content

Commit

Permalink
util/scripts: Add script to run abuild on specific SOCs
Browse files Browse the repository at this point in the history
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
martinlroth committed Nov 10, 2022
1 parent f158c9c commit 815c363
Showing 1 changed file with 180 additions and 0 deletions.
180 changes: 180 additions & 0 deletions util/scripts/testsoc
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 "$@"

0 comments on commit 815c363

Please sign in to comment.