2424build_status = [STATUS_OK , STATUS_FAILED , STATUS_SKIPPED ]
2525
2626verbose = False
27- clean_build = False
2827parallel_jobs = os .cpu_count ()
2928
3029# CI board control lists (used when running under CI)
@@ -106,7 +105,7 @@ def print_build_result(board, build_target, status, duration):
106105# -----------------------------
107106# CMake
108107# -----------------------------
109- def cmake_board (board , build_args , build_flags_on , build_target ):
108+ def cmake_board (board , build_args , build_flags_on , build_targets ):
110109 ret = [0 , 0 , 0 ]
111110 start_time = time .monotonic ()
112111
@@ -135,41 +134,44 @@ def cmake_board(board, build_args, build_flags_on, build_target):
135134 f'-DBOARD={ board } ' , '-DCMAKE_BUILD_TYPE=MinSizeRel' , '-DLINKERMAP_OPTION=-q -f tinyusb/src' ,
136135 * build_args , * build_flags ])
137136 if rcmd .returncode == 0 :
138- if clean_build :
139- run_cmd (["cmake" , "--build" , build_dir , '--target' , 'clean' ])
140- cmd = ["cmake" , "--build" , build_dir , '--target' , build_target , '--parallel' , str (parallel_jobs )]
141- rcmd = run_cmd (cmd )
137+ cmd = ["cmake" , "--build" , build_dir , '--parallel' , str (parallel_jobs )]
138+ for target in build_targets :
139+ rcmd = run_cmd (cmd + ['--target' , target ])
140+ if rcmd .returncode != 0 :
141+ break
142142 ret [0 if rcmd .returncode == 0 else 1 ] += 1
143143
144- print_build_result (board , build_target , 0 if ret [1 ] == 0 else 1 , time .monotonic () - start_time )
144+ print_build_result (board , ',' . join ( build_targets ) , 0 if ret [1 ] == 0 else 1 , time .monotonic () - start_time )
145145 return ret
146146
147147
148148# -----------------------------
149149# Make
150150# -----------------------------
151- def make_one_example (example , board , make_option , build_target ):
151+ def make_one_example (example , board , make_option , build_targets ):
152152 # Check if board is skipped
153153 if build_utils .skip_example (example , board ):
154154 print_build_result (board , example , 2 , '-' )
155155 r = 2
156156 else :
157157 start_time = time .monotonic ()
158- make_args = ["make" , "-C" , f"examples/{ example } " , f"BOARD={ board } " , '-j' , str (parallel_jobs )]
158+ make_cmd = ["make" , "-C" , f"examples/{ example } " , f"BOARD={ board } " , '-j' , str (parallel_jobs )]
159159 if make_option :
160- make_args += shlex .split (make_option )
161- if clean_build :
162- run_cmd (make_args + ["clean" ])
163- build_result = run_cmd (make_args + [build_target ])
164- r = 0 if build_result .returncode == 0 else 1
160+ make_cmd += shlex .split (make_option )
161+ r = 0
162+ for target in build_targets :
163+ build_result = run_cmd (make_cmd + [target ])
164+ if build_result .returncode != 0 :
165+ r = 1
166+ break
165167 print_build_result (board , example , r , time .monotonic () - start_time )
166168
167169 ret = [0 , 0 , 0 ]
168170 ret [r ] = 1
169171 return ret
170172
171173
172- def make_board (board , build_args , build_target ):
174+ def make_board (board , build_args , build_targets ):
173175 print (build_separator )
174176 family = find_family (board );
175177 all_examples = get_examples (family )
@@ -180,7 +182,7 @@ def make_board(board, build_args, build_target):
180182 final_status = 2
181183 else :
182184 with Pool (processes = os .cpu_count ()) as pool :
183- pool_args = list ((map (lambda e , b = board , o = f"{ build_args } " , t = build_target : [e , b , o , t ], all_examples )))
185+ pool_args = list ((map (lambda e , b = board , o = f"{ build_args } " , t = build_targets : [e , b , o , t ], all_examples )))
184186 r = pool .starmap (make_one_example , pool_args )
185187 # sum all element of same index (column sum)
186188 ret = list (map (sum , list (zip (* r ))))
@@ -192,16 +194,16 @@ def make_board(board, build_args, build_target):
192194# -----------------------------
193195# Build Family
194196# -----------------------------
195- def build_boards_list (boards , build_defines , build_system , build_flags_on , build_target ):
197+ def build_boards_list (boards , build_defines , build_system , build_flags_on , build_targets ):
196198 ret = [0 , 0 , 0 ]
197199 for b in boards :
198200 r = [0 , 0 , 0 ]
199201 if build_system == 'cmake' :
200202 build_args = [f'-D{ d } ' for d in build_defines ]
201- r = cmake_board (b , build_args , build_flags_on , build_target )
203+ r = cmake_board (b , build_args , build_flags_on , build_targets )
202204 elif build_system == 'make' :
203205 build_args = ' ' .join (f'{ d } ' for d in build_defines )
204- r = make_board (b , build_args , build_target )
206+ r = make_board (b , build_args , build_targets )
205207 ret [0 ] += r [0 ]
206208 ret [1 ] += r [1 ]
207209 ret [2 ] += r [2 ]
@@ -251,13 +253,11 @@ def get_family_boards(family, one_random, one_first):
251253# -----------------------------
252254def main ():
253255 global verbose
254- global clean_build
255256 global parallel_jobs
256257
257258 parser = argparse .ArgumentParser ()
258259 parser .add_argument ('families' , nargs = '*' , default = [], help = 'Families to build' )
259260 parser .add_argument ('-b' , '--board' , action = 'append' , default = [], help = 'Boards to build' )
260- parser .add_argument ('-c' , '--clean' , action = 'store_true' , default = False , help = 'Clean before build' )
261261 parser .add_argument ('-t' , '--toolchain' , default = 'gcc' , help = 'Toolchain to use, default is gcc' )
262262 parser .add_argument ('-s' , '--build-system' , default = 'cmake' , help = 'Build system to use, default is cmake' )
263263 parser .add_argument ('-D' , '--define-symbol' , action = 'append' , default = [], help = 'Define to pass to build system' )
@@ -267,7 +267,8 @@ def main():
267267 parser .add_argument ('--one-first' , action = 'store_true' , default = False ,
268268 help = 'Build only the first board (alphabetical) of each specified family' )
269269 parser .add_argument ('-j' , '--jobs' , type = int , default = os .cpu_count (), help = 'Number of jobs to run in parallel' )
270- parser .add_argument ('-T' , '--target' , default = 'all' , help = 'Build target to use, default is all' )
270+ parser .add_argument ('-T' , '--target' , action = 'append' , default = [],
271+ help = 'Build target to use, may be specified multiple times (default: all)' )
271272 parser .add_argument ('-v' , '--verbose' , action = 'store_true' , help = 'Verbose output' )
272273 args = parser .parse_args ()
273274
@@ -279,9 +280,8 @@ def main():
279280 build_flags_on = args .build_flags_on
280281 one_random = args .one_random
281282 one_first = args .one_first
282- build_target = args .target
283+ build_targets = args .target if args . target else [ 'all' ]
283284 verbose = args .verbose
284- clean_build = args .clean
285285 parallel_jobs = args .jobs
286286
287287 build_defines .append (f'TOOLCHAIN={ toolchain } ' )
@@ -310,7 +310,7 @@ def main():
310310 all_boards .extend (get_family_boards (f , one_random , one_first ))
311311
312312 # build all boards
313- result = build_boards_list (all_boards , build_defines , build_system , build_flags_on , build_target )
313+ result = build_boards_list (all_boards , build_defines , build_system , build_flags_on , build_targets )
314314
315315 total_time = time .monotonic () - total_time
316316 print (build_separator )
0 commit comments