runbitbake.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/bin/sh
  2. files=`find $1 -name "*.bb"`
  3. total=`find $1 -name "*.bb" | wc -l`
  4. top=`pwd`/$1
  5. skip_nums=$2
  6. suffix=`date +%Y%m%d_%H-%M-%S`
  7. result_report=$1/result_${suffix}_report.txt
  8. bitbake_log=$1/bitbake_${suffix}_log.txt
  9. function print_red(){
  10. echo $1 >>$bitbake_log
  11. echo -e '\033[0;31;1m'$1'\033[0m'
  12. }
  13. function print_green(){
  14. echo $1 >>$bitbake_log
  15. echo -e '\033[0;32;1m'$1'\033[0m'
  16. }
  17. function find_dep(){
  18. local path="${BUILDDIR}/tmp-glibc/deploy/deb/"
  19. local dep_num=`find $path -name "*$1*" | wc -l`
  20. print_green "========= [$1] deb file($dep_num) ======= "
  21. result=`find $path -name "*$1*"`
  22. for file in $result
  23. do
  24. print_green ${file##*/}
  25. done
  26. print_green "========= output end ================== "
  27. return $dep_num
  28. }
  29. function run_command()
  30. {
  31. local start_time=$(date +"%s")
  32. $1 $2 >/dev/null
  33. local ret=$?
  34. local end_time=$(date +"%s")
  35. local tdiff=$(($end_time-$start_time))
  36. local hours=$(($tdiff / 3600 ))
  37. local mins=$((($tdiff % 3600) / 60))
  38. local secs=$(($tdiff % 60))
  39. echo
  40. if [ $ret -eq 0 ] ; then
  41. print_green "#### make completed successfully "
  42. find_dep $2
  43. printf "%-03s\t%-050s\t%-012s\t%-10s\t%s\n" $3 $2 "OK" $? $4 >>$result_report
  44. else
  45. print_red "#### make failed to build [$2]"
  46. printf "%-03s\t%-050s\t%-012s\t%-10s\t%s\n" $3 $2 "NG" 0 $4 >>$result_report
  47. fi
  48. if [ $hours -gt 0 ] ; then
  49. printf "(%02g:%02g:%02g (hh:mm:ss))" $hours $mins $secs
  50. elif [ $mins -gt 0 ] ; then
  51. printf "(%02g:%02g (mm:ss))" $mins $secs
  52. elif [ $secs -gt 0 ] ; then
  53. printf "(%s seconds)" $secs
  54. fi
  55. echo -e " ####"
  56. return $ret
  57. }
  58. function report_result() {
  59. local ok_num=`cat $result_report|grep "OK"|wc -l`
  60. local ng_num=`cat $result_report|grep "NG"|wc -l`
  61. print_green "#############bitbake result:################"
  62. print_green "Total number of files:[$total]"
  63. print_green "OK number of files:[$ok_num]"
  64. print_green "NG number of files:[$ng_num]"
  65. print_green "#############bitbake end####################"
  66. print_green "Detailed report results are as follows:"
  67. print_green "############################################"
  68. print_red $result_report
  69. print_red $bitbake_log
  70. print_green "############################################"
  71. }
  72. function bitbake_run() {
  73. print_red "Total number of files:[$total]"
  74. print_red "Working directory:[$top]"
  75. local num=1
  76. for file in $files
  77. do
  78. filename=${file##*/}
  79. temp_filename=${filename%.*}
  80. bbname=${temp_filename%%_*}
  81. if [ "x$1" = "x" ] || [ $num -ge $1 ]; then
  82. print_green "[$num/$total] = $file"
  83. print_green "[bitbake $bbname]"
  84. run_command bitbake $bbname $num $file
  85. fi
  86. num=$(($num+1))
  87. done
  88. report_result
  89. }
  90. if [ "x$skip_nums" = "x" ];then
  91. if [ -f $result_report ];then
  92. rm -f $result_report
  93. fi
  94. touch $result_report
  95. else
  96. print_red "Skip $skip_nums files"
  97. fi
  98. Build_time=`date`
  99. print_red "Build time:$Build_time"
  100. bitbake_run $skip_nums