Skip to content

Commit 6decefd

Browse files
committed
fixup! [svsim] Add -j, --build-jobs, and --verilate-jobs
1 parent c633c55 commit 6decefd

File tree

2 files changed

+66
-93
lines changed

2 files changed

+66
-93
lines changed

svsim/src/main/scala/verilator/Backend.scala

Lines changed: 60 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,41 @@ object Backend {
7474
}
7575

7676
/** Apply uniform parallelism to Verilation. This maps to `-j`. */
77-
case class Uniform(num: Int) extends Type {
77+
class Uniform private (num: Int) extends Type {
7878
override def toCompileFlags = Seq("-j", num.toString)
79+
80+
private def copy(num: Int): Uniform = new Uniform(num = num)
81+
82+
def withNum(num: Int): Uniform = copy(num = num)
83+
}
84+
85+
object Uniform {
86+
def default: Uniform = new Uniform(num = 0)
7987
}
8088

8189
/** Apply non-uniform parallelism to Verilation. This allows control of
8290
* `--build-jobs` and `--verilate-jobs` separately.
8391
*/
84-
case class Different(build: Option[Int] = None, verilate: Option[Int] = None) extends Type {
92+
class Different private (build: Option[Int], verilate: Option[Int]) extends Type {
8593
override def toCompileFlags: Seq[String] = {
8694
val buildJobs: Seq[String] = build.map(num => Seq("--build-jobs", num.toString)).toSeq.flatten
8795
val verilateJobs: Seq[String] = verilate.map(num => Seq("--verilate-jobs", num.toString)).toSeq.flatten
8896
buildJobs ++ verilateJobs
8997
}
98+
99+
private def copy(build: Option[Int] = this.build, verilate: Option[Int] = this.verilate): Different =
100+
new Different(
101+
build = build,
102+
verilate = verilate
103+
)
104+
105+
def withBuild(build: Option[Int]): Different = copy(build = build)
106+
107+
def withVerilate(verilate: Option[Int]): Different = copy(verilate = verilate)
108+
}
109+
110+
object Different {
111+
def default = new Different(build = None, verilate = None)
90112
}
91113
}
92114

@@ -107,7 +129,7 @@ object Backend {
107129
disableFatalExitOnWarnings,
108130
enableAllAssertions,
109131
timing,
110-
Some(CompilationSettings.Parallelism.Uniform(0))
132+
Some(CompilationSettings.Parallelism.Uniform.default)
111133
)
112134

113135
@deprecated("avoid use of unapply", "Chisel 7.1.0")
@@ -143,7 +165,7 @@ object Backend {
143165
disableFatalExitOnWarnings: Boolean = false,
144166
enableAllAssertions: Boolean = false,
145167
timing: Option[CompilationSettings.Timing.Type] = None,
146-
parallelism: Option[CompilationSettings.Parallelism.Type] = Some(CompilationSettings.Parallelism.Uniform(0))
168+
parallelism: Option[CompilationSettings.Parallelism.Type] = Some(CompilationSettings.Parallelism.Uniform.default)
147169
) extends svsim.Backend.Settings {
148170
def this(
149171
traceStyle: Option[CompilationSettings.TraceStyle],
@@ -161,7 +183,27 @@ object Backend {
161183
disableFatalExitOnWarnings,
162184
enableAllAssertions,
163185
timing,
164-
Some(CompilationSettings.Parallelism.Uniform(0))
186+
Some(CompilationSettings.Parallelism.Uniform.default)
187+
)
188+
189+
def _copy(
190+
traceStyle: Option[CompilationSettings.TraceStyle] = this.traceStyle,
191+
outputSplit: Option[Int] = this.outputSplit,
192+
outputSplitCFuncs: Option[Int] = this.outputSplitCFuncs,
193+
disabledWarnings: Seq[String] = this.disabledWarnings,
194+
disableFatalExitOnWarnings: Boolean = this.disableFatalExitOnWarnings,
195+
enableAllAssertions: Boolean = this.enableAllAssertions,
196+
timing: Option[CompilationSettings.Timing.Type] = this.timing,
197+
parallelism: Option[CompilationSettings.Parallelism.Type] = this.parallelism
198+
): CompilationSettings = CompilationSettings(
199+
traceStyle = traceStyle,
200+
outputSplit = outputSplit,
201+
outputSplitCFuncs = outputSplitCFuncs,
202+
disabledWarnings = disabledWarnings,
203+
disableFatalExitOnWarnings = disableFatalExitOnWarnings,
204+
enableAllAssertions = enableAllAssertions,
205+
timing = timing,
206+
parallelism = parallelism
165207
)
166208

167209
@deprecated("don't use the copy method, use 'with<name>' single setters", "Chisel 7.1.0")
@@ -173,7 +215,7 @@ object Backend {
173215
disableFatalExitOnWarnings: Boolean = this.disableFatalExitOnWarnings,
174216
enableAllAssertions: Boolean = this.enableAllAssertions,
175217
timing: Option[CompilationSettings.Timing.Type] = this.timing
176-
): CompilationSettings = CompilationSettings(
218+
): CompilationSettings = _copy(
177219
traceStyle = traceStyle,
178220
outputSplit = outputSplit,
179221
outputSplitCFuncs = outputSplitCFuncs,
@@ -194,104 +236,33 @@ object Backend {
194236
enableAllAssertions: Boolean,
195237
timing: Option[CompilationSettings.Timing.Type],
196238
parallelism: Option[CompilationSettings.Parallelism.Type]
197-
): CompilationSettings = CompilationSettings(
239+
): CompilationSettings = _copy(
198240
traceStyle = traceStyle,
199241
outputSplit = outputSplit,
200242
outputSplitCFuncs = outputSplitCFuncs,
201243
disabledWarnings = disabledWarnings,
202244
disableFatalExitOnWarnings = disableFatalExitOnWarnings,
203245
enableAllAssertions = enableAllAssertions,
204246
timing = timing,
205-
parallelism = Some(CompilationSettings.Parallelism.Uniform(0))
247+
parallelism = Some(CompilationSettings.Parallelism.Uniform.default)
206248
)
207249

208-
def withTraceStyle(traceStyle: Option[CompilationSettings.TraceStyle]) = CompilationSettings(
209-
traceStyle,
210-
this.outputSplit,
211-
this.outputSplitCFuncs,
212-
this.disabledWarnings,
213-
this.disableFatalExitOnWarnings,
214-
this.enableAllAssertions,
215-
this.timing,
216-
this.parallelism
217-
)
250+
def withTraceStyle(traceStyle: Option[CompilationSettings.TraceStyle]) = _copy(traceStyle = traceStyle)
218251

219-
def withOutputSplit(outputSplit: Option[Int]) = CompilationSettings(
220-
this.traceStyle,
221-
this.outputSplit,
222-
outputSplitCFuncs,
223-
this.disabledWarnings,
224-
this.disableFatalExitOnWarnings,
225-
this.enableAllAssertions,
226-
this.timing,
227-
this.parallelism
228-
)
252+
def withOutputSplit(outputSplit: Option[Int]) = _copy(outputSplit = outputSplit)
229253

230-
def withOutputSplitCFuncs(outputSplitCFuncs: Option[Int]) = CompilationSettings(
231-
this.traceStyle,
232-
this.outputSplit,
233-
outputSplitCFuncs,
234-
this.disabledWarnings,
235-
this.disableFatalExitOnWarnings,
236-
this.enableAllAssertions,
237-
this.timing,
238-
this.parallelism
239-
)
254+
def withOutputSplitCFuncs(outputSplitCFuncs: Option[Int]) = _copy(outputSplitCFuncs = outputSplitCFuncs)
240255

241-
def withDisabledWarnings(disabledWarnings: Seq[String]) = CompilationSettings(
242-
this.traceStyle,
243-
this.outputSplit,
244-
this.outputSplitCFuncs,
245-
disabledWarnings,
246-
this.disableFatalExitOnWarnings,
247-
this.enableAllAssertions,
248-
this.timing,
249-
this.parallelism
250-
)
256+
def withDisabledWarnings(disabledWarnings: Seq[String]) = _copy(disabledWarnings = disabledWarnings)
251257

252-
def withDisableFatalExitOnWarnings(disableFatalExitOnWarnings: Boolean) = CompilationSettings(
253-
this.traceStyle,
254-
this.outputSplit,
255-
this.outputSplitCFuncs,
256-
this.disabledWarnings,
257-
disableFatalExitOnWarnings,
258-
this.enableAllAssertions,
259-
this.timing,
260-
this.parallelism
261-
)
258+
def withDisableFatalExitOnWarnings(disableFatalExitOnWarnings: Boolean) =
259+
_copy(disableFatalExitOnWarnings = disableFatalExitOnWarnings)
262260

263-
def withEnableAllAssertions(enableAllAssertions: Boolean) = CompilationSettings(
264-
this.traceStyle,
265-
this.outputSplit,
266-
this.outputSplitCFuncs,
267-
this.disabledWarnings,
268-
this.disableFatalExitOnWarnings,
269-
enableAllAssertions,
270-
this.timing,
271-
this.parallelism
272-
)
261+
def withEnableAllAssertions(enableAllAssertions: Boolean) = _copy(enableAllAssertions = enableAllAssertions)
273262

274-
def withTiming(timing: Option[CompilationSettings.Timing.Type]) = CompilationSettings(
275-
this.traceStyle,
276-
this.outputSplit,
277-
this.outputSplitCFuncs,
278-
this.disabledWarnings,
279-
this.disableFatalExitOnWarnings,
280-
this.enableAllAssertions,
281-
timing,
282-
this.parallelism
283-
)
263+
def withTiming(timing: Option[CompilationSettings.Timing.Type]) = _copy(timing = timing)
284264

285-
def withParallelism(parallelism: Option[CompilationSettings.Parallelism.Type]) = CompilationSettings(
286-
this.traceStyle,
287-
this.outputSplit,
288-
this.outputSplitCFuncs,
289-
this.disabledWarnings,
290-
this.disableFatalExitOnWarnings,
291-
this.enableAllAssertions,
292-
this.timing,
293-
parallelism
294-
)
265+
def withParallelism(parallelism: Option[CompilationSettings.Parallelism.Type]) = _copy(parallelism = parallelism)
295266
}
296267

297268
def initializeFromProcessEnvironment() = {
@@ -338,7 +309,7 @@ final class Backend(executablePath: String) extends svsim.Backend {
338309

339310
backendSpecificSettings.parallelism match {
340311
case Some(parallelism) => addArg(parallelism.toCompileFlags)
341-
case None =>
312+
case None => ()
342313
}
343314

344315
commonSettings.libraryExtensions.foreach { extensions =>

svsim/src/test/scala/CommandLineSpec.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,24 @@ class CommandLineSpec extends AnyFlatSpec with Matchers {
2121
OptionTest("default", CompilationSettings(), Seq("-j", "0")),
2222
OptionTest(
2323
"uniform parallelism",
24-
CompilationSettings(parallelism = Some(Parallelism.Uniform(2))),
24+
CompilationSettings(parallelism = Some(Parallelism.Uniform.default.withNum(2))),
2525
Seq("-j", "2")
2626
),
2727
OptionTest(
2828
"only build parallelism",
29-
CompilationSettings(parallelism = Some(Parallelism.Different(build = Some(4)))),
29+
CompilationSettings(parallelism = Some(Parallelism.Different.default.withBuild(Some(4)))),
3030
Seq("--build-jobs", "4")
3131
),
3232
OptionTest(
3333
"only verilate parallelism",
34-
CompilationSettings(parallelism = Some(Parallelism.Different(verilate = Some(8)))),
34+
CompilationSettings(parallelism = Some(Parallelism.Different.default.withVerilate(Some(8)))),
3535
Seq("--verilate-jobs", "8")
3636
),
3737
OptionTest(
3838
"different build and verilate parallelism",
39-
CompilationSettings(parallelism = Some(Parallelism.Different(build = Some(16), verilate = Some(32)))),
39+
CompilationSettings(parallelism =
40+
Some(Parallelism.Different.default.withBuild(Some(16)).withVerilate(Some(32)))
41+
),
4042
Seq("--build-jobs", "16", "--verilate-jobs", "32")
4143
)
4244
)

0 commit comments

Comments
 (0)