summaryrefslogtreecommitdiff
path: root/scalanativelib/worker/0.3/src/ScalaNativeWorkerImpl.scala
diff options
context:
space:
mode:
Diffstat (limited to 'scalanativelib/worker/0.3/src/ScalaNativeWorkerImpl.scala')
-rw-r--r--scalanativelib/worker/0.3/src/ScalaNativeWorkerImpl.scala73
1 files changed, 73 insertions, 0 deletions
diff --git a/scalanativelib/worker/0.3/src/ScalaNativeWorkerImpl.scala b/scalanativelib/worker/0.3/src/ScalaNativeWorkerImpl.scala
new file mode 100644
index 00000000..b32e84ff
--- /dev/null
+++ b/scalanativelib/worker/0.3/src/ScalaNativeWorkerImpl.scala
@@ -0,0 +1,73 @@
+package mill.scalanativelib.worker
+
+import java.io.File
+import java.lang.System.{err, out}
+
+import scala.scalanative.build.{Build, Config, Discover, GC, Logger, Mode}
+import mill.scalanativelib.api.{NativeConfig, NativeLogLevel, ReleaseMode}
+import sbt.testing.Framework
+
+import scala.scalanative.testinterface.ScalaNativeFramework
+
+
+class ScalaNativeWorkerImpl extends mill.scalanativelib.api.ScalaNativeWorkerApi {
+ def logger(level: NativeLogLevel) =
+ Logger(
+ debugFn = msg => if (level >= NativeLogLevel.Debug) out.println(msg),
+ infoFn = msg => if (level >= NativeLogLevel.Info) out.println(msg),
+ warnFn = msg => if (level >= NativeLogLevel.Warn) out.println(msg),
+ errorFn = msg => if (level >= NativeLogLevel.Error) err.println(msg))
+
+ def discoverClang: os.Path = os.Path(Discover.clang())
+ def discoverClangPP: os.Path = os.Path(Discover.clangpp())
+ def discoverTarget(clang: os.Path, workdir: os.Path): String = Discover.targetTriple(clang.toNIO, workdir.toNIO)
+ def discoverCompileOptions: Seq[String] = Discover.compileOptions()
+ def discoverLinkingOptions: Seq[String] = Discover.linkingOptions()
+ def defaultGarbageCollector: String = GC.default.name
+
+ 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 =
+ {
+ val entry = mainClass + "$"
+
+ val config =
+ Config.empty
+ .withNativelib(nativeLibJar.toNIO)
+ .withMainClass(entry)
+ .withClassPath(classpath.map(_.toNIO))
+ .withWorkdir(nativeWorkdir.toNIO)
+ .withClang(nativeClang.toNIO)
+ .withClangPP(nativeClangPP.toNIO)
+ .withTargetTriple(nativeTarget)
+ .withCompileOptions(nativeCompileOptions)
+ .withLinkingOptions(nativeLinkingOptions)
+ .withGC(GC(nativeGC))
+ .withLinkStubs(nativeLinkStubs)
+ .withMode(Mode(releaseMode.name))
+ .withLogger(logger(logLevel))
+ NativeConfig(config)
+ }
+
+ def nativeLink(nativeConfig: NativeConfig, outPath: os.Path): os.Path = {
+ val config = nativeConfig.config.asInstanceOf[Config]
+ Build.build(config, outPath.toNIO)
+ outPath
+ }
+
+ override def newScalaNativeFrameWork(framework: Framework, id: Int, testBinary: File,
+ logLevel: NativeLogLevel, envVars: Map[String, String]): Framework =
+ {
+ new ScalaNativeFramework(framework, id, logger(logLevel), testBinary, envVars)
+ }
+}