summaryrefslogtreecommitdiff
path: root/scalajslib/jsbridges/1.0/src/main/scala/mill/scalajslib/bridge/ScalaJSLinkerBridge.scala
diff options
context:
space:
mode:
Diffstat (limited to 'scalajslib/jsbridges/1.0/src/main/scala/mill/scalajslib/bridge/ScalaJSLinkerBridge.scala')
-rw-r--r--scalajslib/jsbridges/1.0/src/main/scala/mill/scalajslib/bridge/ScalaJSLinkerBridge.scala24
1 files changed, 24 insertions, 0 deletions
diff --git a/scalajslib/jsbridges/1.0/src/main/scala/mill/scalajslib/bridge/ScalaJSLinkerBridge.scala b/scalajslib/jsbridges/1.0/src/main/scala/mill/scalajslib/bridge/ScalaJSLinkerBridge.scala
new file mode 100644
index 00000000..ef896726
--- /dev/null
+++ b/scalajslib/jsbridges/1.0/src/main/scala/mill/scalajslib/bridge/ScalaJSLinkerBridge.scala
@@ -0,0 +1,24 @@
+package mill
+package scalajslib
+package bridge
+
+import java.io.File
+
+import org.scalajs.core.tools.io._
+import org.scalajs.core.tools.linker.{ModuleInitializer, StandardLinker}
+import org.scalajs.core.tools.logging.ScalaConsoleLogger
+
+class ScalaJSLinkerBridge {
+ def link(sources: Array[File], libraries: Array[File], dest: File, main: String, fullOpt: Boolean): Unit = {
+ val config = StandardLinker.Config().withOptimizer(fullOpt)
+ val linker = StandardLinker(config)
+ val cache = new IRFileCache().newCache
+ val sourceIRs = sources.map(FileVirtualScalaJSIRFile)
+ val irContainers = FileScalaJSIRContainer.fromClasspath(libraries)
+ val libraryIRs = cache.cached(irContainers)
+ val destFile = AtomicWritableFileVirtualJSFile(dest)
+ val logger = new ScalaConsoleLogger
+ val initializer = Option(main).map { cls => ModuleInitializer.mainMethodWithArgs(cls, "main") }
+ linker.link(sourceIRs ++ libraryIRs, initializer.toSeq, destFile, logger)
+ }
+} \ No newline at end of file