| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | #!/bin/sh## helper script to quick build testing with cross-compilers#: ${MAKE:=make}: ${BUILD_NCPUS:=$(getconf _NPROCESSORS_ONLN)}if [ "$BUILD_NCPUS" -gt 1 ] ; then	JOBS=-j$((BUILD_NCPUS + 1))else	JOBS=""fiMAKE="${MAKE} ${JOBS}": ${CROSS_COMPILE:=${CROSS_COMPILER_PREFIX}}setconfig(){	local opt=$1	shift	case $1 in		[yn])   ;;		[0-9]*) ;;		*)      set -- '"'$*'"'	esac	sed -i \		-e "/${opt}=/s:=.*:=$*:" \		.config	echo "  ## setconfig ${opt} $*"}get_arches(){	case $1 in		sh) echo sh4 sh2 sh3 sh1 sh;;		*)  echo $1;;	esac}find_compiler(){	local t a v o l	for a in $(get_arches $1) ; do		for v in unknown pc gentoo "" ; do			for o in linux uclinux "" ; do				for l in uclibc "" ; do					t="${a}${v:+-${v}}${o:+-${o}}${l:+-${l}}"					if ${t}-gcc --help > /dev/null 2>&1 ; then						echo ${t}-						return 0					fi				done			done		done	done}do_make(){	echo "  ## ${MAKE} -s $*"	${MAKE} -s "$@"}mark_arch(){	local r=$1 a=$2	eval $r=\"\$$r $a\"}if [ -z "$*" ] ; then	set -- $(awk \		'$0 ~ /^config TARGET_/ { sub("TARGET_",""); print $NF }' \		extra/Configs/Config.in | grep -v SUBARCH)fipass=""fail=""skip=""for a in "$@" ; do	if [ -n "${CROSS_COMPILE}" ] ; then		CROSS=${CROSS_COMPILE}	else		CROSS=$(find_compiler ${a})	fi	if [ -z "${CROSS}" ] ; then		mark_arch skip $a		echo " ### SKIP: ${a}: could not find compiler"		continue	fi	rm -f ${a}.log ${a}.fail	(	set -e	echo " ### Building target ${a} (${CROSS})"	do_make distclean	do_make ARCH=$a defconfig	do_make oldconfig	setconfig CROSS_COMPILER_PREFIX ${CROSS}	header_path=$(echo '#include <linux/version.h>' | ${CROSS}cpp 2>&1 | grep -o '[^"]*linux/version.h')	setconfig KERNEL_HEADERS ${header_path%/linux/version.h}	if do_make ; then		echo "  ## PASS"	else		echo "  ## FAIL"		touch ${a}.fail	fi	) 2>&1 | tee ${a}.log	if [ -e ${a}.fail ] ; then		rm -f ${a}.fail		mark_arch fail $a	else		mark_arch pass $a	fidoneif [ -n "${skip}" ] ; then	printf '\nSKIPPED: %s\n' "${skip}"fiif [ -n "${fail}" ] ; then	printf '\nPASSED: %s\nFAILED: %s\n\n' "${pass}" "${fail}"	exit 1else	printf '\nAll arches passed!\n\n'	exit 0fi
 |