2020-01-10 17:53:46 +03:00
|
|
|
import java.io.File
|
|
|
|
|
2019-09-10 19:53:23 +03:00
|
|
|
import org.enso.build.BenchTasks._
|
|
|
|
import org.enso.build.WithDebugCommand
|
2020-08-10 13:14:39 +03:00
|
|
|
import sbt.Keys.{libraryDependencies, scalacOptions}
|
2020-03-20 11:01:03 +03:00
|
|
|
import sbt.addCompilerPlugin
|
2019-11-05 17:12:33 +03:00
|
|
|
import sbtassembly.AssemblyPlugin.defaultUniversalScript
|
2019-11-26 16:02:50 +03:00
|
|
|
import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
|
2020-03-24 13:28:03 +03:00
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// ============================================================================
|
|
|
|
// === Global Configuration ===================================================
|
|
|
|
// ============================================================================
|
2019-06-07 14:49:47 +03:00
|
|
|
|
2020-06-29 20:24:41 +03:00
|
|
|
val scalacVersion = "2.13.3"
|
2020-08-07 12:18:09 +03:00
|
|
|
val rustVersion = "1.40.0-nightly (b520af6fd 2019-11-03)"
|
2020-08-28 14:03:09 +03:00
|
|
|
val graalVersion = "20.2.0"
|
2020-07-01 14:21:13 +03:00
|
|
|
val javaVersion = "11"
|
2020-08-07 12:18:09 +03:00
|
|
|
val ensoVersion = "0.1.0" // Note [Engine And Launcher Version]
|
|
|
|
|
|
|
|
/* Note [Engine And Launcher Version]
|
|
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* Currently both Engine and Launcher versions are tied to each other - each new
|
|
|
|
* releases contains the Engine and the Launcher and thus the version number is
|
|
|
|
* shared. If the version numbers ever diverge, make sure tu update the build
|
|
|
|
* scripts at .github/workflows accordingly.
|
|
|
|
*/
|
|
|
|
|
2019-09-12 17:47:25 +03:00
|
|
|
organization in ThisBuild := "org.enso"
|
|
|
|
scalaVersion in ThisBuild := scalacVersion
|
2020-10-09 17:19:58 +03:00
|
|
|
|
|
|
|
lazy val gatherLicenses =
|
|
|
|
taskKey[Unit]("Gathers licensing information for relevant dependencies")
|
|
|
|
gatherLicenses := GatherLicenses.run.value
|
2020-10-19 11:50:12 +03:00
|
|
|
lazy val verifyLicensePackages =
|
|
|
|
taskKey[Unit](
|
|
|
|
"Verifies if the license package has been generated, " +
|
|
|
|
"has no warnings and is up-to-date with dependencies."
|
|
|
|
)
|
|
|
|
verifyLicensePackages := GatherLicenses.verifyReports.value
|
2020-10-09 17:19:58 +03:00
|
|
|
GatherLicenses.distributions := Seq(
|
|
|
|
Distribution(
|
|
|
|
"launcher",
|
|
|
|
file("distribution/launcher/THIRD-PARTY"),
|
|
|
|
Distribution.sbtProjects(launcher)
|
2020-07-10 13:57:42 +03:00
|
|
|
),
|
2020-10-09 17:19:58 +03:00
|
|
|
Distribution(
|
|
|
|
"engine",
|
|
|
|
file("distribution/engine/THIRD-PARTY"),
|
|
|
|
Distribution.sbtProjects(
|
|
|
|
runtime,
|
|
|
|
`engine-runner`,
|
|
|
|
`project-manager`,
|
|
|
|
`language-server`
|
|
|
|
)
|
|
|
|
),
|
|
|
|
Distribution(
|
|
|
|
"std-lib-Base",
|
|
|
|
file("distribution/std-lib/Base/THIRD-PARTY"),
|
|
|
|
Distribution.sbtProjects(`std-bits`)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
GatherLicenses.licenseConfigurations := Set("compile")
|
|
|
|
GatherLicenses.configurationRoot := file("tools/legal-review")
|
|
|
|
|
|
|
|
lazy val openLegalReviewReport =
|
|
|
|
taskKey[Unit](
|
|
|
|
"Gathers licensing information for relevant dependencies and opens the " +
|
|
|
|
"report in review mode in the browser."
|
|
|
|
)
|
|
|
|
openLegalReviewReport := {
|
|
|
|
gatherLicenses.value
|
|
|
|
GatherLicenses.runReportServer()
|
|
|
|
}
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-10-19 11:50:12 +03:00
|
|
|
lazy val analyzeDependency = inputKey[Unit]("...")
|
|
|
|
analyzeDependency := GatherLicenses.analyzeDependency.evaluated
|
|
|
|
|
2019-10-29 17:32:50 +03:00
|
|
|
Global / onChangedBuildSource := ReloadOnSourceChanges
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// ============================================================================
|
|
|
|
// === Compiler Options =======================================================
|
|
|
|
// ============================================================================
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2019-11-05 02:22:49 +03:00
|
|
|
javacOptions in ThisBuild ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"-encoding", // Provide explicit encoding (the next line)
|
|
|
|
"UTF-8", // Specify character encoding used by Java source files.
|
|
|
|
"-deprecation" // Shows a description of each use or override of a deprecated member or class.
|
|
|
|
)
|
2019-11-05 02:22:49 +03:00
|
|
|
|
2019-09-12 17:47:25 +03:00
|
|
|
scalacOptions in ThisBuild ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"-deprecation", // Emit warning and location for usages of deprecated APIs.
|
|
|
|
"-encoding", // Provide explicit encoding (the next line)
|
|
|
|
"utf-8", // Specify character encoding used by Scala source files.
|
|
|
|
"-explaintypes", // Explain type errors in more detail.
|
|
|
|
"-feature", // Emit warning and location for usages of features that should be imported explicitly.
|
|
|
|
"-language:existentials", // Existential types (besides wildcard types) can be written and inferred
|
|
|
|
"-language:experimental.macros", // Allow macro definition (besides implementation and application)
|
|
|
|
"-language:higherKinds", // Allow higher-kinded types
|
|
|
|
"-language:implicitConversions", // Allow definition of implicit functions called views
|
|
|
|
"-unchecked", // Enable additional warnings where generated code depends on assumptions.
|
|
|
|
"-Xcheckinit", // Wrap field accessors to throw an exception on uninitialized access.
|
|
|
|
"-Xlint:adapted-args", // Warn if an argument list is modified to match the receiver.
|
|
|
|
"-Xlint:constant", // Evaluation of a constant arithmetic expression results in an error.
|
|
|
|
"-Xlint:delayedinit-select", // Selecting member of DelayedInit.
|
|
|
|
"-Xlint:doc-detached", // A Scaladoc comment appears to be detached from its element.
|
|
|
|
"-Xlint:inaccessible", // Warn about inaccessible types in method signatures.
|
|
|
|
"-Xlint:infer-any", // Warn when a type argument is inferred to be `Any`.
|
|
|
|
"-Xlint:missing-interpolator", // A string literal appears to be missing an interpolator id.
|
|
|
|
"-Xlint:nullary-unit", // Warn when nullary methods return Unit.
|
|
|
|
"-Xlint:option-implicit", // Option.apply used implicit view.
|
|
|
|
"-Xlint:package-object-classes", // Class or object defined in package object.
|
|
|
|
"-Xlint:poly-implicit-overload", // Parameterized overloaded implicit methods are not visible as view bounds.
|
|
|
|
"-Xlint:private-shadow", // A private field (or class parameter) shadows a superclass field.
|
|
|
|
"-Xlint:stars-align", // Pattern sequence wildcard must align with sequence component.
|
|
|
|
"-Xlint:type-parameter-shadow", // A local type parameter shadows a type already in scope.
|
|
|
|
"-Xmacro-settings:-logging@org.enso", // Disable the debug logging globally.
|
|
|
|
"-Ywarn-dead-code", // Warn when dead code is identified.
|
|
|
|
"-Ywarn-extra-implicit", // Warn when more than one implicit parameter section is defined.
|
|
|
|
"-Ywarn-numeric-widen", // Warn when numerics are widened.
|
|
|
|
"-Ywarn-unused:imports", // Warn if an import selector is not referenced.
|
|
|
|
"-Ywarn-unused:implicits", // Warn if an implicit parameter is unused.
|
|
|
|
"-Ywarn-unused:locals", // Warn if a local definition is unused.
|
|
|
|
"-Ywarn-unused:patvars", // Warn if a variable bound in a pattern is unused.
|
|
|
|
"-Ywarn-unused:privates", // Warn if a private member is unused.
|
|
|
|
"-Ywarn-unused:params", // Warn if a value parameter is unused.
|
|
|
|
"-Xfatal-warnings" // Make warnings fatal so they don't make it onto main (use @nowarn for local suppression)
|
|
|
|
)
|
2020-04-30 22:30:55 +03:00
|
|
|
|
|
|
|
val jsSettings = Seq(
|
|
|
|
scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.ESModule) }
|
2019-06-14 18:26:49 +03:00
|
|
|
)
|
|
|
|
|
2020-05-06 21:00:03 +03:00
|
|
|
scalacOptions in (Compile, console) ~= (_ filterNot (_ == "-Xfatal-warnings"))
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// ============================================================================
|
|
|
|
// === Benchmark Configuration ================================================
|
|
|
|
// ============================================================================
|
2019-07-11 14:23:00 +03:00
|
|
|
|
2019-09-10 19:53:23 +03:00
|
|
|
lazy val Benchmark = config("bench") extend sbt.Test
|
|
|
|
|
|
|
|
// Native Image Generation
|
2019-08-28 18:40:08 +03:00
|
|
|
lazy val buildNativeImage =
|
|
|
|
taskKey[Unit]("Build native image for the Enso executable")
|
2019-06-07 14:49:47 +03:00
|
|
|
|
2020-07-01 14:21:13 +03:00
|
|
|
// Bootstrap task
|
|
|
|
lazy val bootstrap =
|
|
|
|
taskKey[Unit]("Prepares Truffle JARs that are required by the sbt JVM")
|
|
|
|
bootstrap := {}
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// ============================================================================
|
|
|
|
// === Global Project =========================================================
|
|
|
|
// ============================================================================
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2019-06-13 12:49:04 +03:00
|
|
|
lazy val enso = (project in file("."))
|
2019-06-14 18:26:49 +03:00
|
|
|
.settings(version := "0.1")
|
2019-11-08 20:32:48 +03:00
|
|
|
.aggregate(
|
2020-06-29 20:24:41 +03:00
|
|
|
`core-definition`,
|
2020-06-29 17:36:44 +03:00
|
|
|
`interpreter-dsl`,
|
|
|
|
`json-rpc-server-test`,
|
|
|
|
`json-rpc-server`,
|
2020-04-24 19:33:27 +03:00
|
|
|
`language-server`,
|
|
|
|
`parser-service`,
|
|
|
|
`polyglot-api`,
|
2020-04-14 19:00:51 +03:00
|
|
|
`project-manager`,
|
2020-04-24 19:33:27 +03:00
|
|
|
`syntax-definition`.jvm,
|
|
|
|
`text-buffer`,
|
|
|
|
flexer.jvm,
|
2020-01-24 21:56:52 +03:00
|
|
|
graph,
|
2020-04-24 19:33:27 +03:00
|
|
|
logger.jvm,
|
|
|
|
pkg,
|
2020-07-22 20:28:03 +03:00
|
|
|
cli,
|
2020-10-02 19:17:21 +03:00
|
|
|
`logging-service`,
|
|
|
|
`akka-native`,
|
2020-07-10 13:57:42 +03:00
|
|
|
`version-output`,
|
2020-10-09 17:19:58 +03:00
|
|
|
`engine-runner`,
|
2020-04-24 19:33:27 +03:00
|
|
|
runtime,
|
2020-06-29 17:36:44 +03:00
|
|
|
searcher,
|
2020-07-10 13:57:42 +03:00
|
|
|
launcher,
|
2020-07-14 14:44:40 +03:00
|
|
|
syntax.jvm,
|
|
|
|
testkit
|
2019-11-08 20:32:48 +03:00
|
|
|
)
|
2019-09-12 17:47:25 +03:00
|
|
|
.settings(Global / concurrentRestrictions += Tags.exclusive(Exclusive))
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// ============================================================================
|
|
|
|
// === Dependency Versions ====================================================
|
|
|
|
// ============================================================================
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
/* Note [Dependency Versions]
|
|
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* Please maintain the following section in alphabetical order for the bundles
|
|
|
|
* of dependencies. Additionally, please keep the 'Other' subsection in
|
|
|
|
* alphabetical order.
|
|
|
|
*
|
|
|
|
* Furthermore, please keep the following in mind:
|
|
|
|
* - Wherever possible, we should use the same version of a dependency
|
|
|
|
* throughout the project.
|
|
|
|
* - If you need to include a new dependency, please define its version in this
|
|
|
|
* section.
|
|
|
|
* - If that version is not the latest, please include a note explaining why
|
|
|
|
* this is the case.
|
|
|
|
* - If, for some reason, you need to use a dependency version other than the
|
|
|
|
* global one, please include a note explaining why this is the case, and the
|
|
|
|
* circumstances under which the dependency could be upgraded to use the
|
|
|
|
* global version
|
|
|
|
*/
|
2020-04-24 19:33:27 +03:00
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// === Akka ===================================================================
|
2020-02-13 17:33:39 +03:00
|
|
|
|
2020-07-03 15:02:27 +03:00
|
|
|
def akkaPkg(name: String) = akkaURL %% s"akka-$name" % akkaVersion
|
|
|
|
def akkaHTTPPkg(name: String) = akkaURL %% s"akka-$name" % akkaHTTPVersion
|
2020-04-30 22:30:55 +03:00
|
|
|
val akkaURL = "com.typesafe.akka"
|
2020-06-29 20:24:41 +03:00
|
|
|
val akkaVersion = "2.6.6"
|
|
|
|
val akkaHTTPVersion = "10.2.0-RC1"
|
2020-04-30 22:30:55 +03:00
|
|
|
val akkaMockSchedulerVersion = "0.5.5"
|
2020-07-03 15:02:27 +03:00
|
|
|
val logbackClassicVersion = "1.2.3"
|
2020-04-30 22:30:55 +03:00
|
|
|
val akkaActor = akkaPkg("actor")
|
|
|
|
val akkaStream = akkaPkg("stream")
|
|
|
|
val akkaTyped = akkaPkg("actor-typed")
|
|
|
|
val akkaTestkit = akkaPkg("testkit")
|
|
|
|
val akkaSLF4J = akkaPkg("slf4j")
|
|
|
|
val akkaTestkitTyped = akkaPkg("actor-testkit-typed") % Test
|
|
|
|
val akkaHttp = akkaHTTPPkg("http")
|
|
|
|
val akkaSpray = akkaHTTPPkg("http-spray-json")
|
2020-07-03 15:02:27 +03:00
|
|
|
val akkaTest = Seq(
|
|
|
|
"ch.qos.logback" % "logback-classic" % logbackClassicVersion % Test
|
|
|
|
)
|
2020-04-30 22:30:55 +03:00
|
|
|
val akka =
|
2020-07-01 14:21:13 +03:00
|
|
|
Seq(
|
|
|
|
akkaActor,
|
|
|
|
akkaStream,
|
|
|
|
akkaHttp,
|
|
|
|
akkaSpray,
|
|
|
|
akkaTyped
|
|
|
|
) ++ akkaTest
|
2020-04-30 22:30:55 +03:00
|
|
|
|
|
|
|
// === Cats ===================================================================
|
|
|
|
|
2020-06-29 20:24:41 +03:00
|
|
|
val catsVersion = "2.2.0-M3"
|
2020-04-30 22:30:55 +03:00
|
|
|
val kittensVersion = "2.1.0"
|
2019-09-12 17:47:25 +03:00
|
|
|
val cats = {
|
|
|
|
Seq(
|
2020-02-13 17:33:39 +03:00
|
|
|
"org.typelevel" %% "cats-core" % catsVersion,
|
|
|
|
"org.typelevel" %% "cats-effect" % catsVersion,
|
|
|
|
"org.typelevel" %% "cats-free" % catsVersion,
|
|
|
|
"org.typelevel" %% "cats-macros" % catsVersion,
|
2020-04-30 22:30:55 +03:00
|
|
|
"org.typelevel" %% "kittens" % kittensVersion
|
2019-06-14 18:26:49 +03:00
|
|
|
)
|
2019-09-12 17:47:25 +03:00
|
|
|
}
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// === Circe ==================================================================
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-06-29 20:24:41 +03:00
|
|
|
val circeVersion = "0.14.0-M1"
|
|
|
|
val circeYamlVersion = "0.13.1"
|
|
|
|
val enumeratumCirceVersion = "1.6.1"
|
|
|
|
val circeGenericExtrasVersion = "0.13.0"
|
2019-11-18 16:12:16 +03:00
|
|
|
val circe = Seq("circe-core", "circe-generic", "circe-parser")
|
|
|
|
.map("io.circe" %% _ % circeVersion)
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// === Commons ================================================================
|
|
|
|
|
|
|
|
val commonsCollectionsVersion = "4.4"
|
|
|
|
val commonsLangVersion = "3.10"
|
2020-06-29 20:24:41 +03:00
|
|
|
val commonsIoVersion = "2.7"
|
2020-04-30 22:30:55 +03:00
|
|
|
val commonsTextVersion = "1.8"
|
|
|
|
val commonsMathVersion = "3.6.1"
|
|
|
|
val commonsCompressVersion = "1.20"
|
|
|
|
val commonsCliVersion = "1.4"
|
|
|
|
val commons = Seq(
|
|
|
|
"org.apache.commons" % "commons-collections4" % commonsCollectionsVersion,
|
|
|
|
"org.apache.commons" % "commons-lang3" % commonsLangVersion,
|
|
|
|
"commons-io" % "commons-io" % commonsIoVersion,
|
|
|
|
"org.apache.commons" % "commons-text" % commonsTextVersion,
|
|
|
|
"org.apache.commons" % "commons-math3" % commonsMathVersion,
|
|
|
|
"commons-cli" % "commons-cli" % commonsCliVersion
|
|
|
|
)
|
|
|
|
|
|
|
|
// === Jackson ================================================================
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-06-29 20:24:41 +03:00
|
|
|
val jacksonVersion = "2.11.1"
|
2020-04-30 22:30:55 +03:00
|
|
|
val jackson = Seq(
|
|
|
|
"com.fasterxml.jackson.dataformat" % "jackson-dataformat-cbor" % jacksonVersion,
|
|
|
|
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion,
|
2020-06-24 20:02:42 +03:00
|
|
|
"com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion
|
2020-04-30 22:30:55 +03:00
|
|
|
)
|
|
|
|
|
2020-07-01 14:21:13 +03:00
|
|
|
// === JAXB ================================================================
|
|
|
|
|
|
|
|
val jaxbVersion = "2.3.3"
|
|
|
|
val jaxb = Seq(
|
|
|
|
"jakarta.xml.bind" % "jakarta.xml.bind-api" % jaxbVersion % Benchmark,
|
|
|
|
"com.sun.xml.bind" % "jaxb-impl" % jaxbVersion % Benchmark
|
|
|
|
)
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// === JMH ====================================================================
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
val jmhVersion = "1.23"
|
2019-09-12 17:47:25 +03:00
|
|
|
val jmh = Seq(
|
2020-04-30 22:30:55 +03:00
|
|
|
"org.openjdk.jmh" % "jmh-core" % jmhVersion % Benchmark,
|
|
|
|
"org.openjdk.jmh" % "jmh-generator-annprocess" % jmhVersion % Benchmark
|
2019-09-12 17:47:25 +03:00
|
|
|
)
|
2019-06-07 14:49:47 +03:00
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// === Monocle ================================================================
|
2019-11-18 14:18:16 +03:00
|
|
|
|
2020-06-29 20:24:41 +03:00
|
|
|
val monocleVersion = "2.0.5"
|
2020-04-30 22:30:55 +03:00
|
|
|
val monocle = {
|
|
|
|
Seq(
|
|
|
|
"com.github.julien-truffaut" %% "monocle-core" % monocleVersion,
|
|
|
|
"com.github.julien-truffaut" %% "monocle-macro" % monocleVersion,
|
|
|
|
"com.github.julien-truffaut" %% "monocle-law" % monocleVersion % "test"
|
|
|
|
)
|
|
|
|
}
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// === Scala Compiler =========================================================
|
|
|
|
|
|
|
|
val scalaCompiler = Seq(
|
|
|
|
"org.scala-lang" % "scala-reflect" % scalacVersion,
|
|
|
|
"org.scala-lang" % "scala-compiler" % scalacVersion
|
|
|
|
)
|
|
|
|
|
|
|
|
// === Splain =================================================================
|
|
|
|
|
2020-06-29 20:24:41 +03:00
|
|
|
val splainVersion = "0.5.7"
|
2020-04-30 22:30:55 +03:00
|
|
|
val splainOptions = Seq(
|
|
|
|
"-P:splain:infix:true",
|
|
|
|
"-P:splain:foundreq:true",
|
|
|
|
"-P:splain:implicits:true",
|
|
|
|
"-P:splain:tree:true"
|
2019-12-17 16:33:21 +03:00
|
|
|
)
|
|
|
|
|
2020-10-09 17:19:58 +03:00
|
|
|
// === std-lib ================================================================
|
|
|
|
|
|
|
|
val icuVersion = "67.1"
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// === ZIO ====================================================================
|
|
|
|
|
2020-09-07 12:25:14 +03:00
|
|
|
val zioVersion = "1.0.1"
|
|
|
|
val zioInteropCatsVersion = "2.1.4.0"
|
2020-04-30 22:30:55 +03:00
|
|
|
val zio = Seq(
|
|
|
|
"dev.zio" %% "zio" % zioVersion,
|
|
|
|
"dev.zio" %% "zio-interop-cats" % zioInteropCatsVersion
|
|
|
|
)
|
|
|
|
|
|
|
|
// === Other ==================================================================
|
|
|
|
|
2020-08-07 12:18:09 +03:00
|
|
|
val bcpkixJdk15Version = "1.65"
|
2020-08-10 13:14:39 +03:00
|
|
|
val bumpVersion = "0.1.3"
|
2020-08-07 12:18:09 +03:00
|
|
|
val declineVersion = "1.2.0"
|
|
|
|
val directoryWatcherVersion = "0.9.10"
|
|
|
|
val flatbuffersVersion = "1.12.0"
|
|
|
|
val guavaVersion = "29.0-jre"
|
|
|
|
val jlineVersion = "3.15.0"
|
|
|
|
val kindProjectorVersion = "0.11.0"
|
|
|
|
val mockitoScalaVersion = "1.14.8"
|
|
|
|
val newtypeVersion = "0.4.4"
|
|
|
|
val pprintVersion = "0.5.9"
|
|
|
|
val pureconfigVersion = "0.13.0"
|
|
|
|
val refinedVersion = "0.9.14"
|
|
|
|
val scalacheckVersion = "1.14.3"
|
|
|
|
val scalacticVersion = "3.3.0-SNAP2"
|
|
|
|
val scalaLoggingVersion = "3.9.2"
|
|
|
|
val scalameterVersion = "0.19"
|
|
|
|
val scalatagsVersion = "0.9.1"
|
|
|
|
val scalatestVersion = "3.3.0-SNAP2"
|
|
|
|
val shapelessVersion = "2.4.0-M1"
|
2020-10-02 19:17:21 +03:00
|
|
|
val slf4jVersion = "1.7.30"
|
2020-08-07 12:18:09 +03:00
|
|
|
val slickVersion = "3.3.2"
|
|
|
|
val sqliteVersion = "3.31.1"
|
|
|
|
val tikaVersion = "1.24.1"
|
|
|
|
val typesafeConfigVersion = "1.4.0"
|
2020-04-30 22:30:55 +03:00
|
|
|
|
|
|
|
// ============================================================================
|
|
|
|
// === Internal Libraries =====================================================
|
|
|
|
// ============================================================================
|
|
|
|
|
2019-11-26 16:02:50 +03:00
|
|
|
lazy val logger = crossProject(JVMPlatform, JSPlatform)
|
|
|
|
.withoutSuffixFor(JVMPlatform)
|
|
|
|
.crossType(CrossType.Pure)
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/logger"))
|
2019-06-07 14:39:30 +03:00
|
|
|
.settings(
|
2019-09-12 17:47:25 +03:00
|
|
|
version := "0.1",
|
2020-04-30 22:30:55 +03:00
|
|
|
libraryDependencies ++= scalaCompiler
|
2019-06-14 18:26:49 +03:00
|
|
|
)
|
2019-12-17 16:33:21 +03:00
|
|
|
.jsSettings(jsSettings)
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2019-11-26 16:02:50 +03:00
|
|
|
lazy val flexer = crossProject(JVMPlatform, JSPlatform)
|
|
|
|
.withoutSuffixFor(JVMPlatform)
|
|
|
|
.crossType(CrossType.Pure)
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/flexer"))
|
2019-09-12 17:47:25 +03:00
|
|
|
.dependsOn(logger)
|
2019-06-14 18:26:49 +03:00
|
|
|
.settings(
|
2019-09-12 17:47:25 +03:00
|
|
|
version := "0.1",
|
|
|
|
resolvers += Resolver.sonatypeRepo("releases"),
|
2020-04-30 22:30:55 +03:00
|
|
|
libraryDependencies ++= scalaCompiler ++ Seq(
|
2020-10-19 11:50:12 +03:00
|
|
|
"com.google.guava" % "guava" % guavaVersion exclude ("com.google.code.findbugs", "jsr305"),
|
2020-06-24 20:02:42 +03:00
|
|
|
"org.typelevel" %%% "cats-core" % catsVersion,
|
|
|
|
"org.typelevel" %%% "kittens" % kittensVersion
|
|
|
|
)
|
2019-06-14 18:26:49 +03:00
|
|
|
)
|
2019-12-17 16:33:21 +03:00
|
|
|
.jsSettings(jsSettings)
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2020-04-14 19:00:51 +03:00
|
|
|
lazy val `syntax-definition` = crossProject(JVMPlatform, JSPlatform)
|
2019-11-26 16:02:50 +03:00
|
|
|
.withoutSuffixFor(JVMPlatform)
|
|
|
|
.crossType(CrossType.Pure)
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/syntax/definition"))
|
2019-09-12 17:47:25 +03:00
|
|
|
.dependsOn(logger, flexer)
|
2019-06-14 18:26:49 +03:00
|
|
|
.settings(
|
2020-04-14 19:00:51 +03:00
|
|
|
scalacOptions ++= Seq("-Ypatmat-exhaust-depth", "off"),
|
2020-04-30 22:30:55 +03:00
|
|
|
libraryDependencies ++= monocle ++ scalaCompiler ++ Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"org.typelevel" %%% "cats-core" % catsVersion,
|
|
|
|
"org.typelevel" %%% "kittens" % kittensVersion,
|
|
|
|
"com.lihaoyi" %%% "scalatags" % scalatagsVersion,
|
|
|
|
"io.circe" %%% "circe-core" % circeVersion,
|
|
|
|
"io.circe" %%% "circe-generic" % circeVersion,
|
|
|
|
"io.circe" %%% "circe-parser" % circeVersion
|
|
|
|
)
|
2019-06-03 05:09:26 +03:00
|
|
|
)
|
2019-12-17 16:33:21 +03:00
|
|
|
.jsSettings(jsSettings)
|
2019-09-12 17:47:25 +03:00
|
|
|
|
2019-11-26 16:02:50 +03:00
|
|
|
lazy val syntax = crossProject(JVMPlatform, JSPlatform)
|
|
|
|
.withoutSuffixFor(JVMPlatform)
|
2019-12-17 16:33:21 +03:00
|
|
|
.crossType(CrossType.Full)
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/syntax/specialization"))
|
2020-04-14 19:00:51 +03:00
|
|
|
.dependsOn(logger, flexer, `syntax-definition`)
|
2019-09-12 17:47:25 +03:00
|
|
|
.configs(Test)
|
2019-06-14 18:26:49 +03:00
|
|
|
.configs(Benchmark)
|
|
|
|
.settings(
|
2020-10-15 17:52:26 +03:00
|
|
|
commands += WithDebugCommand.withDebug,
|
|
|
|
Test / fork := true,
|
2019-11-26 16:02:50 +03:00
|
|
|
testFrameworks := Nil,
|
2020-04-14 19:00:51 +03:00
|
|
|
scalacOptions ++= Seq("-Ypatmat-exhaust-depth", "off"),
|
2019-09-12 17:47:25 +03:00
|
|
|
mainClass in (Compile, run) := Some("org.enso.syntax.text.Main"),
|
|
|
|
version := "0.1",
|
|
|
|
logBuffered := false,
|
2019-11-26 16:02:50 +03:00
|
|
|
libraryDependencies ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"org.scalatest" %%% "scalatest" % scalatestVersion % Test,
|
|
|
|
"com.lihaoyi" %%% "pprint" % pprintVersion,
|
|
|
|
"io.circe" %%% "circe-core" % circeVersion,
|
|
|
|
"io.circe" %%% "circe-generic" % circeVersion,
|
|
|
|
"io.circe" %%% "circe-parser" % circeVersion
|
|
|
|
),
|
2020-07-01 14:21:13 +03:00
|
|
|
(Compile / compile) := (Compile / compile)
|
|
|
|
.dependsOn(RecompileParser.run(`syntax-definition`))
|
|
|
|
.value,
|
|
|
|
(Test / compile) := (Test / compile)
|
|
|
|
.dependsOn(RecompileParser.run(`syntax-definition`))
|
|
|
|
.value,
|
|
|
|
(Benchmark / compile) := (Benchmark / compile)
|
|
|
|
.dependsOn(RecompileParser.run(`syntax-definition`))
|
2020-06-24 20:02:42 +03:00
|
|
|
.value
|
2019-06-14 18:26:49 +03:00
|
|
|
)
|
2019-11-26 16:02:50 +03:00
|
|
|
.jvmSettings(
|
|
|
|
inConfig(Benchmark)(Defaults.testSettings),
|
|
|
|
unmanagedSourceDirectories in Benchmark +=
|
2020-06-24 20:02:42 +03:00
|
|
|
baseDirectory.value.getParentFile / "shared/src/bench/scala",
|
2020-04-30 22:30:55 +03:00
|
|
|
libraryDependencies +=
|
2020-06-24 20:02:42 +03:00
|
|
|
"com.storm-enroute" %% "scalameter" % scalameterVersion % "bench",
|
2019-11-26 16:02:50 +03:00
|
|
|
testFrameworks := List(
|
2020-06-24 20:02:42 +03:00
|
|
|
new TestFramework("org.scalatest.tools.Framework"),
|
|
|
|
new TestFramework("org.scalameter.ScalaMeterFramework")
|
|
|
|
),
|
2019-11-26 16:02:50 +03:00
|
|
|
bench := (test in Benchmark).tag(Exclusive).value
|
|
|
|
)
|
|
|
|
.jsSettings(
|
2019-12-17 16:33:21 +03:00
|
|
|
scalaJSUseMainModuleInitializer := false,
|
2020-01-10 17:53:46 +03:00
|
|
|
scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.ESModule) },
|
2019-12-17 16:33:21 +03:00
|
|
|
testFrameworks := List(new TestFramework("org.scalatest.tools.Framework")),
|
|
|
|
Compile / fullOptJS / artifactPath := file("target/scala-parser.js")
|
2019-11-26 16:02:50 +03:00
|
|
|
)
|
2019-06-13 12:49:04 +03:00
|
|
|
|
2020-07-03 16:42:45 +03:00
|
|
|
lazy val `parser-service` = (project in file("lib/scala/parser-service"))
|
2019-11-26 16:02:50 +03:00
|
|
|
.dependsOn(syntax.jvm)
|
2019-11-18 16:12:16 +03:00
|
|
|
.settings(
|
|
|
|
libraryDependencies ++= akka,
|
|
|
|
mainClass := Some("org.enso.ParserServiceMain")
|
|
|
|
)
|
|
|
|
|
2020-04-20 15:33:51 +03:00
|
|
|
lazy val `text-buffer` = project
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/text-buffer"))
|
2020-04-20 15:33:51 +03:00
|
|
|
.configs(Test)
|
|
|
|
.settings(
|
|
|
|
libraryDependencies ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"org.typelevel" %% "cats-core" % catsVersion,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.scalacheck" %% "scalacheck" % scalacheckVersion % Test
|
|
|
|
)
|
2020-04-20 15:33:51 +03:00
|
|
|
)
|
|
|
|
|
2020-07-03 16:42:45 +03:00
|
|
|
lazy val graph = (project in file("lib/scala/graph/"))
|
2019-11-26 16:02:50 +03:00
|
|
|
.dependsOn(logger.jvm)
|
|
|
|
.configs(Test)
|
|
|
|
.settings(
|
|
|
|
version := "0.1",
|
|
|
|
resolvers ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
Resolver.sonatypeRepo("releases"),
|
|
|
|
Resolver.sonatypeRepo("snapshots")
|
|
|
|
),
|
2020-02-13 17:33:39 +03:00
|
|
|
scalacOptions += "-Ymacro-annotations",
|
2020-04-30 22:30:55 +03:00
|
|
|
libraryDependencies ++= scalaCompiler ++ Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"com.chuusai" %% "shapeless" % shapelessVersion,
|
|
|
|
"io.estatico" %% "newtype" % newtypeVersion,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.scalacheck" %% "scalacheck" % scalacheckVersion % Test,
|
|
|
|
"com.github.julien-truffaut" %% "monocle-core" % monocleVersion,
|
|
|
|
"org.apache.commons" % "commons-lang3" % commonsLangVersion
|
|
|
|
),
|
2020-04-30 22:30:55 +03:00
|
|
|
addCompilerPlugin(
|
|
|
|
"org.typelevel" %% "kind-projector" % kindProjectorVersion cross CrossVersion.full
|
2019-11-26 16:02:50 +03:00
|
|
|
),
|
|
|
|
addCompilerPlugin(
|
2020-04-30 22:30:55 +03:00
|
|
|
"io.tryp" % "splain" % splainVersion cross CrossVersion.patch
|
2020-02-13 12:52:05 +03:00
|
|
|
),
|
2020-04-30 22:30:55 +03:00
|
|
|
scalacOptions ++= splainOptions
|
2019-11-26 16:02:50 +03:00
|
|
|
)
|
|
|
|
|
2020-07-03 16:42:45 +03:00
|
|
|
lazy val pkg = (project in file("lib/scala/pkg"))
|
2019-06-13 12:49:04 +03:00
|
|
|
.settings(
|
|
|
|
mainClass in (Compile, run) := Some("org.enso.pkg.Main"),
|
2019-09-12 17:47:25 +03:00
|
|
|
version := "0.1",
|
2019-11-18 16:12:16 +03:00
|
|
|
libraryDependencies ++= circe ++ Seq(
|
2020-08-31 16:53:33 +03:00
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"nl.gn0s1s" %% "bump" % bumpVersion,
|
|
|
|
"io.circe" %% "circe-yaml" % circeYamlVersion, // separate from other circe deps because its independent project with its own versioning
|
|
|
|
"commons-io" % "commons-io" % commonsIoVersion
|
2020-06-24 20:02:42 +03:00
|
|
|
)
|
2019-06-13 12:49:04 +03:00
|
|
|
)
|
2020-07-10 13:57:42 +03:00
|
|
|
|
2020-10-02 19:17:21 +03:00
|
|
|
lazy val `akka-native` = project
|
|
|
|
.in(file("lib/scala/akka-native"))
|
|
|
|
.configs(Test)
|
|
|
|
.settings(
|
|
|
|
version := "0.1",
|
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
akkaActor
|
|
|
|
),
|
|
|
|
// Note [Native Image Workaround for GraalVM 20.2]
|
|
|
|
libraryDependencies += "org.graalvm.nativeimage" % "svm" % graalVersion % "provided"
|
|
|
|
)
|
|
|
|
|
|
|
|
lazy val `logging-service` = project
|
|
|
|
.in(file("lib/scala/logging-service"))
|
|
|
|
.configs(Test)
|
|
|
|
.settings(
|
|
|
|
version := "0.1",
|
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
"org.slf4j" % "slf4j-api" % slf4jVersion,
|
|
|
|
"com.typesafe.scala-logging" %% "scala-logging" % scalaLoggingVersion,
|
|
|
|
akkaStream,
|
|
|
|
akkaHttp,
|
|
|
|
"io.circe" %%% "circe-core" % circeVersion,
|
|
|
|
"io.circe" %%% "circe-parser" % circeVersion,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.graalvm.nativeimage" % "svm" % graalVersion % "provided"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.settings(
|
|
|
|
if (Platform.isWindows)
|
|
|
|
(Compile / unmanagedSourceDirectories) += (Compile / sourceDirectory).value / "java-windows"
|
|
|
|
else
|
|
|
|
(Compile / unmanagedSourceDirectories) += (Compile / sourceDirectory).value / "java-unix"
|
|
|
|
)
|
|
|
|
.dependsOn(`akka-native`)
|
|
|
|
|
2020-07-22 20:28:03 +03:00
|
|
|
lazy val cli = project
|
|
|
|
.in(file("lib/scala/cli"))
|
|
|
|
.configs(Test)
|
|
|
|
.settings(
|
|
|
|
version := "0.1",
|
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.typelevel" %% "cats-core" % catsVersion
|
2020-09-03 13:44:21 +03:00
|
|
|
),
|
|
|
|
parallelExecution in Test := false
|
2020-07-22 20:28:03 +03:00
|
|
|
)
|
|
|
|
|
2020-07-10 13:57:42 +03:00
|
|
|
lazy val `version-output` = (project in file("lib/scala/version-output"))
|
|
|
|
.settings(
|
|
|
|
version := "0.1"
|
|
|
|
)
|
|
|
|
.settings(
|
|
|
|
Compile / sourceGenerators += Def.task {
|
|
|
|
val file = (Compile / sourceManaged).value / "buildinfo" / "Info.scala"
|
|
|
|
BuildInfo
|
|
|
|
.writeBuildInfoFile(
|
|
|
|
file,
|
|
|
|
state.value.log,
|
|
|
|
ensoVersion,
|
|
|
|
scalacVersion,
|
|
|
|
graalVersion
|
|
|
|
)
|
|
|
|
}.taskValue
|
|
|
|
)
|
2019-06-14 18:26:49 +03:00
|
|
|
|
2020-07-03 16:42:45 +03:00
|
|
|
lazy val `project-manager` = (project in file("lib/scala/project-manager"))
|
2019-11-18 14:18:16 +03:00
|
|
|
.settings(
|
2020-03-31 16:51:05 +03:00
|
|
|
(Compile / mainClass) := Some("org.enso.projectmanager.boot.ProjectManager")
|
2019-11-18 14:18:16 +03:00
|
|
|
)
|
|
|
|
.settings(
|
2020-03-31 16:51:05 +03:00
|
|
|
(Compile / run / fork) := true,
|
|
|
|
(Test / fork) := true,
|
|
|
|
(Compile / run / connectInput) := true,
|
2020-06-16 12:00:47 +03:00
|
|
|
javaOptions ++= {
|
|
|
|
// Note [Classpath Separation]
|
|
|
|
val runtimeClasspath =
|
|
|
|
(runtime / Compile / fullClasspath).value
|
|
|
|
.map(_.data)
|
|
|
|
.mkString(File.pathSeparator)
|
|
|
|
Seq(s"-Dtruffle.class.path.append=$runtimeClasspath")
|
|
|
|
},
|
2019-11-18 14:18:16 +03:00
|
|
|
libraryDependencies ++= akka,
|
2020-03-18 13:41:55 +03:00
|
|
|
libraryDependencies ++= circe,
|
|
|
|
libraryDependencies ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"com.typesafe" % "config" % typesafeConfigVersion,
|
|
|
|
"com.github.pureconfig" %% "pureconfig" % pureconfigVersion,
|
|
|
|
"ch.qos.logback" % "logback-classic" % logbackClassicVersion,
|
|
|
|
"com.typesafe.scala-logging" %% "scala-logging" % scalaLoggingVersion,
|
|
|
|
"dev.zio" %% "zio" % zioVersion,
|
|
|
|
"dev.zio" %% "zio-interop-cats" % zioInteropCatsVersion,
|
2020-08-21 13:02:52 +03:00
|
|
|
"commons-cli" % "commons-cli" % commonsCliVersion,
|
2020-06-24 20:02:42 +03:00
|
|
|
"commons-io" % "commons-io" % commonsIoVersion,
|
|
|
|
"com.beachape" %% "enumeratum-circe" % enumeratumCirceVersion,
|
|
|
|
"com.miguno.akka" %% "akka-mock-scheduler" % akkaMockSchedulerVersion % Test,
|
|
|
|
"org.mockito" %% "mockito-scala" % mockitoScalaVersion % Test
|
|
|
|
),
|
2020-03-24 15:03:43 +03:00
|
|
|
addCompilerPlugin(
|
2020-04-30 22:30:55 +03:00
|
|
|
"org.typelevel" %% "kind-projector" % kindProjectorVersion cross CrossVersion.full
|
2020-03-18 13:41:55 +03:00
|
|
|
)
|
2019-11-18 14:18:16 +03:00
|
|
|
)
|
2020-05-15 14:05:44 +03:00
|
|
|
.settings(
|
|
|
|
assemblyJarName in assembly := "project-manager.jar",
|
|
|
|
test in assembly := {},
|
|
|
|
assemblyOutputPath in assembly := file("project-manager.jar"),
|
|
|
|
assemblyMergeStrategy in assembly := {
|
|
|
|
case PathList("META-INF", file, xs @ _*) if file.endsWith(".DSA") =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case PathList("META-INF", file, xs @ _*) if file.endsWith(".SF") =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case PathList("META-INF", "MANIFEST.MF", xs @ _*) =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case "application.conf" => MergeStrategy.concat
|
|
|
|
case "reference.conf" => MergeStrategy.concat
|
|
|
|
case _ => MergeStrategy.first
|
|
|
|
},
|
|
|
|
assemblyOption in assembly := (assemblyOption in assembly).value
|
2020-06-24 20:02:42 +03:00
|
|
|
.copy(
|
|
|
|
prependShellScript = Some(
|
|
|
|
defaultUniversalScript(
|
|
|
|
shebang = false,
|
|
|
|
javaOpts = Seq("-Dtruffle.class.path.append=runtime.jar")
|
|
|
|
)
|
2020-05-15 14:05:44 +03:00
|
|
|
)
|
2020-06-24 20:02:42 +03:00
|
|
|
),
|
2020-06-16 12:00:47 +03:00
|
|
|
assembly := assembly
|
2020-06-24 20:02:42 +03:00
|
|
|
.dependsOn(runtime / assembly)
|
|
|
|
.value
|
2020-05-15 14:05:44 +03:00
|
|
|
)
|
2020-07-10 13:57:42 +03:00
|
|
|
.dependsOn(`version-output`)
|
2019-11-18 14:18:16 +03:00
|
|
|
.dependsOn(pkg)
|
2020-04-14 19:00:51 +03:00
|
|
|
.dependsOn(`language-server`)
|
2020-03-18 13:41:55 +03:00
|
|
|
.dependsOn(`json-rpc-server`)
|
|
|
|
.dependsOn(`json-rpc-server-test` % Test)
|
2020-07-14 14:44:40 +03:00
|
|
|
.dependsOn(testkit % Test)
|
2019-11-18 14:18:16 +03:00
|
|
|
|
2020-06-16 12:00:47 +03:00
|
|
|
/* Note [Classpath Separation]
|
|
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* Projects using the language runtime do not depend on it directly, but instead
|
|
|
|
* the language runtime is put on the Truffle classpath, rather than the
|
|
|
|
* standard classpath. This is the recommended way of handling this and we
|
|
|
|
* strive to use such structure everywhere.
|
|
|
|
* See
|
|
|
|
* https://www.graalvm.org/docs/graalvm-as-a-platform/implement-language#graalvm
|
|
|
|
*
|
|
|
|
* Currently the only exception to this are the tests of the runtime project
|
|
|
|
* which have classpath separation disabled, because they need direct access to
|
|
|
|
* the runtime's instruments.
|
|
|
|
*
|
|
|
|
* To ensure correct handling of dependencies by sbt, the classpath appended to
|
|
|
|
* Java options, should be based on `(runtime / Compile / fullClasspath).value`
|
|
|
|
* wherever possible. Using a key from the runtime project enables sbt to see
|
|
|
|
* the dependency.
|
|
|
|
*
|
|
|
|
* Assembly tasks that build JAR files which need `runtime.jar` to run should
|
|
|
|
* also add a dependency on `runtime / assembly`.
|
|
|
|
*/
|
|
|
|
|
2020-04-14 19:00:51 +03:00
|
|
|
lazy val `json-rpc-server` = project
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/json-rpc-server"))
|
2020-04-14 19:00:51 +03:00
|
|
|
.settings(
|
|
|
|
libraryDependencies ++= akka,
|
|
|
|
libraryDependencies ++= circe,
|
|
|
|
libraryDependencies ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"io.circe" %% "circe-literal" % circeVersion,
|
|
|
|
akkaTestkit % Test,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test
|
|
|
|
)
|
2020-04-14 19:00:51 +03:00
|
|
|
)
|
2019-11-05 17:12:33 +03:00
|
|
|
|
2020-04-14 19:00:51 +03:00
|
|
|
lazy val `json-rpc-server-test` = project
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/json-rpc-server-test"))
|
2020-04-14 19:00:51 +03:00
|
|
|
.settings(
|
|
|
|
libraryDependencies ++= akka,
|
|
|
|
libraryDependencies ++= circe,
|
|
|
|
libraryDependencies ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"io.circe" %% "circe-literal" % circeVersion,
|
|
|
|
akkaTestkit,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion
|
|
|
|
)
|
2020-04-14 19:00:51 +03:00
|
|
|
)
|
|
|
|
.dependsOn(`json-rpc-server`)
|
2019-08-08 14:50:29 +03:00
|
|
|
|
2020-07-14 14:44:40 +03:00
|
|
|
lazy val testkit = project
|
|
|
|
.in(file("lib/scala/testkit"))
|
|
|
|
.settings(
|
|
|
|
libraryDependencies ++= Seq(
|
2020-08-27 11:44:27 +03:00
|
|
|
"org.apache.commons" % "commons-lang3" % commonsLangVersion,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion
|
2020-07-20 11:00:49 +03:00
|
|
|
)
|
2020-07-14 14:44:40 +03:00
|
|
|
)
|
|
|
|
|
2020-07-03 16:42:45 +03:00
|
|
|
lazy val `core-definition` = (project in file("lib/scala/core-definition"))
|
2020-01-31 19:58:35 +03:00
|
|
|
.configs(Benchmark)
|
|
|
|
.settings(
|
|
|
|
version := "0.1",
|
|
|
|
inConfig(Compile)(truffleRunOptionsSettings),
|
|
|
|
inConfig(Benchmark)(Defaults.testSettings),
|
|
|
|
parallelExecution in Test := false,
|
|
|
|
logBuffered in Test := false,
|
2020-02-13 17:33:39 +03:00
|
|
|
scalacOptions += "-Ymacro-annotations",
|
2020-01-31 19:58:35 +03:00
|
|
|
libraryDependencies ++= jmh ++ Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"com.chuusai" %% "shapeless" % shapelessVersion,
|
|
|
|
"org.scalacheck" %% "scalacheck" % scalacheckVersion % Test,
|
|
|
|
"org.scalactic" %% "scalactic" % scalacticVersion % Test,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.typelevel" %% "cats-core" % catsVersion,
|
|
|
|
"com.github.julien-truffaut" %% "monocle-core" % monocleVersion
|
|
|
|
),
|
2020-01-31 19:58:35 +03:00
|
|
|
addCompilerPlugin(
|
2020-04-30 22:30:55 +03:00
|
|
|
"org.typelevel" %% "kind-projector" % kindProjectorVersion cross CrossVersion.full
|
2020-03-20 11:01:03 +03:00
|
|
|
),
|
2020-04-30 22:30:55 +03:00
|
|
|
addCompilerPlugin(
|
|
|
|
"io.tryp" % "splain" % splainVersion cross CrossVersion.patch
|
|
|
|
),
|
|
|
|
scalacOptions ++= splainOptions
|
2020-02-13 17:33:39 +03:00
|
|
|
)
|
|
|
|
.dependsOn(graph)
|
|
|
|
.dependsOn(syntax.jvm)
|
|
|
|
|
2020-06-23 11:26:05 +03:00
|
|
|
lazy val searcher = project
|
2020-07-03 16:42:45 +03:00
|
|
|
.in(file("lib/scala/searcher"))
|
2020-06-23 11:26:05 +03:00
|
|
|
.configs(Test)
|
|
|
|
.settings(
|
2020-07-06 16:55:21 +03:00
|
|
|
libraryDependencies ++= jmh ++ Seq(
|
|
|
|
"com.typesafe.slick" %% "slick" % slickVersion,
|
|
|
|
"org.xerial" % "sqlite-jdbc" % sqliteVersion,
|
|
|
|
"ch.qos.logback" % "logback-classic" % logbackClassicVersion % Test,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test
|
2020-06-29 17:36:44 +03:00
|
|
|
)
|
2020-06-23 11:26:05 +03:00
|
|
|
)
|
2020-07-06 16:55:21 +03:00
|
|
|
.configs(Benchmark)
|
|
|
|
.settings(
|
|
|
|
inConfig(Benchmark)(Defaults.testSettings),
|
|
|
|
fork in Benchmark := true
|
|
|
|
)
|
2020-07-14 14:44:40 +03:00
|
|
|
.dependsOn(testkit % Test)
|
2020-07-20 11:00:49 +03:00
|
|
|
.dependsOn(`polyglot-api`)
|
2020-06-23 11:26:05 +03:00
|
|
|
|
2020-07-03 16:42:45 +03:00
|
|
|
lazy val `interpreter-dsl` = (project in file("lib/scala/interpreter-dsl"))
|
|
|
|
.settings(
|
|
|
|
version := "0.1",
|
2020-10-19 11:50:12 +03:00
|
|
|
libraryDependencies += "com.google.auto.service" % "auto-service" % "1.0-rc7" exclude ("com.google.code.findbugs", "jsr305")
|
2020-07-03 16:42:45 +03:00
|
|
|
)
|
|
|
|
|
2020-04-30 22:30:55 +03:00
|
|
|
// ============================================================================
|
|
|
|
// === Sub-Projects ===========================================================
|
|
|
|
// ============================================================================
|
2020-04-14 19:00:51 +03:00
|
|
|
|
|
|
|
val truffleRunOptions = Seq(
|
|
|
|
"-Dpolyglot.engine.IterativePartialEscape=true",
|
2020-06-16 12:00:47 +03:00
|
|
|
"-Dpolyglot.engine.BackgroundCompilation=false"
|
2020-04-14 19:00:51 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
val truffleRunOptionsSettings = Seq(
|
|
|
|
fork := true,
|
|
|
|
javaOptions ++= truffleRunOptions
|
|
|
|
)
|
|
|
|
|
|
|
|
lazy val `polyglot-api` = project
|
2020-02-13 17:33:39 +03:00
|
|
|
.in(file("engine/polyglot-api"))
|
|
|
|
.settings(
|
|
|
|
Test / fork := true,
|
2020-06-16 12:00:47 +03:00
|
|
|
Test / javaOptions ++= {
|
|
|
|
// Note [Classpath Separation]
|
|
|
|
val runtimeClasspath =
|
|
|
|
(LocalProject("runtime") / Compile / fullClasspath).value
|
|
|
|
.map(_.data)
|
|
|
|
.mkString(File.pathSeparator)
|
|
|
|
Seq(s"-Dtruffle.class.path.append=$runtimeClasspath")
|
|
|
|
},
|
2020-02-13 17:33:39 +03:00
|
|
|
libraryDependencies ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided",
|
|
|
|
"com.google.flatbuffers" % "flatbuffers-java" % flatbuffersVersion,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.scalacheck" %% "scalacheck" % scalacheckVersion % Test
|
|
|
|
),
|
2020-04-30 22:30:55 +03:00
|
|
|
libraryDependencies ++= jackson,
|
2020-02-13 12:52:05 +03:00
|
|
|
addCompilerPlugin(
|
2020-04-30 22:30:55 +03:00
|
|
|
"org.typelevel" %% "kind-projector" % kindProjectorVersion cross CrossVersion.full
|
2020-02-13 12:52:05 +03:00
|
|
|
),
|
2020-04-30 22:30:55 +03:00
|
|
|
addCompilerPlugin(
|
|
|
|
"io.tryp" % "splain" % splainVersion cross CrossVersion.patch
|
|
|
|
),
|
2020-06-05 11:48:16 +03:00
|
|
|
scalacOptions ++= splainOptions,
|
|
|
|
GenerateFlatbuffers.flatcVersion := flatbuffersVersion,
|
|
|
|
sourceGenerators in Compile += GenerateFlatbuffers.task
|
2020-01-31 19:58:35 +03:00
|
|
|
)
|
2020-02-13 17:33:39 +03:00
|
|
|
.dependsOn(pkg)
|
2020-04-20 15:33:51 +03:00
|
|
|
.dependsOn(`text-buffer`)
|
2020-02-13 17:33:39 +03:00
|
|
|
|
2020-04-14 19:00:51 +03:00
|
|
|
lazy val `language-server` = (project in file("engine/language-server"))
|
2020-02-13 17:33:39 +03:00
|
|
|
.settings(
|
|
|
|
libraryDependencies ++= akka ++ circe ++ Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"ch.qos.logback" % "logback-classic" % logbackClassicVersion,
|
|
|
|
"com.typesafe.scala-logging" %% "scala-logging" % scalaLoggingVersion,
|
2020-06-29 20:24:41 +03:00
|
|
|
"io.circe" %% "circe-generic-extras" % circeGenericExtrasVersion,
|
2020-06-24 20:02:42 +03:00
|
|
|
"io.circe" %% "circe-literal" % circeVersion,
|
|
|
|
"org.bouncycastle" % "bcpkix-jdk15on" % bcpkixJdk15Version,
|
|
|
|
"dev.zio" %% "zio" % zioVersion,
|
|
|
|
"io.methvin" % "directory-watcher" % directoryWatcherVersion,
|
|
|
|
"com.beachape" %% "enumeratum-circe" % enumeratumCirceVersion,
|
|
|
|
"com.google.flatbuffers" % "flatbuffers-java" % flatbuffersVersion,
|
|
|
|
"commons-io" % "commons-io" % commonsIoVersion,
|
2020-07-06 16:55:21 +03:00
|
|
|
akkaTestkit % Test,
|
2020-06-24 20:02:42 +03:00
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.scalacheck" %% "scalacheck" % scalacheckVersion % Test,
|
|
|
|
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided"
|
|
|
|
),
|
2020-02-28 16:17:48 +03:00
|
|
|
testOptions in Test += Tests
|
2020-06-24 20:02:42 +03:00
|
|
|
.Argument(TestFrameworks.ScalaCheck, "-minSuccessfulTests", "1000"),
|
2020-06-05 11:48:16 +03:00
|
|
|
GenerateFlatbuffers.flatcVersion := flatbuffersVersion,
|
2020-08-07 12:18:09 +03:00
|
|
|
sourceGenerators in Compile += GenerateFlatbuffers.task
|
2020-02-28 16:17:48 +03:00
|
|
|
)
|
|
|
|
.configs(Benchmark)
|
|
|
|
.settings(
|
|
|
|
inConfig(Benchmark)(Defaults.testSettings),
|
|
|
|
bench := (test in Benchmark).value,
|
2020-04-30 22:30:55 +03:00
|
|
|
libraryDependencies += "com.storm-enroute" %% "scalameter" % scalameterVersion % "bench",
|
2020-02-28 16:17:48 +03:00
|
|
|
testFrameworks ++= List(
|
2020-06-24 20:02:42 +03:00
|
|
|
new TestFramework("org.scalameter.ScalaMeterFramework")
|
|
|
|
)
|
2020-02-13 17:33:39 +03:00
|
|
|
)
|
2020-04-14 19:00:51 +03:00
|
|
|
.dependsOn(`polyglot-api`)
|
2020-03-18 13:41:55 +03:00
|
|
|
.dependsOn(`json-rpc-server`)
|
|
|
|
.dependsOn(`json-rpc-server-test` % Test)
|
2020-04-20 15:33:51 +03:00
|
|
|
.dependsOn(`text-buffer`)
|
2020-06-26 19:52:42 +03:00
|
|
|
.dependsOn(`searcher`)
|
2020-07-14 14:44:40 +03:00
|
|
|
.dependsOn(testkit % Test)
|
2020-01-31 19:58:35 +03:00
|
|
|
|
2020-08-03 17:00:12 +03:00
|
|
|
lazy val ast = (project in file("lib/scala/ast"))
|
|
|
|
.settings(
|
|
|
|
version := ensoVersion,
|
2020-08-14 12:10:52 +03:00
|
|
|
Cargo.rustVersion := rustVersion,
|
2020-08-10 13:14:39 +03:00
|
|
|
Compile / sourceGenerators += GenerateAST.task
|
2020-08-03 17:00:12 +03:00
|
|
|
)
|
|
|
|
|
2020-08-14 12:10:52 +03:00
|
|
|
lazy val parser = (project in file("lib/scala/parser"))
|
|
|
|
.settings(
|
|
|
|
fork := true,
|
|
|
|
Cargo.rustVersion := rustVersion,
|
|
|
|
Compile / compile / compileInputs := (Compile / compile / compileInputs)
|
2020-08-20 14:50:26 +03:00
|
|
|
.dependsOn(Cargo("build --project parser"))
|
|
|
|
.value,
|
2020-08-14 12:10:52 +03:00
|
|
|
javaOptions += {
|
|
|
|
val root = baseDirectory.value.getParentFile.getParentFile.getParentFile
|
|
|
|
s"-Djava.library.path=$root/target/rust/debug"
|
|
|
|
},
|
|
|
|
libraryDependencies ++= Seq(
|
2020-08-20 14:50:26 +03:00
|
|
|
"com.storm-enroute" %% "scalameter" % scalameterVersion % "bench",
|
|
|
|
"org.scalatest" %%% "scalatest" % scalatestVersion % Test
|
|
|
|
),
|
2020-08-14 12:10:52 +03:00
|
|
|
testFrameworks := List(
|
2020-08-20 14:50:26 +03:00
|
|
|
new TestFramework("org.scalatest.tools.Framework"),
|
|
|
|
new TestFramework("org.scalameter.ScalaMeterFramework")
|
|
|
|
)
|
2020-08-14 12:10:52 +03:00
|
|
|
)
|
|
|
|
.dependsOn(ast)
|
|
|
|
|
2019-11-08 20:32:48 +03:00
|
|
|
lazy val runtime = (project in file("engine/runtime"))
|
2019-11-19 18:16:58 +03:00
|
|
|
.configs(Benchmark)
|
2019-06-14 18:26:49 +03:00
|
|
|
.settings(
|
2020-05-15 11:07:58 +03:00
|
|
|
version := ensoVersion,
|
2019-09-12 17:47:25 +03:00
|
|
|
commands += WithDebugCommand.withDebug,
|
2019-11-05 17:12:33 +03:00
|
|
|
inConfig(Compile)(truffleRunOptionsSettings),
|
2019-11-19 18:16:58 +03:00
|
|
|
inConfig(Benchmark)(Defaults.testSettings),
|
2019-09-12 17:47:25 +03:00
|
|
|
parallelExecution in Test := false,
|
|
|
|
logBuffered in Test := false,
|
2020-02-13 17:33:39 +03:00
|
|
|
scalacOptions += "-Ymacro-annotations",
|
2020-03-20 11:01:03 +03:00
|
|
|
scalacOptions ++= Seq("-Ypatmat-exhaust-depth", "off"),
|
2020-07-01 14:21:13 +03:00
|
|
|
libraryDependencies ++= circe ++ jmh ++ jaxb ++ Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"com.chuusai" %% "shapeless" % shapelessVersion,
|
|
|
|
"org.apache.commons" % "commons-lang3" % commonsLangVersion,
|
|
|
|
"org.apache.tika" % "tika-core" % tikaVersion,
|
|
|
|
"org.graalvm.sdk" % "graal-sdk" % graalVersion % "provided",
|
|
|
|
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided",
|
|
|
|
"org.graalvm.truffle" % "truffle-api" % graalVersion % "provided",
|
|
|
|
"org.graalvm.truffle" % "truffle-dsl-processor" % graalVersion % "provided",
|
|
|
|
"org.graalvm.truffle" % "truffle-tck" % graalVersion % "provided",
|
|
|
|
"org.graalvm.truffle" % "truffle-tck-common" % graalVersion % "provided",
|
|
|
|
"org.scalacheck" %% "scalacheck" % scalacheckVersion % Test,
|
|
|
|
"org.scalactic" %% "scalactic" % scalacticVersion % Test,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
"org.graalvm.truffle" % "truffle-api" % graalVersion % Benchmark,
|
|
|
|
"org.typelevel" %% "cats-core" % catsVersion,
|
|
|
|
"eu.timepit" %% "refined" % refinedVersion
|
2020-08-07 12:18:09 +03:00
|
|
|
),
|
2020-01-31 19:58:35 +03:00
|
|
|
// Note [Unmanaged Classpath]
|
2020-04-14 19:00:51 +03:00
|
|
|
Compile / unmanagedClasspath += (`core-definition` / Compile / packageBin).value,
|
|
|
|
Test / unmanagedClasspath += (`core-definition` / Compile / packageBin).value,
|
2020-07-01 14:21:13 +03:00
|
|
|
Compile / compile / compileInputs := (Compile / compile / compileInputs)
|
|
|
|
.dependsOn(CopyTruffleJAR.preCompileTask)
|
|
|
|
.value,
|
2020-06-10 11:37:12 +03:00
|
|
|
Compile / compile := FixInstrumentsGeneration.patchedCompile
|
2020-06-24 20:02:42 +03:00
|
|
|
.dependsOn(FixInstrumentsGeneration.preCompileTask)
|
2020-07-01 14:21:13 +03:00
|
|
|
.dependsOn(`core-definition` / Compile / packageBin)
|
2020-06-24 20:02:42 +03:00
|
|
|
.value,
|
2020-06-16 12:00:47 +03:00
|
|
|
// Note [Classpath Separation]
|
|
|
|
Test / javaOptions ++= Seq(
|
2020-07-01 18:48:03 +03:00
|
|
|
"-Dgraalvm.locatorDisabled=true",
|
|
|
|
s"--upgrade-module-path=${file("engine/runtime/build-cache/truffle-api.jar").absolutePath}"
|
2020-07-01 14:21:13 +03:00
|
|
|
),
|
|
|
|
bootstrap := CopyTruffleJAR.bootstrapJARs.value,
|
|
|
|
Global / onLoad := EnvironmentCheck.addVersionCheck(
|
2020-08-21 12:31:40 +03:00
|
|
|
graalVersion,
|
2020-07-10 13:57:42 +03:00
|
|
|
javaVersion
|
2020-07-01 14:21:13 +03:00
|
|
|
)((Global / onLoad).value)
|
2019-06-14 18:26:49 +03:00
|
|
|
)
|
2019-07-11 14:23:00 +03:00
|
|
|
.settings(
|
|
|
|
(Compile / javacOptions) ++= Seq(
|
2020-06-24 20:02:42 +03:00
|
|
|
"-s",
|
|
|
|
(Compile / sourceManaged).value.getAbsolutePath
|
|
|
|
),
|
2020-02-13 12:52:05 +03:00
|
|
|
addCompilerPlugin(
|
2020-04-30 22:30:55 +03:00
|
|
|
"org.typelevel" %% "kind-projector" % kindProjectorVersion cross CrossVersion.full
|
2020-02-13 12:52:05 +03:00
|
|
|
),
|
2020-04-30 22:30:55 +03:00
|
|
|
addCompilerPlugin(
|
|
|
|
"io.tryp" % "splain" % splainVersion cross CrossVersion.patch
|
|
|
|
),
|
|
|
|
scalacOptions ++= splainOptions
|
2019-07-11 14:23:00 +03:00
|
|
|
)
|
|
|
|
.settings(
|
|
|
|
(Compile / compile) := (Compile / compile)
|
2020-06-24 20:02:42 +03:00
|
|
|
.dependsOn(Def.task { (Compile / sourceManaged).value.mkdirs })
|
|
|
|
.value
|
2019-07-11 14:23:00 +03:00
|
|
|
)
|
2020-09-30 14:33:57 +03:00
|
|
|
.settings(
|
2020-10-19 11:50:12 +03:00
|
|
|
(Runtime / compile) := (Runtime / compile)
|
2020-10-09 17:19:58 +03:00
|
|
|
.dependsOn(`std-bits` / Compile / packageBin)
|
|
|
|
.value
|
2020-09-30 14:33:57 +03:00
|
|
|
)
|
2019-06-14 18:26:49 +03:00
|
|
|
.settings(
|
2019-07-11 14:23:00 +03:00
|
|
|
logBuffered := false,
|
2019-09-12 17:47:25 +03:00
|
|
|
bench := (test in Benchmark).tag(Exclusive).value,
|
2019-08-08 14:50:29 +03:00
|
|
|
benchOnly := Def.inputTaskDyn {
|
2020-06-24 20:02:42 +03:00
|
|
|
import complete.Parsers.spaceDelimited
|
|
|
|
val name = spaceDelimited("<name>").parsed match {
|
|
|
|
case List(name) => name
|
|
|
|
case _ => throw new IllegalArgumentException("Expected one argument.")
|
|
|
|
}
|
|
|
|
Def.task {
|
|
|
|
(testOnly in Benchmark).toTask(" -- -z " + name).value
|
|
|
|
}
|
|
|
|
}.evaluated,
|
2019-06-14 18:26:49 +03:00
|
|
|
parallelExecution in Benchmark := false
|
|
|
|
)
|
2020-05-15 14:05:44 +03:00
|
|
|
.settings(
|
|
|
|
assemblyJarName in assembly := "runtime.jar",
|
|
|
|
test in assembly := {},
|
|
|
|
assemblyOutputPath in assembly := file("runtime.jar"),
|
|
|
|
assemblyMergeStrategy in assembly := {
|
|
|
|
case PathList("META-INF", file, xs @ _*) if file.endsWith(".DSA") =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case PathList("META-INF", file, xs @ _*) if file.endsWith(".SF") =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case PathList("META-INF", "MANIFEST.MF", xs @ _*) =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case _ => MergeStrategy.first
|
|
|
|
}
|
|
|
|
)
|
2019-09-05 19:01:51 +03:00
|
|
|
.dependsOn(pkg)
|
2020-06-24 20:02:42 +03:00
|
|
|
.dependsOn(`interpreter-dsl`)
|
2019-11-26 16:02:50 +03:00
|
|
|
.dependsOn(syntax.jvm)
|
2020-01-24 21:56:52 +03:00
|
|
|
.dependsOn(graph)
|
2020-04-14 19:00:51 +03:00
|
|
|
.dependsOn(`polyglot-api`)
|
2020-04-20 15:33:51 +03:00
|
|
|
.dependsOn(`text-buffer`)
|
2020-08-27 11:44:27 +03:00
|
|
|
.dependsOn(searcher)
|
2020-10-19 11:50:12 +03:00
|
|
|
.dependsOn(testkit % Test)
|
2019-11-18 16:36:03 +03:00
|
|
|
|
2020-01-31 19:58:35 +03:00
|
|
|
/* Note [Unmanaged Classpath]
|
|
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* As the definition of the core primitives in `core_definition` is achieved
|
|
|
|
* entirely using the graph macros, this means that the IDE experience for those
|
|
|
|
* using these primitives is very poor.
|
|
|
|
*
|
|
|
|
* To get around this, we want to treat the core definition as a .jar dependency
|
|
|
|
* to force the IDE to depend on bytecode for its diagnostics, rather than the
|
|
|
|
* source code (as this means it sees the macros expanded). A standard workflow
|
|
|
|
* with local publishing would not recompile the definition automatically on
|
|
|
|
* changes, so the `unmanagedClasspath` route allows us to get automatic
|
|
|
|
* recompilation but still convince the IDE that it is a .jar dependency.
|
|
|
|
*/
|
|
|
|
|
2020-10-09 17:19:58 +03:00
|
|
|
lazy val `engine-runner` = project
|
2020-01-17 18:35:44 +03:00
|
|
|
.in(file("engine/runner"))
|
2019-11-18 16:36:03 +03:00
|
|
|
.settings(
|
2020-06-16 12:00:47 +03:00
|
|
|
javaOptions ++= {
|
|
|
|
// Note [Classpath Separation]
|
|
|
|
val runtimeClasspath =
|
|
|
|
(runtime / Compile / fullClasspath).value
|
|
|
|
.map(_.data)
|
|
|
|
.mkString(File.pathSeparator)
|
|
|
|
Seq(s"-Dtruffle.class.path.append=$runtimeClasspath")
|
|
|
|
},
|
2020-01-17 18:35:44 +03:00
|
|
|
mainClass in (Compile, run) := Some("org.enso.runner.Main"),
|
2019-11-18 16:36:03 +03:00
|
|
|
mainClass in assembly := (Compile / run / mainClass).value,
|
2020-07-21 11:14:26 +03:00
|
|
|
assemblyJarName in assembly := "runner.jar",
|
2019-11-18 16:36:03 +03:00
|
|
|
test in assembly := {},
|
2020-07-21 11:14:26 +03:00
|
|
|
assemblyOutputPath in assembly := file("runner.jar"),
|
2020-03-06 17:17:46 +03:00
|
|
|
assemblyMergeStrategy in assembly := {
|
|
|
|
case PathList("META-INF", file, xs @ _*) if file.endsWith(".DSA") =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case PathList("META-INF", file, xs @ _*) if file.endsWith(".SF") =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case PathList("META-INF", "MANIFEST.MF", xs @ _*) =>
|
|
|
|
MergeStrategy.discard
|
|
|
|
case "application.conf" =>
|
|
|
|
MergeStrategy.concat
|
|
|
|
case "reference.conf" =>
|
|
|
|
MergeStrategy.concat
|
|
|
|
case x =>
|
|
|
|
MergeStrategy.first
|
|
|
|
},
|
2020-02-25 16:38:48 +03:00
|
|
|
assemblyOption in assembly := (assemblyOption in assembly).value
|
2020-06-24 20:02:42 +03:00
|
|
|
.copy(
|
|
|
|
prependShellScript = Some(
|
|
|
|
defaultUniversalScript(
|
|
|
|
shebang = false,
|
|
|
|
javaOpts = truffleRunOptions ++
|
|
|
|
Seq("-Dtruffle.class.path.append=runtime.jar")
|
|
|
|
)
|
2020-02-25 16:38:48 +03:00
|
|
|
)
|
2020-06-24 20:02:42 +03:00
|
|
|
),
|
2020-03-06 16:40:29 +03:00
|
|
|
commands += WithDebugCommand.withDebug,
|
2019-11-18 16:36:03 +03:00
|
|
|
inConfig(Compile)(truffleRunOptionsSettings),
|
|
|
|
libraryDependencies ++= Seq(
|
2020-09-30 14:33:57 +03:00
|
|
|
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided",
|
|
|
|
"org.graalvm.truffle" % "truffle-api" % graalVersion % "provided",
|
|
|
|
"commons-cli" % "commons-cli" % commonsCliVersion,
|
|
|
|
"com.monovore" %% "decline" % declineVersion,
|
|
|
|
"org.jline" % "jline" % jlineVersion,
|
|
|
|
"org.typelevel" %% "cats-core" % catsVersion
|
2020-06-24 20:02:42 +03:00
|
|
|
),
|
2020-01-17 18:35:44 +03:00
|
|
|
connectInput in run := true
|
2019-11-18 16:36:03 +03:00
|
|
|
)
|
|
|
|
.settings(
|
2020-07-10 13:57:42 +03:00
|
|
|
buildNativeImage := NativeImage
|
2020-08-28 14:03:09 +03:00
|
|
|
.buildNativeImage(
|
|
|
|
"enso",
|
|
|
|
staticOnLinux = false,
|
|
|
|
Seq("-H:IncludeResources=.*Main.enso$")
|
|
|
|
)
|
2020-06-24 20:02:42 +03:00
|
|
|
.value
|
2019-11-18 16:36:03 +03:00
|
|
|
)
|
2020-03-09 16:44:40 +03:00
|
|
|
.settings(
|
2020-06-16 12:00:47 +03:00
|
|
|
assembly := assembly
|
2020-06-24 20:02:42 +03:00
|
|
|
.dependsOn(runtime / assembly)
|
|
|
|
.value
|
2020-03-09 16:44:40 +03:00
|
|
|
)
|
2020-07-10 13:57:42 +03:00
|
|
|
.dependsOn(`version-output`)
|
2019-11-18 16:36:03 +03:00
|
|
|
.dependsOn(pkg)
|
2020-04-14 19:00:51 +03:00
|
|
|
.dependsOn(`language-server`)
|
|
|
|
.dependsOn(`polyglot-api`)
|
2020-10-02 19:17:21 +03:00
|
|
|
.dependsOn(`logging-service`)
|
2020-07-10 13:57:42 +03:00
|
|
|
|
|
|
|
lazy val launcher = project
|
|
|
|
.in(file("engine/launcher"))
|
|
|
|
.configs(Test)
|
|
|
|
.settings(
|
2020-08-10 13:14:39 +03:00
|
|
|
resolvers += Resolver.bintrayRepo("gn0s1s", "releases"),
|
2020-07-10 13:57:42 +03:00
|
|
|
libraryDependencies ++= Seq(
|
2020-10-02 19:17:21 +03:00
|
|
|
"com.typesafe.scala-logging" %% "scala-logging" % scalaLoggingVersion,
|
|
|
|
"org.typelevel" %% "cats-core" % catsVersion,
|
|
|
|
"nl.gn0s1s" %% "bump" % bumpVersion,
|
|
|
|
"org.apache.commons" % "commons-compress" % commonsCompressVersion,
|
|
|
|
"org.scalatest" %% "scalatest" % scalatestVersion % Test,
|
|
|
|
akkaHttp,
|
|
|
|
akkaSLF4J
|
2020-07-10 13:57:42 +03:00
|
|
|
)
|
|
|
|
)
|
|
|
|
.settings(
|
2020-08-10 13:14:39 +03:00
|
|
|
buildNativeImage := NativeImage
|
|
|
|
.buildNativeImage(
|
|
|
|
"enso",
|
|
|
|
staticOnLinux = true,
|
|
|
|
Seq(
|
2020-10-02 19:17:21 +03:00
|
|
|
"-J-Xmx4G",
|
2020-08-10 13:14:39 +03:00
|
|
|
"--enable-all-security-services", // Note [HTTPS in the Launcher]
|
2020-08-28 14:03:09 +03:00
|
|
|
"-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog",
|
2020-10-02 19:17:21 +03:00
|
|
|
"-H:IncludeResources=.*Main.enso$",
|
|
|
|
"--initialize-at-run-time=" +
|
|
|
|
"akka.protobuf.DescriptorProtos," +
|
|
|
|
"com.typesafe.config.impl.ConfigImpl$EnvVariablesHolder," +
|
|
|
|
"com.typesafe.config.impl.ConfigImpl$SystemPropertiesHolder," +
|
|
|
|
"org.enso.loggingservice.WSLoggerManager$" // Note [WSLoggerManager Shutdown Hook]
|
2020-08-10 13:14:39 +03:00
|
|
|
)
|
|
|
|
)
|
|
|
|
.value,
|
|
|
|
test in assembly := {},
|
|
|
|
assemblyOutputPath in assembly := file("launcher.jar")
|
2020-07-10 13:57:42 +03:00
|
|
|
)
|
2020-07-22 20:28:03 +03:00
|
|
|
.settings(
|
|
|
|
(Test / test) := (Test / test)
|
|
|
|
.dependsOn(
|
|
|
|
NativeImage.incrementalNativeImageBuild(
|
|
|
|
buildNativeImage,
|
|
|
|
"enso"
|
|
|
|
)
|
|
|
|
)
|
2020-09-09 16:37:26 +03:00
|
|
|
.dependsOn(
|
|
|
|
LauncherShimsForTest.prepare(rustcVersion = rustVersion)
|
|
|
|
)
|
2020-09-18 18:37:22 +03:00
|
|
|
.value,
|
|
|
|
parallelExecution in Test := false
|
2020-07-22 20:28:03 +03:00
|
|
|
)
|
|
|
|
.dependsOn(cli)
|
2020-07-10 13:57:42 +03:00
|
|
|
.dependsOn(`version-output`)
|
|
|
|
.dependsOn(pkg)
|
2020-10-02 19:17:21 +03:00
|
|
|
.dependsOn(`logging-service`)
|
2020-08-10 13:14:39 +03:00
|
|
|
|
2020-10-09 17:19:58 +03:00
|
|
|
val `std-lib-root` = file("distribution/std-lib/")
|
|
|
|
val `std-lib-polyglot-root` = `std-lib-root` / "Base" / "polyglot" / "java"
|
|
|
|
|
|
|
|
lazy val `std-bits` = project
|
|
|
|
.in(file("std-bits"))
|
|
|
|
.settings(
|
|
|
|
autoScalaLibrary := false,
|
|
|
|
Compile / packageBin / artifactPath :=
|
|
|
|
`std-lib-polyglot-root` / "std-bits.jar",
|
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
"com.ibm.icu" % "icu4j" % icuVersion
|
|
|
|
),
|
|
|
|
Compile / packageBin := Def.task {
|
|
|
|
val result = (Compile / packageBin).value
|
|
|
|
StdBits
|
|
|
|
.copyDependencies(
|
|
|
|
`std-lib-polyglot-root`,
|
|
|
|
"std-bits.jar",
|
|
|
|
ignoreScalaLibrary = true
|
|
|
|
)
|
|
|
|
.value
|
|
|
|
result
|
|
|
|
}.value
|
|
|
|
)
|
|
|
|
|
2020-08-10 13:14:39 +03:00
|
|
|
/* Note [HTTPS in the Launcher]
|
|
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* The launcher uses Apache HttpClient for making web requests. It does not use
|
|
|
|
* Java's stdlib implementation, because there is a bug (not fixed in JDK 11)
|
|
|
|
* (https://bugs.openjdk.java.net/browse/JDK-8231449) in its HTTPS handling that
|
|
|
|
* causes long running requests to freeze forever. However, Apache HttpClient
|
|
|
|
* still needs the stdlib's SSL implementation and it is not included in the
|
|
|
|
* Native Images by default (because of its size). The
|
|
|
|
* `--enable-all-security-services` flag is used to ensure it is available in
|
|
|
|
* the built executable.
|
|
|
|
*/
|
2020-08-28 14:03:09 +03:00
|
|
|
|
|
|
|
/* Note [Native Image Workaround for GraalVM 20.2]
|
|
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* In GraalVM 20.2 the Native Image build of even simple Scala programs has
|
|
|
|
* started to fail on a call to `Statics.releaseFence`. It has been reported as
|
|
|
|
* a bug in the GraalVM repository: https://github.com/oracle/graal/issues/2770
|
|
|
|
*
|
|
|
|
* A proposed workaround for this bug is to substitute the original function
|
|
|
|
* with a different implementation that does not use the problematic
|
|
|
|
* MethodHandle. This is implemented in class
|
|
|
|
* `org.enso.launcher.workarounds.ReplacementStatics` using
|
|
|
|
* `org.enso.launcher.workarounds.Unsafe` which gives access to
|
|
|
|
* `sun.misc.Unsafe` which contains a low-level function corresponding to the
|
|
|
|
* required "release fence".
|
|
|
|
*
|
|
|
|
* To allow for that substitution, the launcher code requires annotations from
|
|
|
|
* the `svm` module and that is why this additional dependency is needed as long
|
|
|
|
* as that workaround is in-place. The dependency is marked as "provided"
|
|
|
|
* because it is included within the native-image build.
|
|
|
|
*/
|
2020-10-02 19:17:21 +03:00
|
|
|
|
|
|
|
/* Note [WSLoggerManager Shutdown Hook]
|
|
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* As the WSLoggerManager registers a shutdown hook when its initialized to
|
|
|
|
* ensure that logs are not lost in case of logging service initialization
|
|
|
|
* failure, it has to be initialized at runtime, as otherwise if the
|
|
|
|
* initialization was done at build time, the shutdown hook would actually also
|
|
|
|
* run at build time and have no effect at runtime.
|
|
|
|
*/
|