Skip to content

Commit 2ccd1f1

Browse files
authored
Merge pull request #1180 from armanbilge/feature/native
Cross-build for Native
2 parents 9d4c7f4 + 511585a commit 2ccd1f1

File tree

6 files changed

+53
-25
lines changed

6 files changed

+53
-25
lines changed

.github/workflows/ci.yml

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
os: [ubuntu-latest]
3131
scala: [2.13.8, 3.1.2]
3232
java: [temurin@8, temurin@11, temurin@17]
33-
project: [rootJS, rootJVM]
33+
project: [rootJS, rootJVM, rootNative]
3434
exclude:
3535
- scala: 2.13.8
3636
java: temurin@11
@@ -40,6 +40,10 @@ jobs:
4040
java: temurin@11
4141
- project: rootJS
4242
java: temurin@17
43+
- project: rootNative
44+
java: temurin@11
45+
- project: rootNative
46+
java: temurin@17
4347
runs-on: ${{ matrix.os }}
4448
steps:
4549
- name: Checkout current branch (full)
@@ -118,6 +122,10 @@ jobs:
118122
if: matrix.project == 'rootJS'
119123
run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' Test/scalaJSLinkerResult
120124

125+
- name: nativeLink
126+
if: matrix.project == 'rootNative'
127+
run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' Test/nativeLink
128+
121129
- name: Test
122130
run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' test
123131

@@ -131,11 +139,11 @@ jobs:
131139

132140
- name: Make target directories
133141
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
134-
run: mkdir -p data/.jvm/target legacy/.jvm/target extras/.js/target examples/target target platform/js/target macros/.jvm/target .js/target site/target core/.js/target macros/.js/target laws/.js/target legacy/.js/target core/.jvm/target tests/js/target .jvm/target .native/target platform/jvm/target util/.js/target data/.js/target util/.jvm/target laws/.jvm/target tests/jvm/target extras/.jvm/target benchmark/target project/target
142+
run: mkdir -p data/.jvm/target legacy/.jvm/target extras/.js/target examples/target util/.native/target extras/.native/target target platform/js/target macros/.jvm/target legacy/.native/target .js/target core/.native/target site/target macros/.native/target laws/.native/target core/.js/target macros/.js/target laws/.js/target legacy/.js/target core/.jvm/target tests/js/target .jvm/target .native/target platform/jvm/target util/.js/target platform/native/target data/.js/target util/.jvm/target laws/.jvm/target tests/jvm/target extras/.jvm/target data/.native/target benchmark/target tests/native/target project/target
135143

136144
- name: Compress target directories
137145
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
138-
run: tar cf targets.tar data/.jvm/target legacy/.jvm/target extras/.js/target examples/target target platform/js/target macros/.jvm/target .js/target site/target core/.js/target macros/.js/target laws/.js/target legacy/.js/target core/.jvm/target tests/js/target .jvm/target .native/target platform/jvm/target util/.js/target data/.js/target util/.jvm/target laws/.jvm/target tests/jvm/target extras/.jvm/target benchmark/target project/target
146+
run: tar cf targets.tar data/.jvm/target legacy/.jvm/target extras/.js/target examples/target util/.native/target extras/.native/target target platform/js/target macros/.jvm/target legacy/.native/target .js/target core/.native/target site/target macros/.native/target laws/.native/target core/.js/target macros/.js/target laws/.js/target legacy/.js/target core/.jvm/target tests/js/target .jvm/target .native/target platform/jvm/target util/.js/target platform/native/target data/.js/target util/.jvm/target laws/.jvm/target tests/jvm/target extras/.jvm/target data/.native/target benchmark/target tests/native/target project/target
139147

