Commit f32c08da82eed03d2d1a00f141f531db58330f93
Committed by
Tom Rini
1 parent
8b906a9f0b
Exists in
master
and in
53 other branches
MAKEALL: allow regex matches for -s option
This allows: MAKEALL -s tegra to replace: MAKEALL -s tegra20 -s tegra30 -s tegra114 The following also works: MAKEALL -s tegra -s omap Signed-off-by: Stephen Warren <swarren@nvidia.com>
Showing 1 changed file with 2 additions and 2 deletions Inline Diff
MAKEALL
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | # Tool mainly for U-Boot Quality Assurance: build one or more board | 2 | # Tool mainly for U-Boot Quality Assurance: build one or more board |
3 | # configurations with minimal verbosity, showing only warnings and | 3 | # configurations with minimal verbosity, showing only warnings and |
4 | # errors. | 4 | # errors. |
5 | 5 | ||
6 | usage() | 6 | usage() |
7 | { | 7 | { |
8 | # if exiting with 0, write to stdout, else write to stderr | 8 | # if exiting with 0, write to stdout, else write to stderr |
9 | local ret=${1:-0} | 9 | local ret=${1:-0} |
10 | [ "${ret}" -eq 1 ] && exec 1>&2 | 10 | [ "${ret}" -eq 1 ] && exec 1>&2 |
11 | cat <<-EOF | 11 | cat <<-EOF |
12 | Usage: MAKEALL [options] [--] [boards-to-build] | 12 | Usage: MAKEALL [options] [--] [boards-to-build] |
13 | 13 | ||
14 | Options: | 14 | Options: |
15 | -a ARCH, --arch ARCH Build all boards with arch ARCH | 15 | -a ARCH, --arch ARCH Build all boards with arch ARCH |
16 | -c CPU, --cpu CPU Build all boards with cpu CPU | 16 | -c CPU, --cpu CPU Build all boards with cpu CPU |
17 | -v VENDOR, --vendor VENDOR Build all boards with vendor VENDOR | 17 | -v VENDOR, --vendor VENDOR Build all boards with vendor VENDOR |
18 | -s SOC, --soc SOC Build all boards with soc SOC | 18 | -s SOC, --soc SOC Build all boards with soc SOC |
19 | -l, --list List all targets to be built | 19 | -l, --list List all targets to be built |
20 | -m, --maintainers List all targets and maintainer email | 20 | -m, --maintainers List all targets and maintainer email |
21 | -M, --mails List all targets and all affilated emails | 21 | -M, --mails List all targets and all affilated emails |
22 | -C, --check Enable build checking | 22 | -C, --check Enable build checking |
23 | -n, --continue Continue (skip boards already built) | 23 | -n, --continue Continue (skip boards already built) |
24 | -r, --rebuild-errors Rebuild any boards that errored | 24 | -r, --rebuild-errors Rebuild any boards that errored |
25 | -h, --help This help output | 25 | -h, --help This help output |
26 | 26 | ||
27 | Selections by these options are logically ANDed; if the same option | 27 | Selections by these options are logically ANDed; if the same option |
28 | is used repeatedly, such selections are ORed. So "-v FOO -v BAR" | 28 | is used repeatedly, such selections are ORed. So "-v FOO -v BAR" |
29 | will select all configurations where the vendor is either FOO or | 29 | will select all configurations where the vendor is either FOO or |
30 | BAR. Any additional arguments specified on the command line are | 30 | BAR. Any additional arguments specified on the command line are |
31 | always build additionally. See the boards.cfg file for more info. | 31 | always build additionally. See the boards.cfg file for more info. |
32 | 32 | ||
33 | If no boards are specified, then the default is "powerpc". | 33 | If no boards are specified, then the default is "powerpc". |
34 | 34 | ||
35 | Environment variables: | 35 | Environment variables: |
36 | BUILD_NCPUS number of parallel make jobs (default: auto) | 36 | BUILD_NCPUS number of parallel make jobs (default: auto) |
37 | CROSS_COMPILE cross-compiler toolchain prefix (default: "") | 37 | CROSS_COMPILE cross-compiler toolchain prefix (default: "") |
38 | CROSS_COMPILE_<ARCH> cross-compiler toolchain prefix for | 38 | CROSS_COMPILE_<ARCH> cross-compiler toolchain prefix for |
39 | architecture "ARCH". Substitute "ARCH" for any | 39 | architecture "ARCH". Substitute "ARCH" for any |
40 | supported architecture (default: "") | 40 | supported architecture (default: "") |
41 | MAKEALL_LOGDIR output all logs to here (default: ./LOG/) | 41 | MAKEALL_LOGDIR output all logs to here (default: ./LOG/) |
42 | BUILD_DIR output build directory (default: ./) | 42 | BUILD_DIR output build directory (default: ./) |
43 | BUILD_NBUILDS number of parallel targets (default: 1) | 43 | BUILD_NBUILDS number of parallel targets (default: 1) |
44 | 44 | ||
45 | Examples: | 45 | Examples: |
46 | - build all Power Architecture boards: | 46 | - build all Power Architecture boards: |
47 | MAKEALL -a powerpc | 47 | MAKEALL -a powerpc |
48 | MAKEALL --arch powerpc | 48 | MAKEALL --arch powerpc |
49 | MAKEALL powerpc | 49 | MAKEALL powerpc |
50 | - build all PowerPC boards manufactured by vendor "esd": | 50 | - build all PowerPC boards manufactured by vendor "esd": |
51 | MAKEALL -a powerpc -v esd | 51 | MAKEALL -a powerpc -v esd |
52 | - build all PowerPC boards manufactured either by "keymile" or "siemens": | 52 | - build all PowerPC boards manufactured either by "keymile" or "siemens": |
53 | MAKEALL -a powerpc -v keymile -v siemens | 53 | MAKEALL -a powerpc -v keymile -v siemens |
54 | - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards: | 54 | - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards: |
55 | MAKEALL -c mpc83xx -v freescale 4xx | 55 | MAKEALL -c mpc83xx -v freescale 4xx |
56 | EOF | 56 | EOF |
57 | exit ${ret} | 57 | exit ${ret} |
58 | } | 58 | } |
59 | 59 | ||
60 | SHORT_OPTS="ha:c:v:s:lmMCnr" | 60 | SHORT_OPTS="ha:c:v:s:lmMCnr" |
61 | LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails,check,continue,rebuild-errors" | 61 | LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails,check,continue,rebuild-errors" |
62 | 62 | ||
63 | # Option processing based on util-linux-2.13/getopt-parse.bash | 63 | # Option processing based on util-linux-2.13/getopt-parse.bash |
64 | 64 | ||
65 | # Note that we use `"$@"' to let each command-line parameter expand to a | 65 | # Note that we use `"$@"' to let each command-line parameter expand to a |
66 | # separate word. The quotes around `$@' are essential! | 66 | # separate word. The quotes around `$@' are essential! |
67 | # We need TEMP as the `eval set --' would nuke the return value of | 67 | # We need TEMP as the `eval set --' would nuke the return value of |
68 | # getopt. | 68 | # getopt. |
69 | TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \ | 69 | TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \ |
70 | -n 'MAKEALL' -- "$@"` | 70 | -n 'MAKEALL' -- "$@"` |
71 | 71 | ||
72 | [ $? != 0 ] && usage 1 | 72 | [ $? != 0 ] && usage 1 |
73 | 73 | ||
74 | # Note the quotes around `$TEMP': they are essential! | 74 | # Note the quotes around `$TEMP': they are essential! |
75 | eval set -- "$TEMP" | 75 | eval set -- "$TEMP" |
76 | 76 | ||
77 | SELECTED='' | 77 | SELECTED='' |
78 | ONLY_LIST='' | 78 | ONLY_LIST='' |
79 | PRINT_MAINTS='' | 79 | PRINT_MAINTS='' |
80 | MAINTAINERS_ONLY='' | 80 | MAINTAINERS_ONLY='' |
81 | CONTINUE='' | 81 | CONTINUE='' |
82 | REBUILD_ERRORS='' | 82 | REBUILD_ERRORS='' |
83 | 83 | ||
84 | while true ; do | 84 | while true ; do |
85 | case "$1" in | 85 | case "$1" in |
86 | -a|--arch) | 86 | -a|--arch) |
87 | # echo "Option ARCH: argument \`$2'" | 87 | # echo "Option ARCH: argument \`$2'" |
88 | if [ "$opt_a" ] ; then | 88 | if [ "$opt_a" ] ; then |
89 | opt_a="${opt_a%)} || \$2 == \"$2\")" | 89 | opt_a="${opt_a%)} || \$2 == \"$2\")" |
90 | else | 90 | else |
91 | opt_a="(\$2 == \"$2\")" | 91 | opt_a="(\$2 == \"$2\")" |
92 | fi | 92 | fi |
93 | SELECTED='y' | 93 | SELECTED='y' |
94 | shift 2 ;; | 94 | shift 2 ;; |
95 | -c|--cpu) | 95 | -c|--cpu) |
96 | # echo "Option CPU: argument \`$2'" | 96 | # echo "Option CPU: argument \`$2'" |
97 | if [ "$opt_c" ] ; then | 97 | if [ "$opt_c" ] ; then |
98 | opt_c="${opt_c%)} || \$3 == \"$2\" || \$3 ~ /$2:/)" | 98 | opt_c="${opt_c%)} || \$3 == \"$2\" || \$3 ~ /$2:/)" |
99 | else | 99 | else |
100 | opt_c="(\$3 == \"$2\" || \$3 ~ /$2:/)" | 100 | opt_c="(\$3 == \"$2\" || \$3 ~ /$2:/)" |
101 | fi | 101 | fi |
102 | SELECTED='y' | 102 | SELECTED='y' |
103 | shift 2 ;; | 103 | shift 2 ;; |
104 | -s|--soc) | 104 | -s|--soc) |
105 | # echo "Option SoC: argument \`$2'" | 105 | # echo "Option SoC: argument \`$2'" |
106 | if [ "$opt_s" ] ; then | 106 | if [ "$opt_s" ] ; then |
107 | opt_s="${opt_s%)} || \$6 == \"$2\")" | 107 | opt_s="${opt_s%)} || \$6 == \"$2\" || \$6 ~ /$2/)" |
108 | else | 108 | else |
109 | opt_s="(\$6 == \"$2\")" | 109 | opt_s="(\$6 == \"$2\" || \$6 ~ /$2/)" |
110 | fi | 110 | fi |
111 | SELECTED='y' | 111 | SELECTED='y' |
112 | shift 2 ;; | 112 | shift 2 ;; |
113 | -v|--vendor) | 113 | -v|--vendor) |
114 | # echo "Option VENDOR: argument \`$2'" | 114 | # echo "Option VENDOR: argument \`$2'" |
115 | if [ "$opt_v" ] ; then | 115 | if [ "$opt_v" ] ; then |
116 | opt_v="${opt_v%)} || \$5 == \"$2\")" | 116 | opt_v="${opt_v%)} || \$5 == \"$2\")" |
117 | else | 117 | else |
118 | opt_v="(\$5 == \"$2\")" | 118 | opt_v="(\$5 == \"$2\")" |
119 | fi | 119 | fi |
120 | SELECTED='y' | 120 | SELECTED='y' |
121 | shift 2 ;; | 121 | shift 2 ;; |
122 | -C|--check) | 122 | -C|--check) |
123 | CHECK='C=1' | 123 | CHECK='C=1' |
124 | shift ;; | 124 | shift ;; |
125 | -n|--continue) | 125 | -n|--continue) |
126 | CONTINUE='y' | 126 | CONTINUE='y' |
127 | shift ;; | 127 | shift ;; |
128 | -r|--rebuild-errors) | 128 | -r|--rebuild-errors) |
129 | REBUILD_ERRORS='y' | 129 | REBUILD_ERRORS='y' |
130 | shift ;; | 130 | shift ;; |
131 | -l|--list) | 131 | -l|--list) |
132 | ONLY_LIST='y' | 132 | ONLY_LIST='y' |
133 | shift ;; | 133 | shift ;; |
134 | -m|--maintainers) | 134 | -m|--maintainers) |
135 | ONLY_LIST='y' | 135 | ONLY_LIST='y' |
136 | PRINT_MAINTS='y' | 136 | PRINT_MAINTS='y' |
137 | MAINTAINERS_ONLY='y' | 137 | MAINTAINERS_ONLY='y' |
138 | shift ;; | 138 | shift ;; |
139 | -M|--mails) | 139 | -M|--mails) |
140 | ONLY_LIST='y' | 140 | ONLY_LIST='y' |
141 | PRINT_MAINTS='y' | 141 | PRINT_MAINTS='y' |
142 | shift ;; | 142 | shift ;; |
143 | -h|--help) | 143 | -h|--help) |
144 | usage ;; | 144 | usage ;; |
145 | --) | 145 | --) |
146 | shift ; break ;; | 146 | shift ; break ;; |
147 | *) | 147 | *) |
148 | echo "Internal error!" >&2 ; exit 1 ;; | 148 | echo "Internal error!" >&2 ; exit 1 ;; |
149 | esac | 149 | esac |
150 | done | 150 | done |
151 | # echo "Remaining arguments:" | 151 | # echo "Remaining arguments:" |
152 | # for arg do echo '--> '"\`$arg'" ; done | 152 | # for arg do echo '--> '"\`$arg'" ; done |
153 | 153 | ||
154 | FILTER="\$1 !~ /^#/" | 154 | FILTER="\$1 !~ /^#/" |
155 | [ "$opt_a" ] && FILTER="${FILTER} && $opt_a" | 155 | [ "$opt_a" ] && FILTER="${FILTER} && $opt_a" |
156 | [ "$opt_c" ] && FILTER="${FILTER} && $opt_c" | 156 | [ "$opt_c" ] && FILTER="${FILTER} && $opt_c" |
157 | [ "$opt_s" ] && FILTER="${FILTER} && $opt_s" | 157 | [ "$opt_s" ] && FILTER="${FILTER} && $opt_s" |
158 | [ "$opt_v" ] && FILTER="${FILTER} && $opt_v" | 158 | [ "$opt_v" ] && FILTER="${FILTER} && $opt_v" |
159 | 159 | ||
160 | if [ "$SELECTED" ] ; then | 160 | if [ "$SELECTED" ] ; then |
161 | SELECTED=$(awk '('"$FILTER"') { print $1 }' boards.cfg) | 161 | SELECTED=$(awk '('"$FILTER"') { print $1 }' boards.cfg) |
162 | 162 | ||
163 | # Make sure some boards from boards.cfg are actually found | 163 | # Make sure some boards from boards.cfg are actually found |
164 | if [ -z "$SELECTED" ] ; then | 164 | if [ -z "$SELECTED" ] ; then |
165 | echo "Error: No boards selected, invalid arguments" | 165 | echo "Error: No boards selected, invalid arguments" |
166 | exit 1 | 166 | exit 1 |
167 | fi | 167 | fi |
168 | fi | 168 | fi |
169 | 169 | ||
170 | ######################################################################### | 170 | ######################################################################### |
171 | 171 | ||
172 | # Print statistics when we exit | 172 | # Print statistics when we exit |
173 | trap exit 1 2 3 15 | 173 | trap exit 1 2 3 15 |
174 | trap print_stats 0 | 174 | trap print_stats 0 |
175 | 175 | ||
176 | # Determine number of CPU cores if no default was set | 176 | # Determine number of CPU cores if no default was set |
177 | : ${BUILD_NCPUS:="`getconf _NPROCESSORS_ONLN`"} | 177 | : ${BUILD_NCPUS:="`getconf _NPROCESSORS_ONLN`"} |
178 | 178 | ||
179 | if [ "$BUILD_NCPUS" -gt 1 ] | 179 | if [ "$BUILD_NCPUS" -gt 1 ] |
180 | then | 180 | then |
181 | JOBS="-j $((BUILD_NCPUS + 1))" | 181 | JOBS="-j $((BUILD_NCPUS + 1))" |
182 | else | 182 | else |
183 | JOBS="" | 183 | JOBS="" |
184 | fi | 184 | fi |
185 | 185 | ||
186 | if [ "${MAKEALL_LOGDIR}" ] ; then | 186 | if [ "${MAKEALL_LOGDIR}" ] ; then |
187 | LOG_DIR=${MAKEALL_LOGDIR} | 187 | LOG_DIR=${MAKEALL_LOGDIR} |
188 | else | 188 | else |
189 | LOG_DIR="LOG" | 189 | LOG_DIR="LOG" |
190 | fi | 190 | fi |
191 | 191 | ||
192 | : ${BUILD_NBUILDS:=1} | 192 | : ${BUILD_NBUILDS:=1} |
193 | BUILD_MANY=0 | 193 | BUILD_MANY=0 |
194 | 194 | ||
195 | if [ "${BUILD_NBUILDS}" -gt 1 ] ; then | 195 | if [ "${BUILD_NBUILDS}" -gt 1 ] ; then |
196 | BUILD_MANY=1 | 196 | BUILD_MANY=1 |
197 | : ${BUILD_DIR:=./build} | 197 | : ${BUILD_DIR:=./build} |
198 | mkdir -p "${BUILD_DIR}/ERR" | 198 | mkdir -p "${BUILD_DIR}/ERR" |
199 | find "${BUILD_DIR}/ERR/" -type f -exec rm -f {} + | 199 | find "${BUILD_DIR}/ERR/" -type f -exec rm -f {} + |
200 | fi | 200 | fi |
201 | 201 | ||
202 | : ${BUILD_DIR:=.} | 202 | : ${BUILD_DIR:=.} |
203 | 203 | ||
204 | OUTPUT_PREFIX="${BUILD_DIR}" | 204 | OUTPUT_PREFIX="${BUILD_DIR}" |
205 | 205 | ||
206 | [ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1 | 206 | [ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1 |
207 | if [ "$CONTINUE" != 'y' -a "$REBUILD_ERRORS" != 'y' ] ; then | 207 | if [ "$CONTINUE" != 'y' -a "$REBUILD_ERRORS" != 'y' ] ; then |
208 | find "${LOG_DIR}/" -type f -exec rm -f {} + | 208 | find "${LOG_DIR}/" -type f -exec rm -f {} + |
209 | fi | 209 | fi |
210 | 210 | ||
211 | LIST="" | 211 | LIST="" |
212 | 212 | ||
213 | # Keep track of the number of builds and errors | 213 | # Keep track of the number of builds and errors |
214 | ERR_CNT=0 | 214 | ERR_CNT=0 |
215 | ERR_LIST="" | 215 | ERR_LIST="" |
216 | WRN_CNT=0 | 216 | WRN_CNT=0 |
217 | WRN_LIST="" | 217 | WRN_LIST="" |
218 | TOTAL_CNT=0 | 218 | TOTAL_CNT=0 |
219 | SKIP_CNT=0 | 219 | SKIP_CNT=0 |
220 | CURRENT_CNT=0 | 220 | CURRENT_CNT=0 |
221 | OLDEST_IDX=1 | 221 | OLDEST_IDX=1 |
222 | RC=0 | 222 | RC=0 |
223 | 223 | ||
224 | # Helper funcs for parsing boards.cfg | 224 | # Helper funcs for parsing boards.cfg |
225 | boards_by_field() | 225 | boards_by_field() |
226 | { | 226 | { |
227 | FS="[ \t]+" | 227 | FS="[ \t]+" |
228 | [ -n "$3" ] && FS="$3" | 228 | [ -n "$3" ] && FS="$3" |
229 | awk \ | 229 | awk \ |
230 | -v field="$1" \ | 230 | -v field="$1" \ |
231 | -v select="$2" \ | 231 | -v select="$2" \ |
232 | -F "$FS" \ | 232 | -F "$FS" \ |
233 | '($1 !~ /^#/ && $field == select) { print $1 }' \ | 233 | '($1 !~ /^#/ && $field == select) { print $1 }' \ |
234 | boards.cfg | 234 | boards.cfg |
235 | } | 235 | } |
236 | boards_by_arch() { boards_by_field 2 "$@" ; } | 236 | boards_by_arch() { boards_by_field 2 "$@" ; } |
237 | boards_by_cpu() { boards_by_field 3 "$@" "[: \t]+" ; } | 237 | boards_by_cpu() { boards_by_field 3 "$@" "[: \t]+" ; } |
238 | boards_by_soc() { boards_by_field 6 "$@" ; } | 238 | boards_by_soc() { boards_by_field 6 "$@" ; } |
239 | 239 | ||
240 | ######################################################################### | 240 | ######################################################################### |
241 | ## MPC5xx Systems | 241 | ## MPC5xx Systems |
242 | ######################################################################### | 242 | ######################################################################### |
243 | 243 | ||
244 | LIST_5xx="$(boards_by_cpu mpc5xx)" | 244 | LIST_5xx="$(boards_by_cpu mpc5xx)" |
245 | 245 | ||
246 | ######################################################################### | 246 | ######################################################################### |
247 | ## MPC5xxx Systems | 247 | ## MPC5xxx Systems |
248 | ######################################################################### | 248 | ######################################################################### |
249 | 249 | ||
250 | LIST_5xxx="$(boards_by_cpu mpc5xxx)" | 250 | LIST_5xxx="$(boards_by_cpu mpc5xxx)" |
251 | 251 | ||
252 | ######################################################################### | 252 | ######################################################################### |
253 | ## MPC512x Systems | 253 | ## MPC512x Systems |
254 | ######################################################################### | 254 | ######################################################################### |
255 | 255 | ||
256 | LIST_512x="$(boards_by_cpu mpc512x)" | 256 | LIST_512x="$(boards_by_cpu mpc512x)" |
257 | 257 | ||
258 | ######################################################################### | 258 | ######################################################################### |
259 | ## MPC8xx Systems | 259 | ## MPC8xx Systems |
260 | ######################################################################### | 260 | ######################################################################### |
261 | 261 | ||
262 | LIST_8xx="$(boards_by_cpu mpc8xx)" | 262 | LIST_8xx="$(boards_by_cpu mpc8xx)" |
263 | 263 | ||
264 | ######################################################################### | 264 | ######################################################################### |
265 | ## PPC4xx Systems | 265 | ## PPC4xx Systems |
266 | ######################################################################### | 266 | ######################################################################### |
267 | 267 | ||
268 | LIST_4xx="$(boards_by_cpu ppc4xx)" | 268 | LIST_4xx="$(boards_by_cpu ppc4xx)" |
269 | 269 | ||
270 | ######################################################################### | 270 | ######################################################################### |
271 | ## MPC8220 Systems | 271 | ## MPC8220 Systems |
272 | ######################################################################### | 272 | ######################################################################### |
273 | 273 | ||
274 | LIST_8220="$(boards_by_cpu mpc8220)" | 274 | LIST_8220="$(boards_by_cpu mpc8220)" |
275 | 275 | ||
276 | ######################################################################### | 276 | ######################################################################### |
277 | ## MPC824x Systems | 277 | ## MPC824x Systems |
278 | ######################################################################### | 278 | ######################################################################### |
279 | 279 | ||
280 | LIST_824x="$(boards_by_cpu mpc824x)" | 280 | LIST_824x="$(boards_by_cpu mpc824x)" |
281 | 281 | ||
282 | ######################################################################### | 282 | ######################################################################### |
283 | ## MPC8260 Systems (includes 8250, 8255 etc.) | 283 | ## MPC8260 Systems (includes 8250, 8255 etc.) |
284 | ######################################################################### | 284 | ######################################################################### |
285 | 285 | ||
286 | LIST_8260="$(boards_by_cpu mpc8260)" | 286 | LIST_8260="$(boards_by_cpu mpc8260)" |
287 | 287 | ||
288 | ######################################################################### | 288 | ######################################################################### |
289 | ## MPC83xx Systems (includes 8349, etc.) | 289 | ## MPC83xx Systems (includes 8349, etc.) |
290 | ######################################################################### | 290 | ######################################################################### |
291 | 291 | ||
292 | LIST_83xx="$(boards_by_cpu mpc83xx)" | 292 | LIST_83xx="$(boards_by_cpu mpc83xx)" |
293 | 293 | ||
294 | ######################################################################### | 294 | ######################################################################### |
295 | ## MPC85xx Systems (includes 8540, 8560 etc.) | 295 | ## MPC85xx Systems (includes 8540, 8560 etc.) |
296 | ######################################################################### | 296 | ######################################################################### |
297 | 297 | ||
298 | LIST_85xx="$(boards_by_cpu mpc85xx)" | 298 | LIST_85xx="$(boards_by_cpu mpc85xx)" |
299 | 299 | ||
300 | ######################################################################### | 300 | ######################################################################### |
301 | ## MPC86xx Systems | 301 | ## MPC86xx Systems |
302 | ######################################################################### | 302 | ######################################################################### |
303 | 303 | ||
304 | LIST_86xx="$(boards_by_cpu mpc86xx)" | 304 | LIST_86xx="$(boards_by_cpu mpc86xx)" |
305 | 305 | ||
306 | ######################################################################### | 306 | ######################################################################### |
307 | ## 74xx/7xx Systems | 307 | ## 74xx/7xx Systems |
308 | ######################################################################### | 308 | ######################################################################### |
309 | 309 | ||
310 | LIST_74xx_7xx="$(boards_by_cpu 74xx_7xx)" | 310 | LIST_74xx_7xx="$(boards_by_cpu 74xx_7xx)" |
311 | 311 | ||
312 | ######################################################################### | 312 | ######################################################################### |
313 | ## PowerPC groups | 313 | ## PowerPC groups |
314 | ######################################################################### | 314 | ######################################################################### |
315 | 315 | ||
316 | LIST_TSEC=" \ | 316 | LIST_TSEC=" \ |
317 | ${LIST_83xx} \ | 317 | ${LIST_83xx} \ |
318 | ${LIST_85xx} \ | 318 | ${LIST_85xx} \ |
319 | ${LIST_86xx} \ | 319 | ${LIST_86xx} \ |
320 | " | 320 | " |
321 | 321 | ||
322 | LIST_powerpc=" \ | 322 | LIST_powerpc=" \ |
323 | ${LIST_5xx} \ | 323 | ${LIST_5xx} \ |
324 | ${LIST_512x} \ | 324 | ${LIST_512x} \ |
325 | ${LIST_5xxx} \ | 325 | ${LIST_5xxx} \ |
326 | ${LIST_8xx} \ | 326 | ${LIST_8xx} \ |
327 | ${LIST_8220} \ | 327 | ${LIST_8220} \ |
328 | ${LIST_824x} \ | 328 | ${LIST_824x} \ |
329 | ${LIST_8260} \ | 329 | ${LIST_8260} \ |
330 | ${LIST_83xx} \ | 330 | ${LIST_83xx} \ |
331 | ${LIST_85xx} \ | 331 | ${LIST_85xx} \ |
332 | ${LIST_86xx} \ | 332 | ${LIST_86xx} \ |
333 | ${LIST_4xx} \ | 333 | ${LIST_4xx} \ |
334 | ${LIST_74xx_7xx}\ | 334 | ${LIST_74xx_7xx}\ |
335 | " | 335 | " |
336 | 336 | ||
337 | # Alias "ppc" -> "powerpc" to not break compatibility with older scripts | 337 | # Alias "ppc" -> "powerpc" to not break compatibility with older scripts |
338 | # still using "ppc" instead of "powerpc" | 338 | # still using "ppc" instead of "powerpc" |
339 | LIST_ppc=" \ | 339 | LIST_ppc=" \ |
340 | ${LIST_powerpc} \ | 340 | ${LIST_powerpc} \ |
341 | " | 341 | " |
342 | 342 | ||
343 | ######################################################################### | 343 | ######################################################################### |
344 | ## StrongARM Systems | 344 | ## StrongARM Systems |
345 | ######################################################################### | 345 | ######################################################################### |
346 | 346 | ||
347 | LIST_SA="$(boards_by_cpu sa1100)" | 347 | LIST_SA="$(boards_by_cpu sa1100)" |
348 | 348 | ||
349 | ######################################################################### | 349 | ######################################################################### |
350 | ## ARM7 Systems | 350 | ## ARM7 Systems |
351 | ######################################################################### | 351 | ######################################################################### |
352 | 352 | ||
353 | LIST_ARM7="$(boards_by_cpu arm720t)" | 353 | LIST_ARM7="$(boards_by_cpu arm720t)" |
354 | 354 | ||
355 | ######################################################################### | 355 | ######################################################################### |
356 | ## ARM9 Systems | 356 | ## ARM9 Systems |
357 | ######################################################################### | 357 | ######################################################################### |
358 | 358 | ||
359 | LIST_ARM9="$(boards_by_cpu arm920t) \ | 359 | LIST_ARM9="$(boards_by_cpu arm920t) \ |
360 | $(boards_by_cpu arm926ejs) \ | 360 | $(boards_by_cpu arm926ejs) \ |
361 | $(boards_by_cpu arm925t) \ | 361 | $(boards_by_cpu arm925t) \ |
362 | $(boards_by_cpu arm946es) \ | 362 | $(boards_by_cpu arm946es) \ |
363 | " | 363 | " |
364 | 364 | ||
365 | ######################################################################### | 365 | ######################################################################### |
366 | ## ARM11 Systems | 366 | ## ARM11 Systems |
367 | ######################################################################### | 367 | ######################################################################### |
368 | LIST_ARM11="$(boards_by_cpu arm1136) \ | 368 | LIST_ARM11="$(boards_by_cpu arm1136) \ |
369 | $(boards_by_cpu arm1176) \ | 369 | $(boards_by_cpu arm1176) \ |
370 | " | 370 | " |
371 | 371 | ||
372 | ######################################################################### | 372 | ######################################################################### |
373 | ## ARMV7 Systems | 373 | ## ARMV7 Systems |
374 | ######################################################################### | 374 | ######################################################################### |
375 | 375 | ||
376 | LIST_ARMV7="$(boards_by_cpu armv7)" | 376 | LIST_ARMV7="$(boards_by_cpu armv7)" |
377 | 377 | ||
378 | ######################################################################### | 378 | ######################################################################### |
379 | ## AT91 Systems | 379 | ## AT91 Systems |
380 | ######################################################################### | 380 | ######################################################################### |
381 | 381 | ||
382 | LIST_at91="$(boards_by_soc at91)" | 382 | LIST_at91="$(boards_by_soc at91)" |
383 | 383 | ||
384 | ######################################################################### | 384 | ######################################################################### |
385 | ## Xscale Systems | 385 | ## Xscale Systems |
386 | ######################################################################### | 386 | ######################################################################### |
387 | 387 | ||
388 | LIST_pxa="$(boards_by_cpu pxa)" | 388 | LIST_pxa="$(boards_by_cpu pxa)" |
389 | 389 | ||
390 | LIST_ixp="$(boards_by_cpu ixp)" | 390 | LIST_ixp="$(boards_by_cpu ixp)" |
391 | 391 | ||
392 | ######################################################################### | 392 | ######################################################################### |
393 | ## SPEAr Systems | 393 | ## SPEAr Systems |
394 | ######################################################################### | 394 | ######################################################################### |
395 | 395 | ||
396 | LIST_spear="$(boards_by_soc spear)" | 396 | LIST_spear="$(boards_by_soc spear)" |
397 | 397 | ||
398 | ######################################################################### | 398 | ######################################################################### |
399 | ## ARM groups | 399 | ## ARM groups |
400 | ######################################################################### | 400 | ######################################################################### |
401 | 401 | ||
402 | LIST_arm="$(boards_by_arch arm)" | 402 | LIST_arm="$(boards_by_arch arm)" |
403 | 403 | ||
404 | ######################################################################### | 404 | ######################################################################### |
405 | ## MIPS Systems (default = big endian) | 405 | ## MIPS Systems (default = big endian) |
406 | ######################################################################### | 406 | ######################################################################### |
407 | 407 | ||
408 | LIST_mips4kc=" \ | 408 | LIST_mips4kc=" \ |
409 | incaip \ | 409 | incaip \ |
410 | incaip_100MHz \ | 410 | incaip_100MHz \ |
411 | incaip_133MHz \ | 411 | incaip_133MHz \ |
412 | incaip_150MHz \ | 412 | incaip_150MHz \ |
413 | qemu_mips \ | 413 | qemu_mips \ |
414 | vct_platinum \ | 414 | vct_platinum \ |
415 | vct_platinum_small \ | 415 | vct_platinum_small \ |
416 | vct_platinum_onenand \ | 416 | vct_platinum_onenand \ |
417 | vct_platinum_onenand_small \ | 417 | vct_platinum_onenand_small \ |
418 | vct_platinumavc \ | 418 | vct_platinumavc \ |
419 | vct_platinumavc_small \ | 419 | vct_platinumavc_small \ |
420 | vct_platinumavc_onenand \ | 420 | vct_platinumavc_onenand \ |
421 | vct_platinumavc_onenand_small \ | 421 | vct_platinumavc_onenand_small \ |
422 | vct_premium \ | 422 | vct_premium \ |
423 | vct_premium_small \ | 423 | vct_premium_small \ |
424 | vct_premium_onenand \ | 424 | vct_premium_onenand \ |
425 | vct_premium_onenand_small \ | 425 | vct_premium_onenand_small \ |
426 | " | 426 | " |
427 | 427 | ||
428 | LIST_au1xx0=" \ | 428 | LIST_au1xx0=" \ |
429 | dbau1000 \ | 429 | dbau1000 \ |
430 | dbau1100 \ | 430 | dbau1100 \ |
431 | dbau1500 \ | 431 | dbau1500 \ |
432 | dbau1550 \ | 432 | dbau1550 \ |
433 | " | 433 | " |
434 | 434 | ||
435 | LIST_mips=" \ | 435 | LIST_mips=" \ |
436 | ${LIST_mips4kc} \ | 436 | ${LIST_mips4kc} \ |
437 | ${LIST_mips5kc} \ | 437 | ${LIST_mips5kc} \ |
438 | ${LIST_au1xx0} \ | 438 | ${LIST_au1xx0} \ |
439 | " | 439 | " |
440 | 440 | ||
441 | ######################################################################### | 441 | ######################################################################### |
442 | ## MIPS Systems (little endian) | 442 | ## MIPS Systems (little endian) |
443 | ######################################################################### | 443 | ######################################################################### |
444 | 444 | ||
445 | LIST_xburst_el=" \ | 445 | LIST_xburst_el=" \ |
446 | qi_lb60 \ | 446 | qi_lb60 \ |
447 | " | 447 | " |
448 | 448 | ||
449 | LIST_au1xx0_el=" \ | 449 | LIST_au1xx0_el=" \ |
450 | dbau1550_el \ | 450 | dbau1550_el \ |
451 | pb1000 \ | 451 | pb1000 \ |
452 | " | 452 | " |
453 | LIST_mips_el=" \ | 453 | LIST_mips_el=" \ |
454 | ${LIST_xburst_el} \ | 454 | ${LIST_xburst_el} \ |
455 | ${LIST_au1xx0_el} \ | 455 | ${LIST_au1xx0_el} \ |
456 | " | 456 | " |
457 | ######################################################################### | 457 | ######################################################################### |
458 | ## OpenRISC Systems | 458 | ## OpenRISC Systems |
459 | ######################################################################### | 459 | ######################################################################### |
460 | 460 | ||
461 | LIST_openrisc="$(boards_by_arch openrisc)" | 461 | LIST_openrisc="$(boards_by_arch openrisc)" |
462 | 462 | ||
463 | ######################################################################### | 463 | ######################################################################### |
464 | ## x86 Systems | 464 | ## x86 Systems |
465 | ######################################################################### | 465 | ######################################################################### |
466 | 466 | ||
467 | LIST_x86="$(boards_by_arch x86)" | 467 | LIST_x86="$(boards_by_arch x86)" |
468 | 468 | ||
469 | ######################################################################### | 469 | ######################################################################### |
470 | ## Nios-II Systems | 470 | ## Nios-II Systems |
471 | ######################################################################### | 471 | ######################################################################### |
472 | 472 | ||
473 | LIST_nios2="$(boards_by_arch nios2)" | 473 | LIST_nios2="$(boards_by_arch nios2)" |
474 | 474 | ||
475 | ######################################################################### | 475 | ######################################################################### |
476 | ## MicroBlaze Systems | 476 | ## MicroBlaze Systems |
477 | ######################################################################### | 477 | ######################################################################### |
478 | 478 | ||
479 | LIST_microblaze="$(boards_by_arch microblaze)" | 479 | LIST_microblaze="$(boards_by_arch microblaze)" |
480 | 480 | ||
481 | ######################################################################### | 481 | ######################################################################### |
482 | ## ColdFire Systems | 482 | ## ColdFire Systems |
483 | ######################################################################### | 483 | ######################################################################### |
484 | 484 | ||
485 | LIST_m68k="$(boards_by_arch m68k)" | 485 | LIST_m68k="$(boards_by_arch m68k)" |
486 | LIST_coldfire=${LIST_m68k} | 486 | LIST_coldfire=${LIST_m68k} |
487 | 487 | ||
488 | ######################################################################### | 488 | ######################################################################### |
489 | ## AVR32 Systems | 489 | ## AVR32 Systems |
490 | ######################################################################### | 490 | ######################################################################### |
491 | 491 | ||
492 | LIST_avr32="$(boards_by_arch avr32)" | 492 | LIST_avr32="$(boards_by_arch avr32)" |
493 | 493 | ||
494 | ######################################################################### | 494 | ######################################################################### |
495 | ## Blackfin Systems | 495 | ## Blackfin Systems |
496 | ######################################################################### | 496 | ######################################################################### |
497 | 497 | ||
498 | LIST_blackfin="$(boards_by_arch blackfin)" | 498 | LIST_blackfin="$(boards_by_arch blackfin)" |
499 | 499 | ||
500 | ######################################################################### | 500 | ######################################################################### |
501 | ## SH Systems | 501 | ## SH Systems |
502 | ######################################################################### | 502 | ######################################################################### |
503 | 503 | ||
504 | LIST_sh2="$(boards_by_cpu sh2)" | 504 | LIST_sh2="$(boards_by_cpu sh2)" |
505 | LIST_sh3="$(boards_by_cpu sh3)" | 505 | LIST_sh3="$(boards_by_cpu sh3)" |
506 | LIST_sh4="$(boards_by_cpu sh4)" | 506 | LIST_sh4="$(boards_by_cpu sh4)" |
507 | 507 | ||
508 | LIST_sh="$(boards_by_arch sh)" | 508 | LIST_sh="$(boards_by_arch sh)" |
509 | 509 | ||
510 | ######################################################################### | 510 | ######################################################################### |
511 | ## SPARC Systems | 511 | ## SPARC Systems |
512 | ######################################################################### | 512 | ######################################################################### |
513 | 513 | ||
514 | LIST_sparc="$(boards_by_arch sparc)" | 514 | LIST_sparc="$(boards_by_arch sparc)" |
515 | 515 | ||
516 | ######################################################################### | 516 | ######################################################################### |
517 | ## NDS32 Systems | 517 | ## NDS32 Systems |
518 | ######################################################################### | 518 | ######################################################################### |
519 | 519 | ||
520 | LIST_nds32="$(boards_by_arch nds32)" | 520 | LIST_nds32="$(boards_by_arch nds32)" |
521 | 521 | ||
522 | #----------------------------------------------------------------------- | 522 | #----------------------------------------------------------------------- |
523 | 523 | ||
524 | get_target_location() { | 524 | get_target_location() { |
525 | local target=$1 | 525 | local target=$1 |
526 | local BOARD_NAME="" | 526 | local BOARD_NAME="" |
527 | local CONFIG_NAME="" | 527 | local CONFIG_NAME="" |
528 | local board="" | 528 | local board="" |
529 | local vendor="" | 529 | local vendor="" |
530 | 530 | ||
531 | # Automatic mode | 531 | # Automatic mode |
532 | local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg` | 532 | local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg` |
533 | 533 | ||
534 | if [ -z "${line}" ] ; then echo "" ; return ; fi | 534 | if [ -z "${line}" ] ; then echo "" ; return ; fi |
535 | 535 | ||
536 | set ${line} | 536 | set ${line} |
537 | 537 | ||
538 | # add default board name if needed | 538 | # add default board name if needed |
539 | [ $# = 3 ] && set ${line} ${1} | 539 | [ $# = 3 ] && set ${line} ${1} |
540 | 540 | ||
541 | CONFIG_NAME="${1%_config}" | 541 | CONFIG_NAME="${1%_config}" |
542 | 542 | ||
543 | [ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}" | 543 | [ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}" |
544 | 544 | ||
545 | if [ "$4" = "-" ] ; then | 545 | if [ "$4" = "-" ] ; then |
546 | board=${BOARD_NAME} | 546 | board=${BOARD_NAME} |
547 | else | 547 | else |
548 | board="$4" | 548 | board="$4" |
549 | fi | 549 | fi |
550 | 550 | ||
551 | [ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5" | 551 | [ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5" |
552 | [ $# -gt 6 ] && [ "$7" != "-" ] && { | 552 | [ $# -gt 6 ] && [ "$7" != "-" ] && { |
553 | tmp="${7%:*}" | 553 | tmp="${7%:*}" |
554 | if [ "$tmp" ] ; then | 554 | if [ "$tmp" ] ; then |
555 | CONFIG_NAME="$tmp" | 555 | CONFIG_NAME="$tmp" |
556 | fi | 556 | fi |
557 | } | 557 | } |
558 | 558 | ||
559 | # Assign board directory to BOARDIR variable | 559 | # Assign board directory to BOARDIR variable |
560 | if [ -z "${vendor}" ] ; then | 560 | if [ -z "${vendor}" ] ; then |
561 | BOARDDIR=${board} | 561 | BOARDDIR=${board} |
562 | else | 562 | else |
563 | BOARDDIR=${vendor}/${board} | 563 | BOARDDIR=${vendor}/${board} |
564 | fi | 564 | fi |
565 | 565 | ||
566 | echo "${CONFIG_NAME}:${BOARDDIR}" | 566 | echo "${CONFIG_NAME}:${BOARDDIR}" |
567 | } | 567 | } |
568 | 568 | ||
569 | get_target_maintainers() { | 569 | get_target_maintainers() { |
570 | local name=`echo $1 | cut -d : -f 1` | 570 | local name=`echo $1 | cut -d : -f 1` |
571 | 571 | ||
572 | if ! grep -qsi "[[:blank:]]${name}[[:blank:]]" MAINTAINERS ; then | 572 | if ! grep -qsi "[[:blank:]]${name}[[:blank:]]" MAINTAINERS ; then |
573 | echo "" | 573 | echo "" |
574 | return ; | 574 | return ; |
575 | fi | 575 | fi |
576 | 576 | ||
577 | local line=`tac MAINTAINERS | grep -ni "[[:blank:]]${name}[[:blank:]]" | cut -d : -f 1` | 577 | local line=`tac MAINTAINERS | grep -ni "[[:blank:]]${name}[[:blank:]]" | cut -d : -f 1` |
578 | local mail=`tac MAINTAINERS | tail -n +${line} | \ | 578 | local mail=`tac MAINTAINERS | tail -n +${line} | \ |
579 | sed -n ":start /.*@.*/ { b mail } ; n ; b start ; :mail /.*@.*/ { p ; n ; b mail } ; q" | \ | 579 | sed -n ":start /.*@.*/ { b mail } ; n ; b start ; :mail /.*@.*/ { p ; n ; b mail } ; q" | \ |
580 | sed "s/^.*<//;s/>.*$//"` | 580 | sed "s/^.*<//;s/>.*$//"` |
581 | echo "$mail" | 581 | echo "$mail" |
582 | } | 582 | } |
583 | 583 | ||
584 | get_target_arch() { | 584 | get_target_arch() { |
585 | local target=$1 | 585 | local target=$1 |
586 | 586 | ||
587 | # Automatic mode | 587 | # Automatic mode |
588 | local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg` | 588 | local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg` |
589 | 589 | ||
590 | if [ -z "${line}" ] ; then echo "" ; return ; fi | 590 | if [ -z "${line}" ] ; then echo "" ; return ; fi |
591 | 591 | ||
592 | set ${line} | 592 | set ${line} |
593 | echo "$2" | 593 | echo "$2" |
594 | } | 594 | } |
595 | 595 | ||
596 | list_target() { | 596 | list_target() { |
597 | if [ "$PRINT_MAINTS" != 'y' ] ; then | 597 | if [ "$PRINT_MAINTS" != 'y' ] ; then |
598 | echo "$1" | 598 | echo "$1" |
599 | return | 599 | return |
600 | fi | 600 | fi |
601 | 601 | ||
602 | echo -n "$1:" | 602 | echo -n "$1:" |
603 | 603 | ||
604 | local loc=`get_target_location $1` | 604 | local loc=`get_target_location $1` |
605 | 605 | ||
606 | if [ -z "${loc}" ] ; then echo "ERROR" ; return ; fi | 606 | if [ -z "${loc}" ] ; then echo "ERROR" ; return ; fi |
607 | 607 | ||
608 | local maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"` | 608 | local maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"` |
609 | 609 | ||
610 | if [ "$MAINTAINERS_ONLY" != 'y' ] ; then | 610 | if [ "$MAINTAINERS_ONLY" != 'y' ] ; then |
611 | 611 | ||
612 | local dir=`echo ${loc} | cut -d ":" -f 2` | 612 | local dir=`echo ${loc} | cut -d ":" -f 2` |
613 | local cfg=`echo ${loc} | cut -d ":" -f 1` | 613 | local cfg=`echo ${loc} | cut -d ":" -f 1` |
614 | local git_result=`git log --format=%aE board/${dir} \ | 614 | local git_result=`git log --format=%aE board/${dir} \ |
615 | include/configs/${cfg}.h | grep "@"` | 615 | include/configs/${cfg}.h | grep "@"` |
616 | local git_result_recent=`echo ${git_result} | tr " " "\n" | \ | 616 | local git_result_recent=`echo ${git_result} | tr " " "\n" | \ |
617 | head -n 3` | 617 | head -n 3` |
618 | local git_result_top=`echo ${git_result} | tr " " "\n" | \ | 618 | local git_result_top=`echo ${git_result} | tr " " "\n" | \ |
619 | sort | uniq -c | sort -nr | head -n 3 | \ | 619 | sort | uniq -c | sort -nr | head -n 3 | \ |
620 | sed "s/^ \+[0-9]\+ \+//"` | 620 | sed "s/^ \+[0-9]\+ \+//"` |
621 | 621 | ||
622 | echo -e "$git_result_recent\n$git_result_top\n$maintainers_result" | \ | 622 | echo -e "$git_result_recent\n$git_result_top\n$maintainers_result" | \ |
623 | sort -u | tr "\n" " " | sed "s/ $//" ; | 623 | sort -u | tr "\n" " " | sed "s/ $//" ; |
624 | else | 624 | else |
625 | echo -e "$maintainers_result" | sort -u | tr "\n" " " | \ | 625 | echo -e "$maintainers_result" | sort -u | tr "\n" " " | \ |
626 | sed "s/ $//" ; | 626 | sed "s/ $//" ; |
627 | fi | 627 | fi |
628 | 628 | ||
629 | echo "" | 629 | echo "" |
630 | } | 630 | } |
631 | 631 | ||
632 | # Each finished build will have a file called ${donep}${n}, | 632 | # Each finished build will have a file called ${donep}${n}, |
633 | # where n is the index of the build. Each build | 633 | # where n is the index of the build. Each build |
634 | # we've already noted as finished will have ${skipp}${n}. | 634 | # we've already noted as finished will have ${skipp}${n}. |
635 | # The code managing the build process will use this information | 635 | # The code managing the build process will use this information |
636 | # to ensure that only BUILD_NBUILDS builds are in flight at once | 636 | # to ensure that only BUILD_NBUILDS builds are in flight at once |
637 | donep="${LOG_DIR}/._done_" | 637 | donep="${LOG_DIR}/._done_" |
638 | skipp="${LOG_DIR}/._skip_" | 638 | skipp="${LOG_DIR}/._skip_" |
639 | 639 | ||
640 | build_target_killed() { | 640 | build_target_killed() { |
641 | echo "Aborted $target build." | 641 | echo "Aborted $target build." |
642 | # Remove the logs for this board since it was aborted | 642 | # Remove the logs for this board since it was aborted |
643 | rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR | 643 | rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR |
644 | exit | 644 | exit |
645 | } | 645 | } |
646 | 646 | ||
647 | build_target() { | 647 | build_target() { |
648 | target=$1 | 648 | target=$1 |
649 | build_idx=$2 | 649 | build_idx=$2 |
650 | 650 | ||
651 | if [ "$ONLY_LIST" == 'y' ] ; then | 651 | if [ "$ONLY_LIST" == 'y' ] ; then |
652 | list_target ${target} | 652 | list_target ${target} |
653 | return | 653 | return |
654 | fi | 654 | fi |
655 | 655 | ||
656 | if [ $BUILD_MANY == 1 ] ; then | 656 | if [ $BUILD_MANY == 1 ] ; then |
657 | output_dir="${OUTPUT_PREFIX}/${target}" | 657 | output_dir="${OUTPUT_PREFIX}/${target}" |
658 | mkdir -p "${output_dir}" | 658 | mkdir -p "${output_dir}" |
659 | trap build_target_killed TERM | 659 | trap build_target_killed TERM |
660 | else | 660 | else |
661 | output_dir="${OUTPUT_PREFIX}" | 661 | output_dir="${OUTPUT_PREFIX}" |
662 | fi | 662 | fi |
663 | 663 | ||
664 | export BUILD_DIR="${output_dir}" | 664 | export BUILD_DIR="${output_dir}" |
665 | 665 | ||
666 | target_arch=$(get_target_arch ${target}) | 666 | target_arch=$(get_target_arch ${target}) |
667 | eval cross_toolchain=\$CROSS_COMPILE_${target_arch^^} | 667 | eval cross_toolchain=\$CROSS_COMPILE_${target_arch^^} |
668 | if [ "${cross_toolchain}" ] ; then | 668 | if [ "${cross_toolchain}" ] ; then |
669 | MAKE="make CROSS_COMPILE=${cross_toolchain}" | 669 | MAKE="make CROSS_COMPILE=${cross_toolchain}" |
670 | elif [ "${CROSS_COMPILE}" ] ; then | 670 | elif [ "${CROSS_COMPILE}" ] ; then |
671 | MAKE="make CROSS_COMPILE=${CROSS_COMPILE}" | 671 | MAKE="make CROSS_COMPILE=${CROSS_COMPILE}" |
672 | else | 672 | else |
673 | MAKE=make | 673 | MAKE=make |
674 | fi | 674 | fi |
675 | 675 | ||
676 | ${MAKE} distclean >/dev/null | 676 | ${MAKE} distclean >/dev/null |
677 | ${MAKE} -s ${target}_config | 677 | ${MAKE} -s ${target}_config |
678 | 678 | ||
679 | ${MAKE} ${JOBS} ${CHECK} all \ | 679 | ${MAKE} ${JOBS} ${CHECK} all \ |
680 | >${LOG_DIR}/$target.MAKELOG 2> ${LOG_DIR}/$target.ERR | 680 | >${LOG_DIR}/$target.MAKELOG 2> ${LOG_DIR}/$target.ERR |
681 | 681 | ||
682 | # Check for 'make' errors | 682 | # Check for 'make' errors |
683 | if [ ${PIPESTATUS[0]} -ne 0 ] ; then | 683 | if [ ${PIPESTATUS[0]} -ne 0 ] ; then |
684 | RC=1 | 684 | RC=1 |
685 | fi | 685 | fi |
686 | 686 | ||
687 | if [ $BUILD_MANY == 1 ] ; then | 687 | if [ $BUILD_MANY == 1 ] ; then |
688 | trap - TERM | 688 | trap - TERM |
689 | 689 | ||
690 | ${MAKE} -s tidy | 690 | ${MAKE} -s tidy |
691 | 691 | ||
692 | if [ -s ${LOG_DIR}/${target}.ERR ] ; then | 692 | if [ -s ${LOG_DIR}/${target}.ERR ] ; then |
693 | cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target} | 693 | cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target} |
694 | else | 694 | else |
695 | rm ${LOG_DIR}/${target}.ERR | 695 | rm ${LOG_DIR}/${target}.ERR |
696 | fi | 696 | fi |
697 | else | 697 | else |
698 | if [ -s ${LOG_DIR}/${target}.ERR ] ; then | 698 | if [ -s ${LOG_DIR}/${target}.ERR ] ; then |
699 | if grep -iw error ${LOG_DIR}/${target}.ERR ; then | 699 | if grep -iw error ${LOG_DIR}/${target}.ERR ; then |
700 | : $(( ERR_CNT += 1 )) | 700 | : $(( ERR_CNT += 1 )) |
701 | ERR_LIST="${ERR_LIST} $target" | 701 | ERR_LIST="${ERR_LIST} $target" |
702 | else | 702 | else |
703 | : $(( WRN_CNT += 1 )) | 703 | : $(( WRN_CNT += 1 )) |
704 | WRN_LIST="${WRN_LIST} $target" | 704 | WRN_LIST="${WRN_LIST} $target" |
705 | fi | 705 | fi |
706 | else | 706 | else |
707 | rm ${LOG_DIR}/${target}.ERR | 707 | rm ${LOG_DIR}/${target}.ERR |
708 | fi | 708 | fi |
709 | fi | 709 | fi |
710 | 710 | ||
711 | OBJS=${output_dir}/u-boot | 711 | OBJS=${output_dir}/u-boot |
712 | if [ -e ${output_dir}/spl/u-boot-spl ]; then | 712 | if [ -e ${output_dir}/spl/u-boot-spl ]; then |
713 | OBJS="${OBJS} ${output_dir}/spl/u-boot-spl" | 713 | OBJS="${OBJS} ${output_dir}/spl/u-boot-spl" |
714 | fi | 714 | fi |
715 | 715 | ||
716 | ${CROSS_COMPILE}size ${OBJS} | tee -a ${LOG_DIR}/$target.MAKELOG | 716 | ${CROSS_COMPILE}size ${OBJS} | tee -a ${LOG_DIR}/$target.MAKELOG |
717 | 717 | ||
718 | [ -e "${LOG_DIR}/${target}.ERR" ] && cat "${LOG_DIR}/${target}.ERR" | 718 | [ -e "${LOG_DIR}/${target}.ERR" ] && cat "${LOG_DIR}/${target}.ERR" |
719 | 719 | ||
720 | touch "${donep}${build_idx}" | 720 | touch "${donep}${build_idx}" |
721 | } | 721 | } |
722 | 722 | ||
723 | manage_builds() { | 723 | manage_builds() { |
724 | search_idx=${OLDEST_IDX} | 724 | search_idx=${OLDEST_IDX} |
725 | if [ "$ONLY_LIST" == 'y' ] ; then return ; fi | 725 | if [ "$ONLY_LIST" == 'y' ] ; then return ; fi |
726 | 726 | ||
727 | while true; do | 727 | while true; do |
728 | if [ -e "${donep}${search_idx}" ] ; then | 728 | if [ -e "${donep}${search_idx}" ] ; then |
729 | : $(( CURRENT_CNT-- )) | 729 | : $(( CURRENT_CNT-- )) |
730 | [ ${OLDEST_IDX} -eq ${search_idx} ] && | 730 | [ ${OLDEST_IDX} -eq ${search_idx} ] && |
731 | : $(( OLDEST_IDX++ )) | 731 | : $(( OLDEST_IDX++ )) |
732 | 732 | ||
733 | # Only want to count it once | 733 | # Only want to count it once |
734 | rm -f "${donep}${search_idx}" | 734 | rm -f "${donep}${search_idx}" |
735 | touch "${skipp}${search_idx}" | 735 | touch "${skipp}${search_idx}" |
736 | elif [ -e "${skipp}${search_idx}" ] ; then | 736 | elif [ -e "${skipp}${search_idx}" ] ; then |
737 | [ ${OLDEST_IDX} -eq ${search_idx} ] && | 737 | [ ${OLDEST_IDX} -eq ${search_idx} ] && |
738 | : $(( OLDEST_IDX++ )) | 738 | : $(( OLDEST_IDX++ )) |
739 | fi | 739 | fi |
740 | : $(( search_idx++ )) | 740 | : $(( search_idx++ )) |
741 | if [ ${search_idx} -gt ${TOTAL_CNT} ] ; then | 741 | if [ ${search_idx} -gt ${TOTAL_CNT} ] ; then |
742 | if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then | 742 | if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then |
743 | search_idx=${OLDEST_IDX} | 743 | search_idx=${OLDEST_IDX} |
744 | sleep 1 | 744 | sleep 1 |
745 | else | 745 | else |
746 | break | 746 | break |
747 | fi | 747 | fi |
748 | fi | 748 | fi |
749 | done | 749 | done |
750 | } | 750 | } |
751 | 751 | ||
752 | build_targets() { | 752 | build_targets() { |
753 | for t in "$@" ; do | 753 | for t in "$@" ; do |
754 | # If a LIST_xxx var exists, use it. But avoid variable | 754 | # If a LIST_xxx var exists, use it. But avoid variable |
755 | # expansion in the eval when a board name contains certain | 755 | # expansion in the eval when a board name contains certain |
756 | # characters that the shell interprets. | 756 | # characters that the shell interprets. |
757 | case ${t} in | 757 | case ${t} in |
758 | *[-+=]*) list= ;; | 758 | *[-+=]*) list= ;; |
759 | *) list=$(eval echo '${LIST_'$t'}') ;; | 759 | *) list=$(eval echo '${LIST_'$t'}') ;; |
760 | esac | 760 | esac |
761 | if [ -n "${list}" ] ; then | 761 | if [ -n "${list}" ] ; then |
762 | build_targets ${list} | 762 | build_targets ${list} |
763 | else | 763 | else |
764 | : $((TOTAL_CNT += 1)) | 764 | : $((TOTAL_CNT += 1)) |
765 | : $((CURRENT_CNT += 1)) | 765 | : $((CURRENT_CNT += 1)) |
766 | rm -f "${donep}${TOTAL_CNT}" | 766 | rm -f "${donep}${TOTAL_CNT}" |
767 | rm -f "${skipp}${TOTAL_CNT}" | 767 | rm -f "${skipp}${TOTAL_CNT}" |
768 | if [ "$CONTINUE" = 'y' -a -e ${LOG_DIR}/$t.MAKELOG ] ; then | 768 | if [ "$CONTINUE" = 'y' -a -e ${LOG_DIR}/$t.MAKELOG ] ; then |
769 | : $((SKIP_CNT += 1)) | 769 | : $((SKIP_CNT += 1)) |
770 | touch "${donep}${TOTAL_CNT}" | 770 | touch "${donep}${TOTAL_CNT}" |
771 | elif [ "$REBUILD_ERRORS" = 'y' -a ! -e ${LOG_DIR}/$t.ERR ] ; then | 771 | elif [ "$REBUILD_ERRORS" = 'y' -a ! -e ${LOG_DIR}/$t.ERR ] ; then |
772 | : $((SKIP_CNT += 1)) | 772 | : $((SKIP_CNT += 1)) |
773 | touch "${donep}${TOTAL_CNT}" | 773 | touch "${donep}${TOTAL_CNT}" |
774 | else | 774 | else |
775 | if [ $BUILD_MANY == 1 ] ; then | 775 | if [ $BUILD_MANY == 1 ] ; then |
776 | build_target ${t} ${TOTAL_CNT} & | 776 | build_target ${t} ${TOTAL_CNT} & |
777 | else | 777 | else |
778 | CUR_TGT="${t}" | 778 | CUR_TGT="${t}" |
779 | build_target ${t} ${TOTAL_CNT} | 779 | build_target ${t} ${TOTAL_CNT} |
780 | CUR_TGT='' | 780 | CUR_TGT='' |
781 | fi | 781 | fi |
782 | fi | 782 | fi |
783 | fi | 783 | fi |
784 | 784 | ||
785 | # We maintain a running count of all the builds we have done. | 785 | # We maintain a running count of all the builds we have done. |
786 | # Each finished build will have a file called ${donep}${n}, | 786 | # Each finished build will have a file called ${donep}${n}, |
787 | # where n is the index of the build. Each build | 787 | # where n is the index of the build. Each build |
788 | # we've already noted as finished will have ${skipp}${n}. | 788 | # we've already noted as finished will have ${skipp}${n}. |
789 | # We track the current index via TOTAL_CNT, and the oldest | 789 | # We track the current index via TOTAL_CNT, and the oldest |
790 | # index. When we exceed the maximum number of parallel builds, | 790 | # index. When we exceed the maximum number of parallel builds, |
791 | # We look from oldest to current for builds that have completed, | 791 | # We look from oldest to current for builds that have completed, |
792 | # and update the current count and oldest index as appropriate. | 792 | # and update the current count and oldest index as appropriate. |
793 | # If we've gone through the entire list, wait a second, and | 793 | # If we've gone through the entire list, wait a second, and |
794 | # reprocess the entire list until we find a build that has | 794 | # reprocess the entire list until we find a build that has |
795 | # completed | 795 | # completed |
796 | if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then | 796 | if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then |
797 | manage_builds | 797 | manage_builds |
798 | fi | 798 | fi |
799 | done | 799 | done |
800 | } | 800 | } |
801 | 801 | ||
802 | #----------------------------------------------------------------------- | 802 | #----------------------------------------------------------------------- |
803 | 803 | ||
804 | kill_children() { | 804 | kill_children() { |
805 | local OS=$(uname -s) | 805 | local OS=$(uname -s) |
806 | local children="" | 806 | local children="" |
807 | case "${OS}" in | 807 | case "${OS}" in |
808 | "Darwin") | 808 | "Darwin") |
809 | # Mac OS X is known to have BSD style ps | 809 | # Mac OS X is known to have BSD style ps |
810 | local pgid=$(ps -p $$ -o pgid | sed -e "/PGID/d") | 810 | local pgid=$(ps -p $$ -o pgid | sed -e "/PGID/d") |
811 | children=$(ps -g $pgid -o pid | sed -e "/PID\|$$\|$pgid/d") | 811 | children=$(ps -g $pgid -o pid | sed -e "/PID\|$$\|$pgid/d") |
812 | ;; | 812 | ;; |
813 | *) | 813 | *) |
814 | # everything else tries the GNU style | 814 | # everything else tries the GNU style |
815 | local pgid=$(ps -p $$ --no-headers -o "%r" | tr -d ' ') | 815 | local pgid=$(ps -p $$ --no-headers -o "%r" | tr -d ' ') |
816 | children=$(pgrep -g $pgid | sed -e "/$$\|$pgid/d") | 816 | children=$(pgrep -g $pgid | sed -e "/$$\|$pgid/d") |
817 | ;; | 817 | ;; |
818 | esac | 818 | esac |
819 | 819 | ||
820 | kill $children 2> /dev/null | 820 | kill $children 2> /dev/null |
821 | wait $children 2> /dev/null | 821 | wait $children 2> /dev/null |
822 | 822 | ||
823 | exit | 823 | exit |
824 | } | 824 | } |
825 | 825 | ||
826 | print_stats() { | 826 | print_stats() { |
827 | if [ "$ONLY_LIST" == 'y' ] ; then return ; fi | 827 | if [ "$ONLY_LIST" == 'y' ] ; then return ; fi |
828 | 828 | ||
829 | # Only count boards that completed | 829 | # Only count boards that completed |
830 | : $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`)) | 830 | : $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`)) |
831 | 831 | ||
832 | rm -f ${donep}* ${skipp}* | 832 | rm -f ${donep}* ${skipp}* |
833 | 833 | ||
834 | if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then | 834 | if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then |
835 | ERR_LIST=`grep -riwl error ${OUTPUT_PREFIX}/ERR/` | 835 | ERR_LIST=`grep -riwl error ${OUTPUT_PREFIX}/ERR/` |
836 | ERR_LIST=`for f in $ERR_LIST ; do echo -n " $(basename $f)" ; done` | 836 | ERR_LIST=`for f in $ERR_LIST ; do echo -n " $(basename $f)" ; done` |
837 | ERR_CNT=`echo $ERR_LIST | wc -w | awk '{print $1}'` | 837 | ERR_CNT=`echo $ERR_LIST | wc -w | awk '{print $1}'` |
838 | WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/` | 838 | WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/` |
839 | WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done` | 839 | WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done` |
840 | WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'` | 840 | WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'` |
841 | else | 841 | else |
842 | # Remove the logs for any board that was interrupted | 842 | # Remove the logs for any board that was interrupted |
843 | rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR | 843 | rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR |
844 | fi | 844 | fi |
845 | 845 | ||
846 | : $((TOTAL_CNT -= ${SKIP_CNT})) | 846 | : $((TOTAL_CNT -= ${SKIP_CNT})) |
847 | echo "" | 847 | echo "" |
848 | echo "--------------------- SUMMARY ----------------------------" | 848 | echo "--------------------- SUMMARY ----------------------------" |
849 | if [ "$CONTINUE" = 'y' -o "$REBUILD_ERRORS" = 'y' ] ; then | 849 | if [ "$CONTINUE" = 'y' -o "$REBUILD_ERRORS" = 'y' ] ; then |
850 | echo "Boards skipped: ${SKIP_CNT}" | 850 | echo "Boards skipped: ${SKIP_CNT}" |
851 | fi | 851 | fi |
852 | echo "Boards compiled: ${TOTAL_CNT}" | 852 | echo "Boards compiled: ${TOTAL_CNT}" |
853 | if [ ${ERR_CNT} -gt 0 ] ; then | 853 | if [ ${ERR_CNT} -gt 0 ] ; then |
854 | echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )" | 854 | echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )" |
855 | fi | 855 | fi |
856 | if [ ${WRN_CNT} -gt 0 ] ; then | 856 | if [ ${WRN_CNT} -gt 0 ] ; then |
857 | echo "Boards with warnings but no errors: ${WRN_CNT} (${WRN_LIST} )" | 857 | echo "Boards with warnings but no errors: ${WRN_CNT} (${WRN_LIST} )" |
858 | fi | 858 | fi |
859 | echo "----------------------------------------------------------" | 859 | echo "----------------------------------------------------------" |
860 | 860 | ||
861 | if [ $BUILD_MANY == 1 ] ; then | 861 | if [ $BUILD_MANY == 1 ] ; then |
862 | kill_children | 862 | kill_children |
863 | fi | 863 | fi |
864 | 864 | ||
865 | exit $RC | 865 | exit $RC |
866 | } | 866 | } |
867 | 867 | ||
868 | #----------------------------------------------------------------------- | 868 | #----------------------------------------------------------------------- |
869 | 869 | ||
870 | # Build target groups selected by options, plus any command line args | 870 | # Build target groups selected by options, plus any command line args |
871 | set -- ${SELECTED} "$@" | 871 | set -- ${SELECTED} "$@" |
872 | # run PowerPC by default | 872 | # run PowerPC by default |
873 | [ $# = 0 ] && set -- powerpc | 873 | [ $# = 0 ] && set -- powerpc |
874 | build_targets "$@" | 874 | build_targets "$@" |
875 | wait | 875 | wait |
876 | 876 |