abuild: fix cross compiler test

Actually abort if a cross compiler is missing, but also handle
subarchitectures (currently: armv4 and armv7 for arm)
properly.

Change-Id: Idf37fb029178df6f2ac029466c66aaa2010bdbd2
Signed-off-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-on: http://review.coreboot.org/7297
Tested-by: build bot (Jenkins)
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
diff --git a/util/abuild/abuild b/util/abuild/abuild
index b72e212..72606c1 100755
--- a/util/abuild/abuild
+++ b/util/abuild/abuild
@@ -286,8 +286,8 @@
 	create_buildenv $VENDOR $MAINBOARD $CONFIG
 
 	required_arches=`egrep "^CONFIG_ARCH_(BOOTBLOCK|R.MSTAGE)" $TARGET/${VENDOR}_${MAINBOARD}/config.build | \
-			sed "s,^CONFIG_ARCH_[^_]*_\([^=]*\)=.*$,\1," |sort -u |tr 'A-Z' 'a-z'`
-	missing_arches=`printf 'include .xcompile\nall: ; @echo $(foreach arch,'$required_arches',$(if $(filter $(arch),$(ARCH_SUPPORTED)),,$(arch)))' | make -f -`
+			sed "s,^CONFIG_ARCH_[^_]*_\([^=]*\)=.*$,\1," |sort -u |tr 'A-Z\n\r' 'a-z  '`
+	missing_arches=`printf 'include .xcompile\nall: ; @echo $(foreach arch,'"$required_arches"',$(if $(filter $(arch),$(SUBARCH_SUPPORTED)),,$(arch)))' | make -f -`
 	if [ -n "$missing_arches" ]; then
 		printf "skipping $VENDOR/$MAINBOARD because we're missing compilers for ($missing_arches)\n"
 		return
diff --git a/util/xcompile/xcompile b/util/xcompile/xcompile
index e498cc0..7bb6e4c 100755
--- a/util/xcompile/xcompile
+++ b/util/xcompile/xcompile
@@ -151,6 +151,7 @@
 	cat <<EOF
 # elf${TWIDTH}-${TBFDARCH} toolchain (${GCCPREFIX}gcc)
 ARCH_SUPPORTED+=${TARCH}
+SUBARCH_SUPPORTED+=${TSUPP-${TARCH}}
 CC_${TARCH}:=${GCCPREFIX}gcc
 CFLAGS_${TARCH}:=${CFLAGS}
 CPP_${TARCH}:=${GCCPREFIX}cpp
@@ -174,6 +175,7 @@
 	TBFDARCH="littlearm"
 	TCLIST="armv7a armv7-a"
 	TWIDTH="32"
+	TSUPP="arm armv4 armv7"
 	TABI="eabi"
 }