@@ -636,7 +636,7 @@ def run(self):
636
636
self .tasks = []
637
637
for task in tasks :
638
638
task .check_timeout ()
639
- if task .procs_pending or task .procs_running :
639
+ if task .procs_pending or task .procs_running or task . stage_running :
640
640
self .tasks .append (task )
641
641
else :
642
642
task .exit_callback ()
@@ -677,6 +677,9 @@ def __init__(self, sbyconfig, workdir, early_logs, reusedir, taskloop=None, logf
677
677
self .taskloop = taskloop or SbyTaskloop ()
678
678
self .taskloop .tasks .append (self )
679
679
680
+ self .base_dependencies = []
681
+ self .stages_running = []
682
+
680
683
self .procs_running = []
681
684
self .procs_pending = []
682
685
@@ -867,7 +870,7 @@ def make_model(self, model_name):
867
870
proc = SbyProc (
868
871
self ,
869
872
model_name ,
870
- [] ,
873
+ self . base_dependencies ,
871
874
"cd {}/src; {} -ql ../model/design.log ../model/design.ys" .format (self .workdir , self .exe_paths ["yosys" ])
872
875
)
873
876
proc .checkretcode = True
@@ -1098,6 +1101,8 @@ def setup_procs(self, setupmode):
1098
1101
self .retcode = 0
1099
1102
return
1100
1103
1104
+ # TODO: Stage stuff
1105
+
1101
1106
if self .opt_make_model is not None :
1102
1107
for name in self .opt_make_model .split ("," ):
1103
1108
self .model (name .strip ())
@@ -1128,6 +1133,12 @@ def setup_procs(self, setupmode):
1128
1133
if opt not in self .used_options :
1129
1134
self .error (f"Unused option: { opt } " )
1130
1135
1136
+ def setup_stage (self , setupmode , config , name , depends ):
1137
+ stage = SbyStage (config , self , name )
1138
+ stage .base_dependencies .extend (depends )
1139
+ self .stages_running .append (stage )
1140
+ stage .setup_procs (setupmode )
1141
+
1131
1142
def summarize (self ):
1132
1143
total_clock_time = int (monotonic () - self .start_clock_time )
1133
1144
@@ -1261,3 +1272,23 @@ def print_junit_result(self, f, junit_ts_name, junit_tc_name, junit_format_stric
1261
1272
print ('</system-err>' , file = f )
1262
1273
print (f'</testsuite>' , file = f )
1263
1274
print (f'</testsuites>' , file = f )
1275
+
1276
+ class SbyStage (SbyTask ):
1277
+ def __init__ (self , sbyconfig , main_task , name ):
1278
+ self .main_task = main_task
1279
+ self .name = name
1280
+ workdir = f'{ main_task .workdir } /stage_{ name } '
1281
+ os .mkdir (workdir )
1282
+
1283
+ super ().__init__ (
1284
+ sbyconfig , workdir ,
1285
+ early_logs = [], reusedir = False ,
1286
+ taskloop = main_task .taskloop , logfile = main_task .logfile
1287
+ )
1288
+
1289
+ self .exit_callback = self .handle_stage_exit
1290
+
1291
+ def handle_stage_exit (self ):
1292
+ self .main_task .stages_running .remove (self )
1293
+
1294
+ # TODO pass the status back to the main task
0 commit comments