@@ -142,8 +142,10 @@ def add_parser_common(command, parser_adder=None, parser=None):
142
142
help = argparse .SUPPRESS )
143
143
group .add_argument ('-r' , '--runner' ,
144
144
help = 'override default runner from --build-dir' )
145
- group .add_argument ('-- skip-rebuild' , action = 'store_true' ,
145
+ group .add_argument ('-s' , '-- skip-rebuild', "--no-rebuild" , action = 'store_true' ,
146
146
help = 'do not refresh cmake dependencies first' )
147
+ group .add_argument ('--force-rebuild' , '--rebuild' , action = 'store_true' ,
148
+ help = 'force a refresh of the cmake dependencies before running' )
147
149
group .add_argument ('--domain' , action = 'append' ,
148
150
help = 'execute runner only for given domain' )
149
151
@@ -244,8 +246,7 @@ def do_run_common(command, user_args, user_runner_args, domain_file=None):
244
246
)
245
247
246
248
build_dir = get_build_dir (user_args )
247
- if not user_args .skip_rebuild :
248
- rebuild (command , build_dir , user_args )
249
+ rebuild (command , build_dir , user_args )
249
250
250
251
domains = get_domains_to_process (build_dir , user_args , domain_file )
251
252
@@ -568,6 +569,28 @@ def load_cmake_cache(build_dir, args):
568
569
log .die (f'no CMake cache found (expected one at { cache_file } )' )
569
570
570
571
def rebuild (command , build_dir , args ):
572
+ rebuild_config = config .get (command .name , 'rebuild' , fallback = 'true' ).lower ()
573
+
574
+ # Truth table ->
575
+ # config rebuild | manual option | rebuild?
576
+ # ==========================================
577
+ # X | skip | skip
578
+ # X | force | rebuild
579
+ # true (default) | [none] | rebuild
580
+ # false | [none] | skip
581
+ #============================================
582
+ # Therefore, only two cases in which we skip:
583
+
584
+ # user manually specified skip rebuild, so we skip
585
+ if args .skip_rebuild :
586
+ return
587
+
588
+ # config says to skip, and user did not manually override, so skip
589
+ if rebuild_config == 'false' and not args .force_rebuild :
590
+ return
591
+
592
+ # any other case, we do rebuild
593
+
571
594
_banner (f'west { command .name } : rebuilding' )
572
595
try :
573
596
zcmake .run_build (build_dir )
@@ -723,7 +746,7 @@ def dump_context(command, args, unknown_args):
723
746
get_all_domain = True
724
747
725
748
# Re-build unless asked not to, to make sure the output is up to date.
726
- if build_dir and not args . skip_rebuild :
749
+ if build_dir :
727
750
rebuild (command , build_dir , args )
728
751
729
752
domains = get_domains_to_process (build_dir , args , None , get_all_domain )
0 commit comments