From e22b860877591b25ca1a62eb341450011b8342a7 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Wed, 22 Aug 2018 21:21:15 +0800 Subject: standardize naming of ScalaWorker/Api/Impl --- .../mill/scalanativelib/ScalaNativeBridge.scala | 77 ---------------------- .../mill/scalanativelib/ScalaNativeModule.scala | 2 +- .../mill/scalanativelib/ScalaNativeWorkerApi.scala | 77 ++++++++++++++++++++++ .../scalanativelib/bridge/ScalaNativeBridge.scala | 74 --------------------- .../worker/ScalaNativeWorkerImpl.scala | 74 +++++++++++++++++++++ 5 files changed, 152 insertions(+), 152 deletions(-) delete mode 100644 scalanativelib/src/mill/scalanativelib/ScalaNativeBridge.scala create mode 100644 scalanativelib/src/mill/scalanativelib/ScalaNativeWorkerApi.scala delete mode 100644 scalanativelib/worker/0.3/src/mill/scalanativelib/bridge/ScalaNativeBridge.scala create mode 100644 scalanativelib/worker/0.3/src/mill/scalanativelib/worker/ScalaNativeWorkerImpl.scala (limited to 'scalanativelib') diff --git a/scalanativelib/src/mill/scalanativelib/ScalaNativeBridge.scala b/scalanativelib/src/mill/scalanativelib/ScalaNativeBridge.scala deleted file mode 100644 index a7777fad..00000000 --- a/scalanativelib/src/mill/scalanativelib/ScalaNativeBridge.scala +++ /dev/null @@ -1,77 +0,0 @@ -package mill.scalanativelib - -import java.io.File -import java.net.URLClassLoader - -import ammonite.ops.Path -import mill.define.{Discover, Worker} -import mill.{Agg, T} -import sbt.testing.Framework - - -class ScalaNativeWorker { - private var scalaInstanceCache = Option.empty[(Long, ScalaNativeBridge)] - - def bridge(toolsClasspath: Agg[Path]): ScalaNativeBridge = { - val classloaderSig = toolsClasspath.map(p => p.toString().hashCode + p.mtime.toMillis).sum - scalaInstanceCache match { - case Some((sig, bridge)) if sig == classloaderSig => bridge - case _ => - val cl = new URLClassLoader( - toolsClasspath.map(_.toIO.toURI.toURL).toArray, - getClass.getClassLoader - ) - try { - val bridge = cl - .loadClass("mill.scalanativelib.bridge.ScalaNativeBridge") - .getDeclaredConstructor() - .newInstance() - .asInstanceOf[ScalaNativeBridge] - scalaInstanceCache = Some((classloaderSig, bridge)) - bridge - } - catch { - case e: Exception => - e.printStackTrace() - throw e - } - } - } -} - - -// result wrapper to preserve some type safety -case class NativeConfig(config: Any) - -trait ScalaNativeBridge { - def discoverClang: Path - def discoverClangPP: Path - def discoverTarget(clang: Path, workDir: Path): String - def discoverCompileOptions: Seq[String] - def discoverLinkingOptions: Seq[String] - - def config(nativeLibJar: Path, - mainClass: String, - classpath: Seq[Path], - nativeWorkdir: Path, - nativeClang: Path, - nativeClangPP: 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: Path): Path - - def newScalaNativeFrameWork(framework: Framework, id: Int, testBinary: File, - logLevel: NativeLogLevel, envVars: Map[String, String]): Framework -} - -object ScalaNativeBridge extends mill.define.ExternalModule { - def scalaNativeBridge: Worker[ScalaNativeWorker] = T.worker { new ScalaNativeWorker() } - lazy val millDiscover = Discover[this.type] -} diff --git a/scalanativelib/src/mill/scalanativelib/ScalaNativeModule.scala b/scalanativelib/src/mill/scalanativelib/ScalaNativeModule.scala index 2ede1e4c..b275e6e3 100644 --- a/scalanativelib/src/mill/scalanativelib/ScalaNativeModule.scala +++ b/scalanativelib/src/mill/scalanativelib/ScalaNativeModule.scala @@ -65,7 +65,7 @@ trait ScalaNativeModule extends ScalaModule { outer => scalaNativeBinaryVersion() } - def bridge = T.task{ ScalaNativeBridge.scalaNativeBridge().bridge(bridgeFullClassPath()) } + def bridge = T.task{ ScalaNativeWorkerApi.scalaNativeBridge().bridge(bridgeFullClassPath()) } def scalaNativeBridgeClasspath = T { val snBridgeKey = "MILL_SCALANATIVE_BRIDGE_" + scalaNativeBinaryVersion().replace('.', '_').replace('-', '_') diff --git a/scalanativelib/src/mill/scalanativelib/ScalaNativeWorkerApi.scala b/scalanativelib/src/mill/scalanativelib/ScalaNativeWorkerApi.scala new file mode 100644 index 00000000..9489d7e4 --- /dev/null +++ b/scalanativelib/src/mill/scalanativelib/ScalaNativeWorkerApi.scala @@ -0,0 +1,77 @@ +package mill.scalanativelib + +import java.io.File +import java.net.URLClassLoader + +import ammonite.ops.Path +import mill.define.{Discover, Worker} +import mill.{Agg, T} +import sbt.testing.Framework + + +class ScalaNativeWorker { + private var scalaInstanceCache = Option.empty[(Long, ScalaNativeWorkerApi)] + + def bridge(toolsClasspath: Agg[Path]): ScalaNativeWorkerApi = { + val classloaderSig = toolsClasspath.map(p => p.toString().hashCode + p.mtime.toMillis).sum + scalaInstanceCache match { + case Some((sig, bridge)) if sig == classloaderSig => bridge + case _ => + val cl = new URLClassLoader( + toolsClasspath.map(_.toIO.toURI.toURL).toArray, + getClass.getClassLoader + ) + try { + val bridge = cl + .loadClass("mill.scalanativelib.bridge.ScalaNativeBridge") + .getDeclaredConstructor() + .newInstance() + .asInstanceOf[ScalaNativeWorkerApi] + scalaInstanceCache = Some((classloaderSig, bridge)) + bridge + } + catch { + case e: Exception => + e.printStackTrace() + throw e + } + } + } +} + + +// result wrapper to preserve some type safety +case class NativeConfig(config: Any) + +trait ScalaNativeWorkerApi { + def discoverClang: Path + def discoverClangPP: Path + def discoverTarget(clang: Path, workDir: Path): String + def discoverCompileOptions: Seq[String] + def discoverLinkingOptions: Seq[String] + + def config(nativeLibJar: Path, + mainClass: String, + classpath: Seq[Path], + nativeWorkdir: Path, + nativeClang: Path, + nativeClangPP: 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: Path): Path + + def newScalaNativeFrameWork(framework: Framework, id: Int, testBinary: File, + logLevel: NativeLogLevel, envVars: Map[String, String]): Framework +} + +object ScalaNativeWorkerApi extends mill.define.ExternalModule { + def scalaNativeBridge: Worker[ScalaNativeWorker] = T.worker { new ScalaNativeWorker() } + lazy val millDiscover = Discover[this.type] +} diff --git a/scalanativelib/worker/0.3/src/mill/scalanativelib/bridge/ScalaNativeBridge.scala b/scalanativelib/worker/0.3/src/mill/scalanativelib/bridge/ScalaNativeBridge.scala deleted file mode 100644 index 268e18ac..00000000 --- a/scalanativelib/worker/0.3/src/mill/scalanativelib/bridge/ScalaNativeBridge.scala +++ /dev/null @@ -1,74 +0,0 @@ -package mill.scalanativelib.bridge - -import java.io.File -import java.lang.System.{err, out} - -import scala.scalanative.build.{Build, Config, Discover, GC, Logger, Mode} -import ammonite.ops.Path -import mill.scalanativelib.{NativeConfig, NativeLogLevel, ReleaseMode} -import sbt.testing.Framework - -import scala.scalanative.testinterface.ScalaNativeFramework - - -class ScalaNativeBridge extends mill.scalanativelib.ScalaNativeBridge { - 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: Path = Path(Discover.clang()) - def discoverClangPP: Path = Path(Discover.clangpp()) - def discoverTarget(clang: Path, workdir: 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: Path, - mainClass: String, - classpath: Seq[Path], - nativeWorkdir: Path, - nativeClang: Path, - nativeClangPP: 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: Path): 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) - } -} diff --git a/scalanativelib/worker/0.3/src/mill/scalanativelib/worker/ScalaNativeWorkerImpl.scala b/scalanativelib/worker/0.3/src/mill/scalanativelib/worker/ScalaNativeWorkerImpl.scala new file mode 100644 index 00000000..7e93fbd4 --- /dev/null +++ b/scalanativelib/worker/0.3/src/mill/scalanativelib/worker/ScalaNativeWorkerImpl.scala @@ -0,0 +1,74 @@ +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 ammonite.ops.Path +import mill.scalanativelib.{NativeConfig, NativeLogLevel, ReleaseMode} +import sbt.testing.Framework + +import scala.scalanative.testinterface.ScalaNativeFramework + + +class ScalaNativeWorkerImpl extends mill.scalanativelib.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: Path = Path(Discover.clang()) + def discoverClangPP: Path = Path(Discover.clangpp()) + def discoverTarget(clang: Path, workdir: 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: Path, + mainClass: String, + classpath: Seq[Path], + nativeWorkdir: Path, + nativeClang: Path, + nativeClangPP: 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: Path): 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) + } +} -- cgit v1.2.3