#!/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 < Specify number of CPUs to use (currently ${CPUS}) -K | --kconfig 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 | grep Kconfig | 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 "$@"