140148
- name: Upload target directories
141149
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
@@ -240,6 +248,16 @@ jobs:
240248
tar xf targets.tar
241249
rm targets.tar
242250
251+
- name: Download target directories (2.13.8, rootNative)
252+
uses: actions/download-artifact@v2
253+
with:
254+
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.8-rootNative
255+
256+
- name: Inflate target directories (2.13.8, rootNative)
257+
run: |
258+
tar xf targets.tar
259+
rm targets.tar
260+
243261
- name: Download target directories (3.1.2, rootJS)
244262
uses: actions/download-artifact@v2
245263
with:
@@ -260,6 +278,16 @@ jobs:
260278
tar xf targets.tar
261279
rm targets.tar
262280
281+
- name: Download target directories (3.1.2, rootNative)
282+
uses: actions/download-artifact@v2
283+
with:
284+
name: target-${{ matrix.os }}-${{ matrix.java }}-3.1.2-rootNative
285+
286+
- name: Inflate target directories (3.1.2, rootNative)
287+
run: |
288+
tar xf targets.tar
289+
rm targets.tar
290+
263291
- name: Download target directories (3.1.2, rootJVM)
264292
uses: actions/download-artifact@v2
265293
with:

build.sbt

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import scala.language.existentials
1616

1717
lazy val scalaCheckVersion = "1.16.0"
1818

19-
lazy val munit = "0.7.29"
20-
lazy val munitDiscipline = "1.0.9"
19+
lazy val munit = "1.0.0-M5"
20+
lazy val munitDiscipline = "2.0.0-M2"
2121

22-
lazy val algebraVersion = "2.7.0"
22+
lazy val algebraVersion = "2.8.0"
2323

2424
lazy val apfloatVersion = "1.10.1"
2525
lazy val jscienceVersion = "4.3.1"
@@ -62,14 +62,14 @@ lazy val root = tlCrossRootProject
6262
.settings(unidocSettings)
6363
.enablePlugins(ScalaUnidocPlugin)
6464

65-
lazy val platform = crossProject(JSPlatform, JVMPlatform)
65+
lazy val platform = crossProject(JSPlatform, JVMPlatform, NativePlatform)
6666
.settings(moduleName := "spire-platform")
6767
.settings(spireSettings: _*)
6868
.jvmSettings(commonJvmSettings: _*)
6969
.jsSettings(commonJsSettings: _*)
7070
.dependsOn(macros, util)
7171

72-
lazy val macros = crossProject(JSPlatform, JVMPlatform)
72+
lazy val macros = crossProject(JSPlatform, JVMPlatform, NativePlatform)
7373
.crossType(CrossType.Pure)
7474
.settings(moduleName := "spire-macros")
7575
.settings(spireSettings: _*)
@@ -78,29 +78,29 @@ lazy val macros = crossProject(JSPlatform, JVMPlatform)
7878
.jvmSettings(commonJvmSettings: _*)
7979
.jsSettings(commonJsSettings: _*)
8080

81-
lazy val data = crossProject(JSPlatform, JVMPlatform)
81+
lazy val data = crossProject(JSPlatform, JVMPlatform, NativePlatform)
8282
.crossType(CrossType.Pure)
8383
.settings(moduleName := "spire-data")
8484
.settings(spireSettings: _*)
8585
.jvmSettings(commonJvmSettings: _*)
8686
.jsSettings(commonJsSettings: _*)
8787

88-
lazy val legacy = crossProject(JSPlatform, JVMPlatform)
88+
lazy val legacy = crossProject(JSPlatform, JVMPlatform, NativePlatform)
8989
.crossType(CrossType.Pure)
9090
.settings(moduleName := "spire-legacy")
9191
.settings(spireSettings: _*)
9292
.jvmSettings(commonJvmSettings: _*)
9393
.jsSettings(commonJsSettings: _*)
9494

95-
lazy val util = crossProject(JSPlatform, JVMPlatform)
95+
lazy val util = crossProject(JSPlatform, JVMPlatform, NativePlatform)
9696
.crossType(CrossType.Pure)
9797
.settings(moduleName := "spire-util")
9898
.settings(spireSettings: _*)
9999
.jvmSettings(commonJvmSettings: _*)
100100
.jsSettings(commonJsSettings: _*)
101101
.dependsOn(macros)
102102

103-
lazy val core = crossProject(JSPlatform, JVMPlatform)
103+
lazy val core = crossProject(JSPlatform, JVMPlatform, NativePlatform)
104104
.crossType(CrossType.Pure)
105105
.settings(moduleName := "spire")
106106
.settings(spireSettings: _*)
@@ -109,7 +109,7 @@ lazy val core = crossProject(JSPlatform, JVMPlatform)
109109
.jsSettings(commonJsSettings: _*)
110110
.dependsOn(macros, platform, util)
111111

