Skip to content

Commit aaacf72

Browse files
authored
Merge pull request #6 from jozanek/cross-build-scala3
Introduce cross compile build for scala 3.
2 parents 0a5d7e6 + 77ce30d commit aaacf72

15 files changed

Lines changed: 153 additions & 492 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
strategy:
2020
matrix:
2121
os: [ubuntu-latest]
22-
scala: [2.13.8, 2.12.15, 2.11.12]
22+
scala: [3.3.5, 2.13.16, 2.12.20, 2.11.12]
2323
2424
runs-on: ${{ matrix.os }}
2525
env:
@@ -62,7 +62,7 @@ jobs:
6262
strategy:
6363
matrix:
6464
os: [ubuntu-latest]
65-
scala: [2.13.8, 2.12.15]
65+
scala: [3.3.5, 2.13.16, 2.12.20]
6666
6767
runs-on: ${{ matrix.os }}
6868
env:

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,11 @@ TAGS
1616
.#*
1717
.lib
1818
.idea/
19-
.bsp/
19+
.bsp/
20+
21+
# Metals
22+
.metals/
23+
**/metals.sbt
24+
25+
# Bloop
26+
**/.bloop

build.sbt

Lines changed: 55 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ lazy val scalac: Seq[String] = Seq(
1111
"-unchecked", // Enable additional warnings where generated code depends on assumptions.
1212
"-Xfatal-warnings", // Fail the compilation if there are any warnings.
1313
// "-Ypartial-unification", // Enable partial unification in type constructor inference
14-
"-Ywarn-dead-code", // Warn when dead code is identified.
15-
"-Ywarn-numeric-widen" // Warn when numerics are widened.
14+
// "-Ywarn-dead-code", // Warn when dead code is identified.
15+
// "-Ywarn-numeric-widen" // Warn when numerics are widened.
1616
//"-Xlog-free-terms",
1717
)
1818

@@ -25,6 +25,8 @@ lazy val scalac211: Seq[String] = Seq(
2525
"-Ywarn-nullary-override", // Warn when non-nullary `def f()' overrides nullary `def f'.
2626
"-Ywarn-nullary-unit", // Warn when nullary methods return Unit.
2727
"-Xfuture", // Turn on future language features.
28+
"-Ywarn-dead-code", // Warn when dead code is identified.
29+
"-Ywarn-numeric-widen" // Warn when numerics are widened.
2830
)
2931

