summaryrefslogtreecommitdiff
path: root/scalanativelib/api/src/mill/scalanativelib/api/ScalaNativeWorkerApi.scala
diff options
context:
space:
mode:
Diffstat (limited to 'scalanativelib/api/src/mill/scalanativelib/api/ScalaNativeWorkerApi.scala')
-rw-r--r--scalanativelib/api/src/mill/scalanativelib/api/ScalaNativeWorkerApi.scala60
1 files changed, 60 insertions, 0 deletions
diff --git a/scalanativelib/api/src/mill/scalanativelib/api/ScalaNativeWorkerApi.scala b/scalanativelib/api/src/mill/scalanativelib/api/ScalaNativeWorkerApi.scala
new file mode 100644
index 00000000..e1fee0da
--- /dev/null
+++ b/scalanativelib/api/src/mill/scalanativelib/api/ScalaNativeWorkerApi.scala
@@ -0,0 +1,60 @@
+package mill.scalanativelib.api
+
+import upickle.default.{macroRW, ReadWriter => RW}
+import java.io.File
+import sbt.testing.Framework
+
+trait ScalaNativeWorkerApi {
+ def discoverClang: os.Path
+ def discoverClangPP: os.Path
+ def discoverTarget(clang: os.Path, workDir: os.Path): String
+ def discoverCompileOptions: Seq[String]
+ def discoverLinkingOptions: Seq[String]
+
+ def config(nativeLibJar: os.Path,
+ mainClass: String,
+ classpath: Seq[os.Path],
+ nativeWorkdir: os.Path,
+ nativeClang: os.Path,
+ nativeClangPP: os.Path,
+ nativeTarget: String,
+ nativeCompileOptions: Seq[String],
+ nativeLinkingOptions: Seq[String],
+ nativeGC: String,
+ nativeLinkStubs: Boolean,
+ releaseMode: ReleaseMode,
+ logLevel: NativeLogLevel): NativeConfig
+
+ def defaultGarbageCollector: String
+ def nativeLink(nativeConfig: NativeConfig, outPath: os.Path): os.Path
+
+ def newScalaNativeFrameWork(framework: Framework, id: Int, testBinary: File,
+ logLevel: NativeLogLevel, envVars: Map[String, String]): Framework
+}
+
+
+sealed abstract class NativeLogLevel(val level: Int) extends Ordered[NativeLogLevel] {
+ def compare(that: NativeLogLevel) = this.level - that.level
+}
+
+object NativeLogLevel {
+ case object Error extends NativeLogLevel(200)
+ case object Warn extends NativeLogLevel(300)
+ case object Info extends NativeLogLevel(400)
+ case object Debug extends NativeLogLevel(500)
+ case object Trace extends NativeLogLevel(600)
+
+ implicit def rw: RW[NativeLogLevel] = macroRW
+}
+
+sealed abstract class ReleaseMode(val name: String)
+
+object ReleaseMode {
+ case object Debug extends ReleaseMode("debug")
+ case object Release extends ReleaseMode("release")
+
+ implicit def rw: RW[ReleaseMode] = macroRW
+}
+
+// result wrapper to preserve some type safety
+case class NativeConfig(config: Any) \ No newline at end of file