MAKEALL 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #!/bin/sh
  2. #
  3. # helper script to quick build testing with cross-compilers
  4. #
  5. : ${MAKE:=make}
  6. : ${BUILD_NCPUS:=$(getconf _NPROCESSORS_ONLN)}
  7. if [ "$BUILD_NCPUS" -gt 1 ] ; then
  8. JOBS=-j$((BUILD_NCPUS + 1))
  9. else
  10. JOBS=""
  11. fi
  12. MAKE="${MAKE} ${JOBS}"
  13. : ${CROSS_COMPILE:=${CROSS_COMPILER_PREFIX}}
  14. setconfig()
  15. {
  16. local opt=$1
  17. shift
  18. case $1 in
  19. [yn]) ;;
  20. [0-9]*) ;;
  21. *) set -- '"'$*'"'
  22. esac
  23. sed -i \
  24. -e "/${opt}=/s:=.*:=$*:" \
  25. .config
  26. echo " ## setconfig ${opt} $*"
  27. }
  28. get_arches()
  29. {
  30. case $1 in
  31. sh) echo sh4 sh2 sh3 sh1 sh;;
  32. *) echo $1;;
  33. esac
  34. }
  35. find_compiler()
  36. {
  37. local t a v o l
  38. for a in $(get_arches $1) ; do
  39. for v in unknown pc gentoo "" ; do
  40. for o in linux uclinux "" ; do
  41. for l in uclibc "" ; do
  42. t="${a}${v:+-${v}}${o:+-${o}}${l:+-${l}}"
  43. if ${t}-gcc --help > /dev/null 2>&1 ; then
  44. echo ${t}-
  45. return 0
  46. fi
  47. done
  48. done
  49. done
  50. done
  51. }
  52. do_make()
  53. {
  54. echo " ## ${MAKE} -s $*"
  55. ${MAKE} -s "$@"
  56. }
  57. mark_arch()
  58. {
  59. local r=$1 a=$2
  60. eval $r=\"\$$r $a\"
  61. }
  62. if [ -z "$*" ] ; then
  63. set -- $(awk \
  64. '$0 ~ /^config TARGET_/ { sub("TARGET_",""); print $NF }' \
  65. extra/Configs/Config.in | grep -v SUBARCH)
  66. fi
  67. pass=""
  68. fail=""
  69. skip=""
  70. for a in "$@" ; do
  71. if [ -z "${CROSS_COMPILE}" ] ; then
  72. CROSS_COMPILE=$(find_compiler ${a})
  73. fi
  74. if [ -z "${CROSS_COMPILE}" ] ; then
  75. mark_arch skip $a
  76. echo " ### SKIP: ${a}: could not find compiler"
  77. continue
  78. fi
  79. rm -f ${a}.log ${a}.fail
  80. (
  81. set -e
  82. echo " ### Building target ${a} (${CROSS_COMPILE})"
  83. do_make distclean
  84. do_make ARCH=$a defconfig
  85. do_make oldconfig
  86. setconfig CROSS_COMPILER_PREFIX ${CROSS_COMPILE}
  87. header_path=${KERNEL_HEADERS:-$(echo '#include <linux/version.h>' | ${CROSS_COMPILE}cpp 2>/dev/null | grep -o '[^"]*linux/version.h')} || :
  88. if [ -z "${header_path}" ] ; then
  89. for p in /usr/${CROSS_COMPILE%-}/usr/include ; do
  90. if [ -e ${p}/linux/version.h ] ; then
  91. header_path=${p}
  92. break
  93. fi
  94. done
  95. if [ -z "${header_path}" ] ; then
  96. echo " ## unable to locate KERNEL_HEADERS"
  97. fi
  98. fi
  99. setconfig KERNEL_HEADERS ${header_path%/linux/version.h}
  100. if do_make ; then
  101. echo " ## PASS"
  102. else
  103. echo " ## FAIL"
  104. touch ${a}.fail
  105. fi
  106. ) 2>&1 | tee ${a}.log
  107. if [ -e ${a}.fail ] ; then
  108. rm -f ${a}.fail
  109. mark_arch fail $a
  110. else
  111. mark_arch pass $a
  112. fi
  113. done
  114. if [ -n "${skip}" ] ; then
  115. printf '\nSKIPPED: %s\n' "${skip}"
  116. fi
  117. if [ -n "${fail}" ] ; then
  118. printf '\nPASSED: %s\nFAILED: %s\n\n' "${pass}" "${fail}"
  119. exit 1
  120. else
  121. printf '\nAll arches passed!\n\n'
  122. exit 0
  123. fi