112-
lazy val extras = crossProject(JSPlatform, JVMPlatform)
112+
lazy val extras = crossProject(JSPlatform, JVMPlatform, NativePlatform)
113113
.crossType(CrossType.Pure)
114114
.settings(moduleName := "spire-extras")
115115
.settings(spireSettings: _*)
@@ -140,7 +140,7 @@ lazy val examples = project
140140
.settings(commonJvmSettings)
141141
.dependsOn(core.jvm, extras.jvm)
142142

143-
lazy val laws = crossProject(JSPlatform, JVMPlatform)
143+
lazy val laws = crossProject(JSPlatform, JVMPlatform, NativePlatform)
144144
.crossType(CrossType.Pure)
145145
.settings(moduleName := "spire-laws")
146146
.settings(spireSettings: _*)
@@ -154,7 +154,7 @@ lazy val laws = crossProject(JSPlatform, JVMPlatform)
154154
.jsSettings(commonJsSettings: _*)
155155
.dependsOn(core, extras)
156156

157-
lazy val tests = crossProject(JSPlatform, JVMPlatform)
157+
lazy val tests = crossProject(JSPlatform, JVMPlatform, NativePlatform)
158158
.crossType(CrossType.Full)
159159
.settings(moduleName := "spire-tests")
160160
.settings(spireSettings: _*)
@@ -196,7 +196,6 @@ lazy val commonDeps = Seq(
196196
)
197197

198198
lazy val commonSettings = Seq(
199-
resolvers += Resolver.sonatypeRepo("snapshots"),
200199
headerLicense := Some(HeaderLicense.Custom(header))
201200
) ++ scalaMacroDependencies
202201

core/src/main/scala/spire/math/poly/Term.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,7 @@ object Term {
117117

118118
// call Regex constructor directly to get rid of compiler warning
119119
// replace with "".r once SI-6723 is fixed
120-
private val superscriptRegex =
121-
new scala.util.matching.Regex(
122-
"[\\u2070\\u2071\\u2072\\u2073\\u2074\\u2075\\u2076\\u2077\\u2078\\u2079\\u207B\\u00B9\\u00B2\\u00B3]+"
123-
)
120+
private val superscriptRegex = "[⁰¹²³⁴⁵⁶⁷⁸⁹⁻ⁱ]+".r
124121

125122
private[spire] def removeSuperscript(text: String): String =
126123
superscriptRegex.replaceAllIn(text, "^" + _.group(0).map(removeSuperscript))
File renamed without changes.

project/plugins.sbt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ val sbtTypelevelVersion = "0.4.12"
44
addSbtPlugin("org.typelevel" % "sbt-typelevel" % sbtTypelevelVersion)
55
addSbtPlugin("org.typelevel" % "sbt-typelevel-site" % sbtTypelevelVersion)
66

7+
addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.2.0")
8+
addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.4")
9+
710
addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0")
811
addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.3")
912
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.9.3")

tests/shared/src/test/scala/spire/math/SafeLongScalaCheckSuite.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,13 @@ class SafeLongScalaCheckSuite extends munit.ScalaCheckSuite {
155155
}
156156
}
157157

158-
property("x >> k") {
159-
forAll { (x: BigInt, k: Byte) =>
160-
intercept[RuntimeException] { SafeLong(x) >> Int.MinValue }
161-
invariant(SafeLong(x) >> k) == SafeLong(x >> k)
158+
if (!sys.props.get("java.vm.name").contains("Scala Native"))
159+
property("x >> k") {
160+
forAll { (x: BigInt, k: Byte) =>
161+
intercept[RuntimeException] { SafeLong(x) >> Int.MinValue }
162+
invariant(SafeLong(x) >> k) == SafeLong(x >> k)
163+
}
162164
}
163-
}
164165

165166
property("long safelongs") {
166167
forAll { (x: Long) =>

0 commit comments

Comments
 (0)