123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #!/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=""
- fi
- MAKE="${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
- hppa) echo hppa hppa2.0 hppa1.1 hppa1.0;;
- i386) echo i386 i486 i586 i686;;
- sh) echo sh4 sh2 sh3 sh1 sh;;
- sparc) echo sparc sparc64;;
- *) echo $1;;
- esac
- }
- find_compiler()
- {
- local t a v o l
- for a in $(get_arches $1) ; do
- for l in uclibc gnu gnueabi "" ; do
- for v in unknown pc gentoo "" ; do
- for o in linux uclinux "" ; 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)
- fi
- pass=""
- fail=""
- skip=""
- for a in "$@" ; do
- if [ -z "${CROSS_COMPILE}" ] ; then
- CROSS_COMPILE=$(find_compiler ${a})
- fi
- if [ -z "${CROSS_COMPILE}" ] ; 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_COMPILE})"
- do_make distclean
- do_make ARCH=$a defconfig
- do_make oldconfig
- setconfig CROSS_COMPILER_PREFIX ${CROSS_COMPILE}
- header_path=${KERNEL_HEADERS:-$(echo '#include <linux/version.h>' | ${CROSS_COMPILE}cpp 2>/dev/null | grep -o '[^"]*linux/version.h')} || :
- if [ -z "${header_path}" ] ; then
- for p in /usr/${CROSS_COMPILE%-}/usr/include ; do
- if [ -e ${p}/linux/version.h ] ; then
- header_path=${p}
- break
- fi
- done
- if [ -z "${header_path}" ] ; then
- echo " ## unable to locate KERNEL_HEADERS"
- fi
- fi
- 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
- fi
- unset CROSS_COMPILE
- done
- if [ -n "${skip}" ] ; then
- printf '\nSKIPPED: %s\n' "${skip}"
- fi
- if [ -n "${fail}" ] ; then
- printf '\nPASSED: %s\nFAILED: %s\n\n' "${pass}" "${fail}"
- exit 1
- else
- printf '\nAll arches passed!\n\n'
- exit 0
- fi
|