]> git.ipfire.org Git - people/ms/u-boot.git/blame - MAKEALL
devkit3250: add Timll DevKit3250 board initial support
[people/ms/u-boot.git] / MAKEALL
CommitLineData
f2352877 1#!/bin/bash
0777eafb
WD
2# Tool mainly for U-Boot Quality Assurance: build one or more board
3# configurations with minimal verbosity, showing only warnings and
4# errors.
0777eafb 5
d8e392d9
MF
6usage()
7{
8 # if exiting with 0, write to stdout, else write to stderr
9 local ret=${1:-0}
10 [ "${ret}" -eq 1 ] && exec 1>&2
11 cat <<-EOF
12 Usage: MAKEALL [options] [--] [boards-to-build]
13
14 Options:
15 -a ARCH, --arch ARCH Build all boards with arch ARCH
16 -c CPU, --cpu CPU Build all boards with cpu CPU
17 -v VENDOR, --vendor VENDOR Build all boards with vendor VENDOR
18 -s SOC, --soc SOC Build all boards with soc SOC
7f79c6f2 19 -l, --list List all targets to be built
9b96c6b1
MV
20 -m, --maintainers List all targets and maintainer email
21 -M, --mails List all targets and all affilated emails
d8e392d9
MF
22 -h, --help This help output
23
24 Selections by these options are logically ANDed; if the same option
25 is used repeatedly, such selections are ORed. So "-v FOO -v BAR"
26 will select all configurations where the vendor is either FOO or
27 BAR. Any additional arguments specified on the command line are
28 always build additionally. See the boards.cfg file for more info.
29
30 If no boards are specified, then the default is "powerpc".
31
32 Environment variables:
33 BUILD_NCPUS number of parallel make jobs (default: auto)
34 CROSS_COMPILE cross-compiler toolchain prefix (default: "")
35 MAKEALL_LOGDIR output all logs to here (default: ./LOG/)
36 BUILD_DIR output build directory (default: ./)
f588bb03 37 BUILD_NBUILDS number of parallel targets (default: 1)
d8e392d9
MF
38
39 Examples:
40 - build all Power Architecture boards:
41 MAKEALL -a powerpc
42 MAKEALL --arch powerpc
43 MAKEALL powerpc
44 - build all PowerPC boards manufactured by vendor "esd":
45 MAKEALL -a powerpc -v esd
46 - build all PowerPC boards manufactured either by "keymile" or "siemens":
47 MAKEALL -a powerpc -v keymile -v siemens
48 - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
49 MAKEALL -c mpc83xx -v freescale 4xx
50 EOF
51 exit ${ret}
52}
53
9b96c6b1
MV
54SHORT_OPTS="ha:c:v:s:lmM"
55LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails"
0777eafb
WD
56
57# Option processing based on util-linux-2.13/getopt-parse.bash
58
071bc923 59# Note that we use `"$@"' to let each command-line parameter expand to a
0777eafb
WD
60# separate word. The quotes around `$@' are essential!
61# We need TEMP as the `eval set --' would nuke the return value of
62# getopt.
63TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \
64 -n 'MAKEALL' -- "$@"`
65
d8e392d9 66[ $? != 0 ] && usage 1
0777eafb
WD
67
68# Note the quotes around `$TEMP': they are essential!
69eval set -- "$TEMP"
70
71SELECTED=''
7f79c6f2 72ONLY_LIST=''
9b96c6b1
MV
73PRINT_MAINTS=''
74MAINTAINERS_ONLY=''
0777eafb
WD
75
76while true ; do
77 case "$1" in
78 -a|--arch)
79 # echo "Option ARCH: argument \`$2'"
80 if [ "$opt_a" ] ; then
81 opt_a="${opt_a%)} || \$2 == \"$2\")"
82 else
83 opt_a="(\$2 == \"$2\")"
84 fi
85 SELECTED='y'
86 shift 2 ;;
87 -c|--cpu)
88 # echo "Option CPU: argument \`$2'"
89 if [ "$opt_c" ] ; then
90 opt_c="${opt_c%)} || \$3 == \"$2\")"
91 else
92 opt_c="(\$3 == \"$2\")"
93 fi
94 SELECTED='y'
95 shift 2 ;;
96 -s|--soc)
97 # echo "Option SoC: argument \`$2'"
98 if [ "$opt_s" ] ; then
99 opt_s="${opt_s%)} || \$6 == \"$2\")"
100 else
101 opt_s="(\$6 == \"$2\")"
102 fi
103 SELECTED='y'
104 shift 2 ;;
105 -v|--vendor)
106 # echo "Option VENDOR: argument \`$2'"
107 if [ "$opt_v" ] ; then
108 opt_v="${opt_v%)} || \$5 == \"$2\")"
109 else
110 opt_v="(\$5 == \"$2\")"
111 fi
112 SELECTED='y'
113 shift 2 ;;
7f79c6f2
MV
114 -l|--list)
115 ONLY_LIST='y'
116 shift ;;
9b96c6b1
MV
117 -m|--maintainers)
118 ONLY_LIST='y'
119 PRINT_MAINTS='y'
120 MAINTAINERS_ONLY='y'
121 shift ;;
122 -M|--mails)
123 ONLY_LIST='y'
124 PRINT_MAINTS='y'
125 shift ;;
d8e392d9
MF
126 -h|--help)
127 usage ;;
0777eafb
WD
128 --)
129 shift ; break ;;
130 *)
131 echo "Internal error!" >&2 ; exit 1 ;;
132 esac
133done
134# echo "Remaining arguments:"
135# for arg do echo '--> '"\`$arg'" ; done
136
137FILTER="\$1 !~ /^#/"
138[ "$opt_a" ] && FILTER="${FILTER} && $opt_a"
139[ "$opt_c" ] && FILTER="${FILTER} && $opt_c"
140[ "$opt_s" ] && FILTER="${FILTER} && $opt_s"
141[ "$opt_v" ] && FILTER="${FILTER} && $opt_v"
142
143if [ "$SELECTED" ] ; then
144 SELECTED=$(awk '('"$FILTER"') { print $1 }' boards.cfg)
cd57b0bb
PT
145
146 # Make sure some boards from boards.cfg are actually found
147 if [ -z "$SELECTED" ] ; then
148 echo "Error: No boards selected, invalid arguments"
149 exit 1
150 fi
0777eafb
WD
151fi
152
153#########################################################################
154
40a28f08
PT
155# Print statistics when we exit
156trap exit 1 2 3 15
157trap print_stats 0
158
7fa6a2f3
WD
159# Determine number of CPU cores if no default was set
160: ${BUILD_NCPUS:="`getconf _NPROCESSORS_ONLN`"}
161
162if [ "$BUILD_NCPUS" -gt 1 ]
163then
55f786d8 164 JOBS="-j $((BUILD_NCPUS + 1))"
7fa6a2f3
WD
165else
166 JOBS=""
167fi
168
a8c7c708 169
7ebf7443
WD
170if [ "${CROSS_COMPILE}" ] ; then
171 MAKE="make CROSS_COMPILE=${CROSS_COMPILE}"
172else
173 MAKE=make
174fi
175
f9328639
MB
176if [ "${MAKEALL_LOGDIR}" ] ; then
177 LOG_DIR=${MAKEALL_LOGDIR}
178else
179 LOG_DIR="LOG"
180fi
887e2ec9 181
f588bb03
AF
182: ${BUILD_NBUILDS:=1}
183BUILD_MANY=0
184
185if [ "${BUILD_NBUILDS}" -gt 1 ] ; then
186 BUILD_MANY=1
187 : ${BUILD_DIR:=./build}
188 mkdir -p "${BUILD_DIR}/ERR"
189 find "${BUILD_DIR}/ERR/" -type f -exec rm -f {} +
f9328639
MB
190fi
191
f588bb03
AF
192: ${BUILD_DIR:=.}
193
194OUTPUT_PREFIX="${BUILD_DIR}"
195
196[ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1
197find "${LOG_DIR}/" -type f -exec rm -f {} +
7ebf7443
WD
198
199LIST=""
200
40a28f08
PT
201# Keep track of the number of builds and errors
202ERR_CNT=0
203ERR_LIST=""
204TOTAL_CNT=0
f588bb03
AF
205CURRENT_CNT=0
206OLDEST_IDX=1
f2352877 207RC=0
40a28f08 208
9ec49f8f
MF
209# Helper funcs for parsing boards.cfg
210boards_by_field()
211{
212 awk \
213 -v field="$1" \
214 -v select="$2" \
215 '($1 !~ /^#/ && $field == select) { print $1 }' \
216 boards.cfg
217}
218boards_by_arch() { boards_by_field 2 "$@" ; }
219boards_by_cpu() { boards_by_field 3 "$@" ; }
0a41edaa 220boards_by_soc() { boards_by_field 6 "$@" ; }
9ec49f8f 221
0db5bca8
WD
222#########################################################################
223## MPC5xx Systems
224#########################################################################
225
9ec49f8f 226LIST_5xx="$(boards_by_cpu mpc5xx)"
0db5bca8 227
945af8d7
WD
228#########################################################################
229## MPC5xxx Systems
230#########################################################################
231
2ae18241 232LIST_5xxx="$(boards_by_cpu mpc5xxx)"
945af8d7 233
8993e54b
RJ
234#########################################################################
235## MPC512x Systems
236#########################################################################
237
2ae18241 238LIST_512x="$(boards_by_cpu mpc512x)"
945af8d7 239
7ebf7443
WD
240#########################################################################
241## MPC8xx Systems
242#########################################################################
9ec49f8f 243
2ae18241 244LIST_8xx="$(boards_by_cpu mpc8xx)"
7ebf7443
WD
245
246#########################################################################
247## PPC4xx Systems
248#########################################################################
249
2ae18241 250LIST_4xx="$(boards_by_cpu ppc4xx)"
7ebf7443 251
983fda83
WD
252#########################################################################
253## MPC8220 Systems
254#########################################################################
255
9ec49f8f 256LIST_8220="$(boards_by_cpu mpc8220)"
983fda83 257
7ebf7443
WD
258#########################################################################
259## MPC824x Systems
260#########################################################################
261
2ae18241 262LIST_824x="$(boards_by_cpu mpc824x)"
592c5cab 263
7ebf7443 264#########################################################################
7aa78614 265## MPC8260 Systems (includes 8250, 8255 etc.)
7ebf7443
WD
266#########################################################################
267
2ae18241 268LIST_8260="$(boards_by_cpu mpc8260)"
7ebf7443 269
f046ccd1
EL
270#########################################################################
271## MPC83xx Systems (includes 8349, etc.)
272#########################################################################
273
2ae18241 274LIST_83xx="$(boards_by_cpu mpc83xx)"
f046ccd1 275
42d1f039
WD
276#########################################################################
277## MPC85xx Systems (includes 8540, 8560 etc.)
278#########################################################################
279
2ae18241 280LIST_85xx="$(boards_by_cpu mpc85xx)"
42d1f039 281
822d5536
JL
282#########################################################################
283## MPC86xx Systems
284#########################################################################
285
2ae18241 286LIST_86xx="$(boards_by_cpu mpc86xx)"
822d5536 287
7ebf7443
WD
288#########################################################################
289## 74xx/7xx Systems
290#########################################################################
291
2ae18241 292LIST_74xx_7xx="$(boards_by_cpu 74xx_7xx)"
7ebf7443 293
d9a42c0a
WD
294#########################################################################
295## PowerPC groups
296#########################################################################
297
298LIST_TSEC=" \
299 ${LIST_83xx} \
300 ${LIST_85xx} \
301 ${LIST_86xx} \
302"
303
a47a12be 304LIST_powerpc=" \
fb56579f 305 ${LIST_5xx} \
3deca9d4 306 ${LIST_512x} \
fb56579f
KP
307 ${LIST_5xxx} \
308 ${LIST_8xx} \
309 ${LIST_8220} \
310 ${LIST_824x} \
311 ${LIST_8260} \
312 ${LIST_83xx} \
313 ${LIST_85xx} \
314 ${LIST_86xx} \
315 ${LIST_4xx} \
2ae18241 316 ${LIST_74xx_7xx}\
fb56579f 317"
7ebf7443 318
a47a12be
SR
319# Alias "ppc" -> "powerpc" to not break compatibility with older scripts
320# still using "ppc" instead of "powerpc"
321LIST_ppc=" \
322 ${LIST_powerpc} \
323"
324
7ebf7443
WD
325#########################################################################
326## StrongARM Systems
327#########################################################################
328
9ec49f8f 329LIST_SA="$(boards_by_cpu sa1100)"
7ebf7443 330
7ebf7443
WD
331#########################################################################
332## ARM9 Systems
333#########################################################################
334
6a8760d7
WD
335LIST_ARM9="$(boards_by_cpu arm920t) \
336 $(boards_by_cpu arm926ejs) \
337 $(boards_by_cpu arm925t) \
6f21347d 338"
7ebf7443 339
8ed96046
WD
340#########################################################################
341## ARM11 Systems
342#########################################################################
6a8760d7 343LIST_ARM11="$(boards_by_cpu arm1136) \
0c692673
GL
344 imx31_phycore \
345 imx31_phycore_eet \
8449f287 346 mx31pdk \
0c692673 347 smdk6400 \
74f4304e 348"
8ed96046 349
f904cdbb 350#########################################################################
f56348af 351## ARMV7 Systems
f904cdbb 352#########################################################################
f37586bb
DB
353
354LIST_ARMV7="$(boards_by_cpu armv7)"
f904cdbb 355
602cac13
JCPV
356#########################################################################
357## AT91 Systems
358#########################################################################
359
5cfeec51 360LIST_at91="$(boards_by_soc at91)"
602cac13 361
7ebf7443
WD
362#########################################################################
363## Xscale Systems
364#########################################################################
365
7c957c0e 366LIST_pxa="$(boards_by_cpu pxa)"
7ebf7443 367
9ec49f8f 368LIST_ixp="$(boards_by_cpu ixp)
fb56579f
KP
369 pdnb3 \
370 scpu \
371"
7ebf7443 372
d9a42c0a
WD
373#########################################################################
374## ARM groups
375#########################################################################
2d5b561e 376
f904cdbb
DB
377LIST_arm=" \
378 ${LIST_SA} \
f904cdbb
DB
379 ${LIST_ARM9} \
380 ${LIST_ARM10} \
381 ${LIST_ARM11} \
f56348af 382 ${LIST_ARMV7} \
f904cdbb
DB
383 ${LIST_at91} \
384 ${LIST_pxa} \
385 ${LIST_ixp} \
8ed96046 386"
7ebf7443 387
c021880a 388#########################################################################
b62bdffb 389## MIPS Systems (default = big endian)
c021880a
WD
390#########################################################################
391
fb56579f
KP
392LIST_mips4kc=" \
393 incaip \
0764c164 394 qemu_mips \
2a61eff6
SR
395 vct_platinum \
396 vct_platinum_small \
397 vct_platinum_onenand \
398 vct_platinum_onenand_small \
399 vct_platinumavc \
400 vct_platinumavc_small \
401 vct_platinumavc_onenand \
402 vct_platinumavc_onenand_small \
403 vct_premium \
404 vct_premium_small \
405 vct_premium_onenand \
406 vct_premium_onenand_small \
fb56579f 407"
c021880a 408
fb56579f
KP
409LIST_au1xx0=" \
410 dbau1000 \
411 dbau1100 \
412 dbau1500 \
413 dbau1550 \
fb56579f
KP
414 gth2 \
415"
5da627a4 416
fb56579f
KP
417LIST_mips=" \
418 ${LIST_mips4kc} \
419 ${LIST_mips5kc} \
420 ${LIST_au1xx0} \
421"
c021880a 422
b62bdffb
WD
423#########################################################################
424## MIPS Systems (little endian)
425#########################################################################
426
92b09095 427LIST_xburst_el=" \
3c945542
XL
428 qi_lb60 \
429"
b62bdffb 430
fb56579f
KP
431LIST_au1xx0_el=" \
432 dbau1550_el \
b09258c5 433 pb1000 \
fb56579f 434"
fb56579f 435LIST_mips_el=" \
92b09095 436 ${LIST_xburst_el} \
fb56579f
KP
437 ${LIST_au1xx0_el} \
438"
deddf5d2
SK
439#########################################################################
440## OpenRISC Systems
441#########################################################################
442
443LIST_openrisc="$(boards_by_arch openrisc)"
b62bdffb 444
7a8e9bed 445#########################################################################
fea25720 446## x86 Systems
7a8e9bed
WD
447#########################################################################
448
fea25720 449LIST_x86="$(boards_by_arch x86)"
7a8e9bed 450
5c952cf0
WD
451#########################################################################
452## Nios-II Systems
453#########################################################################
454
4827d067 455LIST_nios2="$(boards_by_arch nios2)"
5c952cf0 456
857cad37
WD
457#########################################################################
458## MicroBlaze Systems
459#########################################################################
460
9ec49f8f 461LIST_microblaze="$(boards_by_arch microblaze)"
857cad37 462
f8c3b4f3
ZL
463#########################################################################
464## ColdFire Systems
465#########################################################################
466
c13f47b0 467LIST_m68k="$(boards_by_arch m68k)
fb56579f
KP
468 EB+MCF-EV123 \
469 EB+MCF-EV123_internal \
1552af70 470 M52277EVB \
4a442d31 471 M5235EVB \
05316f8e 472 M54451EVB \
8ae158cd 473 M54455EVB \
9acb626f 474"
c13f47b0 475LIST_coldfire=${LIST_m68k}
f8c3b4f3 476
6ccec449
WD
477#########################################################################
478## AVR32 Systems
479#########################################################################
480
9ec49f8f 481LIST_avr32="$(boards_by_arch avr32)"
6ccec449 482
ef26a08f
AL
483#########################################################################
484## Blackfin Systems
485#########################################################################
486
36cf8cb4 487LIST_blackfin="$(boards_by_arch blackfin)"
ef26a08f 488
c7144373
JCPV
489#########################################################################
490## SH Systems
491#########################################################################
492
e0f0e527 493LIST_sh2="$(boards_by_cpu sh2)"
3771c69d 494LIST_sh3="$(boards_by_cpu sh3)"
03626be3 495LIST_sh4="$(boards_by_cpu sh4)"
d9a42c0a 496
03626be3 497LIST_sh="$(boards_by_arch sh)"
c7144373 498
c2f02da2
DH
499#########################################################################
500## SPARC Systems
501#########################################################################
502
9ec49f8f 503LIST_sparc="$(boards_by_arch sparc)"
7ebf7443 504
5f1719c1
ML
505#########################################################################
506## NDS32 Systems
507#########################################################################
508
509LIST_nds32="$(boards_by_arch nds32)"
510
7ebf7443
WD
511#-----------------------------------------------------------------------
512
9b96c6b1
MV
513get_target_location() {
514 local target=$1
515 local BOARD_NAME=""
516 local CONFIG_NAME=""
517 local board=""
518 local vendor=""
519
520 # Automatic mode
521 local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg`
522
523 if [ -z "${line}" ] ; then echo "" ; return ; fi
524
525 set ${line}
526
527 # add default board name if needed
528 [ $# = 3 ] && set ${line} ${1}
529
530 CONFIG_NAME="${1%_config}"
531
532 [ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"
533
534 if [ "$4" = "-" ] ; then
535 board=${BOARD_NAME}
536 else
537 board="$4"
538 fi
539
540 [ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5"
541 [ $# -gt 6 ] && [ "$7" != "-" ] && {
542 tmp="${7%:*}"
543 if [ "$tmp" ] ; then
544 CONFIG_NAME="$tmp"
545 fi
546 }
547
548 # Assign board directory to BOARDIR variable
549 if [ -z "${vendor}" ] ; then
550 BOARDDIR=${board}
551 else
552 BOARDDIR=${vendor}/${board}
553 fi
554
555 echo "${CONFIG_NAME}:${BOARDDIR}"
556}
557
558get_target_maintainers() {
559 local name=`echo $1 | cut -d : -f 1`
560
561 if ! grep -qsi "[[:blank:]]${name}[[:blank:]]" MAINTAINERS ; then
562 echo ""
563 return ;
564 fi
565
566 local line=`tac MAINTAINERS | grep -ni "[[:blank:]]${name}[[:blank:]]" | cut -d : -f 1`
567 local mail=`tac MAINTAINERS | tail -n +${line} | \
568 sed -n ":start /.*@.*/ { b mail } ; n ; b start ; :mail /.*@.*/ { p ; n ; b mail } ; q" | \
569 sed "s/^.*<//;s/>.*$//"`
570 echo "$mail"
571}
572
573list_target() {
574 if [ "$PRINT_MAINTS" != 'y' ] ; then
575 echo "$1"
576 return
577 fi
578
579 echo -n "$1:"
580
581 local loc=`get_target_location $1`
582
583 if [ -z "${loc}" ] ; then echo "ERROR" ; return ; fi
584
585 local maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"`
586
587 if [ "$MAINTAINERS_ONLY" != 'y' ] ; then
588
589 local dir=`echo ${loc} | cut -d ":" -f 2`
590 local cfg=`echo ${loc} | cut -d ":" -f 1`
591 local git_result=`git log --format=%aE board/${dir} \
592 include/configs/${cfg}.h | grep "@"`
593 local git_result_recent=`echo ${git_result} | tr " " "\n" | \
594 head -n 3`
595 local git_result_top=`echo ${git_result} | tr " " "\n" | \
596 sort | uniq -c | sort -nr | head -n 3 | \
597 sed "s/^ \+[0-9]\+ \+//"`
598
599 echo -e "$git_result_recent\n$git_result_top\n$maintainers_result" | \
600 sort -u | tr "\n" " " | sed "s/ $//" ;
601 else
602 echo -e "$maintainers_result" | sort -u | tr "\n" " " | \
603 sed "s/ $//" ;
604 fi
605
606 echo ""
607}
608
f588bb03
AF
609# Each finished build will have a file called ${donep}${n},
610# where n is the index of the build. Each build
611# we've already noted as finished will have ${skipp}${n}.
612# The code managing the build process will use this information
613# to ensure that only BUILD_NBUILDS builds are in flight at once
614donep="${LOG_DIR}/._done_"
615skipp="${LOG_DIR}/._skip_"
616
7ebf7443
WD
617build_target() {
618 target=$1
f588bb03
AF
619 build_idx=$2
620
621 if [ $BUILD_MANY == 1 ] ; then
622 output_dir="${OUTPUT_PREFIX}/${target}"
623 mkdir -p "${output_dir}"
624 else
625 output_dir="${OUTPUT_PREFIX}"
626 fi
627
628 export BUILD_DIR="${output_dir}"
7ebf7443 629
7f79c6f2 630 if [ "$ONLY_LIST" == 'y' ] ; then
9b96c6b1 631 list_target ${target}
7f79c6f2
MV
632 return
633 fi
634
7ebf7443 635 ${MAKE} distclean >/dev/null
d70d8ccc 636 ${MAKE} -s ${target}_config
f9328639 637
f588bb03
AF
638 ${MAKE} ${JOBS} all \
639 >${LOG_DIR}/$target.MAKELOG 2> ${LOG_DIR}/$target.ERR
f2352877
PT
640
641 # Check for 'make' errors
642 if [ ${PIPESTATUS[0]} -ne 0 ] ; then
643 RC=1
644 fi
645
f588bb03
AF
646 if [ $BUILD_MANY == 1 ] ; then
647 ${MAKE} tidy
648
649 if [ -s ${LOG_DIR}/${target}.ERR ] ; then
650 touch ${OUTPUT_PREFIX}/ERR/${target}
651 else
652 rm ${LOG_DIR}/${target}.ERR
653 fi
40a28f08 654 else
f588bb03
AF
655 if [ -s ${LOG_DIR}/${target}.ERR ] ; then
656 : $(( ERR_CNT += 1 ))
657 ERR_LIST="${ERR_LIST} $target"
658 else
659 rm ${LOG_DIR}/${target}.ERR
660 fi
40a28f08
PT
661 fi
662
f588bb03
AF
663 OBJS=${output_dir}/u-boot
664 if [ -e ${output_dir}/spl/u-boot-spl ]; then
665 OBJS="${OBJS} ${output_dir}/spl/u-boot-spl"
0c185696
SW
666 fi
667
668 ${CROSS_COMPILE}size ${OBJS} | tee -a ${LOG_DIR}/$target.MAKELOG
f588bb03
AF
669
670 [ -e "${LOG_DIR}/${target}.ERR" ] && cat "${LOG_DIR}/${target}.ERR"
671
672 #echo "Writing ${donep}${build_idx}"
673 touch "${donep}${build_idx}"
7ebf7443 674}
f588bb03
AF
675
676manage_builds() {
677 search_idx=${OLDEST_IDX}
678 #echo "Searching ${OLDEST_IDX} to ${TOTAL_CNT}"
679 while true; do
680 if [ -e "${donep}${search_idx}" ] ; then
681 # echo "Found ${donep}${search_idx}"
682 : $(( CURRENT_CNT-- ))
683 [ ${OLDEST_IDX} -eq ${search_idx} ] &&
684 : $(( OLDEST_IDX++ ))
685
686 # Only want to count it once
687 rm -f "${donep}${search_idx}"
688 touch "${skipp}${search_idx}"
689 elif [ -e "${skipp}${search_idx}" ] ; then
690 [ ${OLDEST_IDX} -eq ${search_idx} ] &&
691 : $(( OLDEST_IDX++ ))
692 fi
693 #echo "Checking search ${search_idx} vs ${TOTAL_CNT}"
694 : $(( search_idx++ ))
695 if [ ${search_idx} -gt ${TOTAL_CNT} ] ; then
696 #echo "Checking current ${CURRENT_CNT} vs ${BUILD_NBUILDS}"
697 if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then
698 search_idx=${OLDEST_IDX}
699 sleep 1
700 else
701 break
702 fi
703 fi
704 done
705}
706
9ec49f8f
MF
707build_targets() {
708 for t in "$@" ; do
709 # If a LIST_xxx var exists, use it. But avoid variable
710 # expansion in the eval when a board name contains certain
711 # characters that the shell interprets.
712 case ${t} in
713 *[-+=]*) list= ;;
714 *) list=$(eval echo '${LIST_'$t'}') ;;
715 esac
716 if [ -n "${list}" ] ; then
717 build_targets ${list}
718 else
f588bb03
AF
719 : $((TOTAL_CNT += 1))
720 : $((CURRENT_CNT += 1))
721 rm -f "${donep}${TOTAL_CNT}"
722 rm -f "${skipp}${TOTAL_CNT}"
723 build_target ${t} ${TOTAL_CNT} &
724 fi
725
726 # We maintain a running count of all the builds we have done.
727 # Each finished build will have a file called ${donep}${n},
728 # where n is the index of the build. Each build
729 # we've already noted as finished will have ${skipp}${n}.
730 # We track the current index via TOTAL_CNT, and the oldest
731 # index. When we exceed the maximum number of parallel builds,
732 # We look from oldest to current for builds that have completed,
733 # and update the current count and oldest index as appropriate.
734 # If we've gone through the entire list, wait a second, and
735 # reprocess the entire list until we find a build that has
736 # completed
737 if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then
738 manage_builds
9ec49f8f
MF
739 fi
740 done
741}
7ebf7443
WD
742
743#-----------------------------------------------------------------------
744
40a28f08 745print_stats() {
7f79c6f2 746 if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
f588bb03
AF
747
748 rm -f ${donep}* ${skipp}*
749
750 if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
751 ERR_LIST=$(ls ${OUTPUT_PREFIX}/ERR/)
752 ERR_CNT=`ls -1 ${OUTPUT_PREFIX}/ERR/ | wc | awk '{print $1}'`
753 else
754 ERR_CNT=0
755 fi
756
40a28f08
PT
757 echo ""
758 echo "--------------------- SUMMARY ----------------------------"
759 echo "Boards compiled: ${TOTAL_CNT}"
760 if [ ${ERR_CNT} -gt 0 ] ; then
761 echo "Boards with warnings or errors: ${ERR_CNT} (${ERR_LIST} )"
762 fi
763 echo "----------------------------------------------------------"
f2352877
PT
764
765 exit $RC
40a28f08 766}
7ebf7443 767
40a28f08 768#-----------------------------------------------------------------------
9ec49f8f 769
0777eafb
WD
770# Build target groups selected by options, plus any command line args
771set -- ${SELECTED} "$@"
772# run PowerPC by default
9ec49f8f 773[ $# = 0 ] && set -- powerpc
9ec49f8f 774build_targets "$@"
f588bb03 775wait