3032
lazy val scalac212: Seq[String] = Seq(
@@ -63,6 +65,8 @@ lazy val scalac212: Seq[String] = Seq(
6365
"-Xlint:unsound-match", // Pattern match may not be typesafe.
6466
"-Ywarn-infer-any", // Warn when a type argument is inferred to be `Any`.
6567
"-Xfuture", // Turn on future language features.
68+
"-Ywarn-dead-code", // Warn when dead code is identified.
69+
"-Ywarn-numeric-widen" // Warn when numerics are widened.
6670
)
6771

6872
lazy val scalac213: Seq[String] = Seq(
@@ -93,11 +97,19 @@ lazy val scalac213: Seq[String] = Seq(
9397
"-Xlint:private-shadow", // A private field (or class parameter) shadows a superclass field.
9498
"-Xlint:stars-align", // Pattern sequence wildcard must align with sequence component.
9599
"-Xlint:type-parameter-shadow", // A local type parameter shadows a type already in scope.
100+
"-Ywarn-dead-code", // Warn when dead code is identified.
101+
"-Ywarn-numeric-widen" // Warn when numerics are widened.
96102
)
97103

98-
lazy val scala213 = "2.13.8"
99-
lazy val scala212 = "2.12.15"
104+
lazy val scalac3: Seq[String] = Seq(
105+
"-source:3.0-migration" // makes the compiler forgiving on most of the dropped features, printing warnings in place of errors
106+
)
107+
108+
lazy val scala213 = "2.13.16"
109+
lazy val scala212 = "2.12.20"
100110
lazy val scala211 = "2.11.12"
111+
lazy val scala3 = "3.3.5"
112+
lazy val scalatestVersion = "3.2.19"
101113

102114
organization := "org.scorexfoundation"
103115

@@ -108,22 +120,45 @@ def deboxSettings = Seq(
108120
description := "Fast, deboxed, specialized data structures for Scala (fork of non/debox)",
109121

110122
resolvers += Resolver.sonatypeRepo("public"),
111-
libraryDependencies ++= Seq(
112-
scalaOrganization.value % "scala-reflect" % scalaVersion.value % "provided",
113-
"org.scalatest" %%% "scalatest" % "3.3.0-SNAP3" % Test,
114-
"org.scalatest" %%% "scalatest-propspec" % "3.3.0-SNAP3" % Test,
115-
"org.scalatest" %%% "scalatest-shouldmatchers" % "3.3.0-SNAP3" % Test,
116-
"org.scalatestplus" %%% "scalacheck-1-15" % "3.3.0.0-SNAP3" % Test,
117-
"org.scalacheck" %%% "scalacheck" % "1.15.2" % Test
118-
),
119-
scalacOptions := {
123+
libraryDependencies ++= {
124+
val base = Seq(
125+
"org.scalatest" %%% "scalatest" % scalatestVersion % Test,
126+
"org.scalatest" %%% "scalatest-propspec" % scalatestVersion % Test,
127+
"org.scalatest" %%% "scalatest-shouldmatchers" % scalatestVersion % Test
128+
)
129+
val reflect = Seq(scalaOrganization.value % "scala-reflect" % scalaVersion.value % "provided")
130+
val core211 = Seq(
131+
"org.typelevel" %%% "spire-macros" % "0.17.0-M1",
132+
"org.scalatestplus" %%% "scalacheck-1-15" % "3.2.4.0-M1" % Test,
133+
"org.scalacheck" %%% "scalacheck" % "1.15.2" % Test
134+
)
135+
val spireMacros = Seq("org.typelevel" %%% "spire-macros" % "0.17.0")
136+
val spire = Seq("org.typelevel" %%% "spire" % "0.18.0")
137+
val scalacheck = Seq(
138+
"org.scalatestplus" %%% "scalacheck-1-18" % "3.2.19.0" % Test,
139+
"org.scalacheck" %%% "scalacheck" % "1.18.1" % Test
140+
)
141+
CrossVersion.partialVersion(scalaVersion.value) match {
142+
case Some((2, 11)) =>
143+
base ++ core211
144+
case Some((2, 12)) =>
145+
base ++ scalacheck ++ spireMacros ++ reflect
146+
case Some((2, 13)) =>
147+
base ++ scalacheck ++ spireMacros ++ reflect
148+
case Some((3, _)) =>
149+
base ++ scalacheck ++ spire
150+
}
151+
},
152+
scalacOptions ++= {
120153
CrossVersion.partialVersion(scalaVersion.value) match {
121-
case Some((2, n)) if n == 13 =>
122-
scalac ++ scalac213
123-
case Some((2, n)) if n == 12 =>
124-
scalac ++ scalac212
125154
case Some((2, 11)) =>
126155
scalac ++ scalac211
156+
case Some((2, 12)) =>
157+
scalac ++ scalac212
158+
case Some((2, 13)) =>
159+
scalac ++ scalac213
160+
case Some((3, _)) =>
161+
scalac ++ scalac3
127162
}
128163
},
129164
javacOptions ++= javacReleaseOption,
@@ -157,18 +192,12 @@ lazy val core = crossProject(JSPlatform, JVMPlatform)
157192
.settings(moduleName := "debox")
158193
.settings(deboxSettings)
159194
.jvmSettings(
160-
libraryDependencies ++= Seq(
161-
"org.typelevel" %%% "spire-macros" % "0.17.0-M1" // The last version published for Scala 2.11-2.13
162-
),
163195
scalaVersion := scala213,
164-
crossScalaVersions := Seq(scala211, scala212, scala213)
196+
crossScalaVersions := Seq(scala211, scala212, scala213, scala3)
165197
)
166198
.jsSettings(
167199
scalaVersion := scala213,
168-
crossScalaVersions := Seq(scala213, scala212),
169-
libraryDependencies ++= Seq(
170-
"org.typelevel" %%% "spire-macros" % "0.17.0" // Version supporting Scala.js 1.x 2.13, 3.x
171-
),
200+
crossScalaVersions := Seq(scala212, scala213, scala3),
172201
Test / parallelExecution := false
173202
)
174203

@@ -177,7 +206,7 @@ lazy val benchmark = project
177206
.dependsOn(core.jvm)
178207
.settings(
179208
moduleName := "debox-benchmark",
180-
crossScalaVersions := Seq(scala211, scala212, scala213),
209+
crossScalaVersions := Seq(scala211, scala212, scala213, scala3),
181210
scalaVersion := scala213,
182211
)
183212
.enablePlugins(JmhPlugin)

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.5.4
1+
sbt.version=1.10.7

project/plugins.sbt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.2.1")
2-
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.17")
3-
addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.3.2")
4-
addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
5-
addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.1.1")
6-
addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.2.0")
7-
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1")
8-
1+
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.3.1")
2+
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.12.2")
3+
addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7")
4+
addSbtPlugin("com.github.sbt" % "sbt-git" % "2.1.0")
5+
addSbtPlugin("com.github.sbt" % "sbt-dynver" % "5.1.0")
6+
addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2")
7+
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2")

0 commit comments

Comments
 (0)