Skip to content

Commit 50ca936

Browse files
authored
Add -release:8 to scalacOptions (#4649)
This ensures published Chisel artifacts work with Java 8--both in generated bytecode (which was previously true because default setting is -target:8), but also in disallowing APIs added in newer JDKs. Also unify most handling of scalacOptions into new HasCommonOptions trait.
1 parent c17f77c commit 50ca936

File tree

8 files changed

+40
-44
lines changed

8 files changed

+40
-44
lines changed

build.mill

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ object v extends Module {
9999
"-unchecked",
100100
"-Werror",
101101
"-Ymacro-annotations",
102+
"-release:8",
102103
"-explaintypes",
103104
"-Xcheckinit",
104105
"-Xlint:infer-any",
@@ -137,6 +138,15 @@ trait HasScala2Plugin extends CrossModuleBase {
137138
}
138139
}
139140

141+
trait HasCommonOptions extends CrossModuleBase {
142+
def xsource3: Boolean = true
143+
override def scalacOptions = Task {
144+
if (!v.isScala3(crossScalaVersion)) {
145+
super.scalacOptions() ++ v.scala2CommonOptions ++ Option.when(xsource3)("-Xsource:3")
146+
} else super.scalacOptions()
147+
}
148+
}
149+
140150
trait HasJextractGeneratedSources extends JavaModule {
141151

142152
def jextractBinary: T[os.Path]

core/package.mill

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,11 @@ object `package` extends RootModule {
1313
object cross extends Cross[Core](v.scalaCrossVersions)
1414
}
1515

16-
trait Core extends CrossSbtModule with HasScala2MacroAnno with ScalafmtModule {
16+
trait Core extends CrossSbtModule with HasScala2MacroAnno with HasCommonOptions with ScalafmtModule {
1717
def scalaVersion = crossScalaVersion
1818

1919
def millSourcePath = super.millSourcePath / os.up
2020

21-
override def scalacOptions = Task {
22-
if (v.isScala3(crossScalaVersion)) {
23-
Seq.empty[String]
24-
} else {
25-
v.scala2CommonOptions ++ Seq(
26-
"-Xsource:3"
27-
)
28-
}
29-
}
30-
3121
val crossModuleDeps = Seq(firrtl.cross(crossScalaVersion)) ++ {
3222
if (v.isScala3(crossScalaVersion)) Seq.empty
3323
else Seq(macros.cross(crossScalaVersion))

firrtl/package.mill

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,27 @@ object `package` extends RootModule {
1212
object cross extends Cross[Firrtl](v.scalaCrossVersions)
1313
}
1414

15-
trait Firrtl extends CrossSbtModule with Cross.Module[String] with HasScala2MacroAnno with ScalafmtModule {
15+
trait Firrtl
16+
extends CrossSbtModule
17+
with Cross.Module[String]
18+
with HasScala2MacroAnno
19+
with HasCommonOptions
20+
with ScalafmtModule {
1621
def scalaVersion = crossScalaVersion
1722

1823
def millSourcePath = super.millSourcePath / os.up
1924

2025
override def scalacOptions = Task {
21-
if (v.isScala3(crossScalaVersion)) {
22-
Seq.empty[String]
23-
} else {
24-
v.scala2CommonOptions ++ Seq(
25-
"-language:reflectiveCalls",
26-
"-language:existentials",
27-
"-language:implicitConversions",
28-
"-Yrangepos", // required by SemanticDB compiler plugin
29-
"-Xsource:3",
30-
"-Xsource-features:infer-override"
31-
)
26+
super.scalacOptions() ++ {
27+
if (v.isScala3(crossScalaVersion)) Seq.empty[String]
28+
else
29+
Seq(
30+
"-language:reflectiveCalls",
31+
"-language:existentials",
32+
"-language:implicitConversions",
33+
"-Yrangepos", // required by SemanticDB compiler plugin
34+
"-Xsource-features:infer-override"
35+
)
3236
}
3337
}
3438

integration-tests/package.mill

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@ object `package` extends RootModule {
1212
object cross extends Cross[IntegrationTests](v.scalaCrossVersions)
1313
}
1414

15-
trait IntegrationTests extends CrossSbtModule with HasScala2Plugin with ScalafmtModule {
15+
trait IntegrationTests extends CrossSbtModule with HasScala2Plugin with HasCommonOptions with ScalafmtModule {
1616
def pluginModule = plugin.cross()
1717
def millSourcePath = super.millSourcePath / os.up
1818

19+
// TODO enable
20+
override def xsource3 = false
21+
1922
object test extends SbtTests with TestModule.ScalaTest with ScalafmtModule {
2023
override def moduleDeps = super.moduleDeps :+ chisel().test
2124
def ivyDeps = Agg(v.scalatest, v.scalacheck)

macros/package.mill

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,9 @@ object `package` extends RootModule {
1212
object cross extends Cross[Macros](v.scalaCrossVersions)
1313
}
1414

15-
trait Macros extends CrossSbtModule with HasScala2MacroAnno with ScalafmtModule {
15+
trait Macros extends CrossSbtModule with HasScala2MacroAnno with HasCommonOptions with ScalafmtModule {
1616
def millSourcePath = super.millSourcePath / os.up
1717

18-
override def scalacOptions = Task {
19-
if (v.isScala3(crossScalaVersion)) {
20-
Seq.empty[String]
21-
} else {
22-
v.scala2CommonOptions ++ Seq(
23-
"-Xsource:3"
24-
)
25-
}
26-
}
27-
2818
override def ivyDeps =
2919
if (!v.isScala3(crossScalaVersion)) {
3020
super.ivyDeps() ++ Seq(v.scalaReflect(crossScalaVersion))

plugin/package.mill

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,17 @@ object `package` extends RootModule {
1313
object cross extends Cross[Plugin](v.pluginScalaCrossVersions)
1414
}
1515

16-
trait Plugin extends CrossSbtModule with ScalafmtModule with release.ChiselPublishModule {
16+
trait Plugin extends CrossSbtModule with ScalafmtModule with HasCommonOptions with release.ChiselPublishModule {
1717
override def artifactName = "chisel-plugin"
1818

1919
def millSourcePath = super.millSourcePath / os.up
2020

2121
// The plugin is compiled for every minor Scala version
2222
override def crossFullScalaVersion = true
2323

24+
// There is no code sharing in the plugin so no point in -Xsource:3
25+
override def xsource3 = false
26+
2427
def scalaLibraryIvy = v.scalaLibrary(crossScalaVersion)
2528
def scalaReflectIvy = v.scalaReflect(crossScalaVersion)
2629
def scalaCompilerIvy: Dep = v.scalaCompiler(crossScalaVersion)

stdlib/package.mill

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ object `package` extends RootModule {
1212
object cross extends Cross[Stdlib](v.scalaCrossVersions)
1313
}
1414

15-
trait Stdlib extends CrossSbtModule with HasScala2Plugin with ScalafmtModule {
15+
trait Stdlib extends CrossSbtModule with HasScala2Plugin with HasCommonOptions with ScalafmtModule {
1616
def millSourcePath = super.millSourcePath / os.up
1717
def chiselModule = chisel(crossScalaVersion)
1818
def pluginModule = plugin.cross(crossScalaVersion)

svsim/package.mill

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,14 @@ object `package` extends RootModule {
1212
object cross extends Cross[Svsim](v.scalaCrossVersions)
1313
}
1414

15-
trait Svsim extends CrossSbtModule with ScalafmtModule {
15+
trait Svsim extends CrossSbtModule with HasCommonOptions with ScalafmtModule {
1616
def millSourcePath = super.millSourcePath / os.up
1717

1818
override def scalacOptions = Task {
19-
if (v.isScala3(crossScalaVersion)) {
20-
Seq.empty[String]
21-
} else {
22-
v.scala2CommonOptions ++ Seq(
23-
"-Xsource:3",
19+
super.scalacOptions() ++
20+
Option.when(!v.isScala3(crossScalaVersion))(
2421
"-Xsource-features:case-apply-copy-access"
2522
)
26-
}
2723
}
2824

2925
object test extends SbtTests with TestModule.ScalaTest with ScalafmtModule {

0 commit comments

Comments
 (0)