This allows the user to pass one or more arguments through the testsoc script to abuild. Example: testsoc -K SOC_AMD_CEZANNE -a "--skip_unset BOARD_GOOGLE_NIPPERKIN" Signed-off-by: Martin Roth <gaumless@gmail.com> Change-Id: Ic2bc8d656022560ed1eebf6eee0512d3633ebe84 Reviewed-on: https://review.coreboot.org/c/coreboot/+/72766 Reviewed-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-by: Fred Reitberger <reitbergerfred@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
		
			
				
	
	
		
			189 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 | |
| 
 | |
| # Extra arguments to pass to abuild
 | |
| ABUILD_ARGS=""
 | |
| 
 | |
| # 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:
 | |
|  -a | --abuild "<text>"  Specify options to pass to abuild
 | |
|  -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,abuild: -o a:C:K:nDhV -- "$@")"; then
 | |
| 		usage
 | |
| 		exit 1
 | |
| 	fi
 | |
| 
 | |
| 	eval set -- "${args}"
 | |
| 
 | |
| 	while true; do
 | |
| 		case "$1" in
 | |
| 		-a | --abuild)
 | |
| 			shift
 | |
| 			ABUILD_ARGS=$1
 | |
| 			;;
 | |
| 		-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}" ${ABUILD_ARGS}; 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 ${ABUILD_ARGS}; 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 "$@"
 |