@@ -1444,6 +1444,59 @@ object Build {
1444
1444
},
1445
1445
)
1446
1446
1447
+ /* Configuration of the org.scala-lang:scala-library:*.**.**-boostrapped project */
1448
+ lazy val `scala-library-bootstrapped` = project.in(file(" library" ))
1449
+ .settings(
1450
+ name := " scala-library-bootstrapped" ,
1451
+ moduleName := " scala-library" ,
1452
+ version := dottyVersion,
1453
+ versionScheme := Some (" semver-spec" ),
1454
+ crossPaths := false , // org.scala-lang:scala-library doesn't have a crosspath
1455
+ // NOTE: The only difference here is that we drop `-Werror` and semanticDB for now
1456
+ Compile / scalacOptions := Seq (" -deprecation" , " -feature" , " -unchecked" , " -encoding" , " UTF8" , " -language:implicitConversions" ),
1457
+ // Add the source directories for the stdlib (non-boostrapped)
1458
+ Compile / unmanagedSourceDirectories := Seq (baseDirectory.value / " src" ),
1459
+ Compile / unmanagedSourceDirectories += baseDirectory.value / " src-bootstrapped" ,
1460
+ // Only publish compilation artifacts, no test artifacts
1461
+ Compile / publishArtifact := true ,
1462
+ Test / publishArtifact := false ,
1463
+ // Do not allow to publish this project for now
1464
+ publish / skip := true ,
1465
+ // Project specific target folder. sbt doesn't like having two projects using the same target folder
1466
+ target := target.value / " scala-library-bootstrapped" ,
1467
+ // Configure the nonbootstrapped compiler
1468
+ managedScalaInstance := false ,
1469
+ scalaInstance := {
1470
+ val externalLibraryDeps = (`scala3-library` / Compile / externalDependencyClasspath).value.map(_.data).toSet
1471
+ val externalCompilerDeps = (`scala3-compiler` / Compile / externalDependencyClasspath).value.map(_.data).toSet
1472
+
1473
+ // IMPORTANT: We need to use actual jars to form the ScalaInstance and not
1474
+ // just directories containing classfiles because sbt maintains a cache of
1475
+ // compiler instances. This cache is invalidated based on timestamps
1476
+ // however this is only implemented on jars, directories are never
1477
+ // invalidated.
1478
+ val tastyCore = (`tasty-core` / Compile / packageBin).value
1479
+ val scala3Library = (`scala3-library` / Compile / packageBin).value
1480
+ val scala3Interfaces = (`scala3-interfaces` / Compile / packageBin).value
1481
+ val scala3Compiler = (`scala3-compiler` / Compile / packageBin).value
1482
+
1483
+ val libraryJars = Array (scala3Library) ++ externalLibraryDeps
1484
+ val compilerJars = Seq (tastyCore, scala3Interfaces, scala3Compiler) ++ (externalCompilerDeps -- externalLibraryDeps)
1485
+
1486
+ Defaults .makeScalaInstance(
1487
+ scalaVersion.value,
1488
+ libraryJars = libraryJars,
1489
+ allCompilerJars = compilerJars,
1490
+ allDocJars = Seq .empty,
1491
+ state.value,
1492
+ scalaInstanceTopLoader.value
1493
+ )
1494
+ },
1495
+ scalaCompilerBridgeBinaryJar := {
1496
+ Some ((`scala3-sbt-bridge` / Compile / packageBin).value)
1497
+ },
1498
+ )
1499
+
1447
1500
def dottyLibrary (implicit mode : Mode ): Project = mode match {
1448
1501
case NonBootstrapped => `scala3-library`
1449
1502
case Bootstrapped => `scala3-library-bootstrapped`
0 commit comments