diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2017-02-16 18:58:58 +0100 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2017-04-13 19:41:44 +0200 |
commit | 476778612e71379cf648693f7d02039301fb5607 (patch) | |
tree | a6d27763253f9de38ba03e155450039c9b6cead5 /compiler/test/dotty/tools/dotc | |
parent | 0fe56ea73e6775a315f54772dc6bfb40815c7c98 (diff) | |
download | dotty-476778612e71379cf648693f7d02039301fb5607.tar.gz dotty-476778612e71379cf648693f7d02039301fb5607.tar.bz2 dotty-476778612e71379cf648693f7d02039301fb5607.zip |
Fix #2184: Hyper Bootstrap! Integrate the backend as a git submodule
The backend lives in the scalac fork at
https://github.com/lampepfl/scala/tree/sharing-backend. Before this
commit, the scala-compiler built from this fork was a dependency of
Scala just to get this backend. This made it much more cumbersome to
test changes to the backend and also forced us to depend on Scala 2.11.5
since that is the version of scalac that the forked backend is based on.
This commit changes this by adding a git submodule in the
`scala-backend` directory that points to the scalac fork. We do not
compile the whole submodule, instead we add the subset of files we need
to the dotty-compiler project in the sbt build. See backend.md for more
information (online at
http://dotty.epfl.ch/docs/contributing/backend.html) once this commit is
merged.
The most important thing to note is that whenever you clone dotty you
should do `git clone --recursive` to also clone the submodule. If you
already have a cloned dotty you'll need to do:
git submodule update --init
You will need to repeat this command anytime you update dotty and the
backend has been updated, otherwise the content of `scala-backend` will
be stale.
Diffstat (limited to 'compiler/test/dotty/tools/dotc')
-rw-r--r-- | compiler/test/dotty/tools/dotc/CompilationTests.scala | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/compiler/test/dotty/tools/dotc/CompilationTests.scala b/compiler/test/dotty/tools/dotc/CompilationTests.scala index cf9b200d4..504bdd2e0 100644 --- a/compiler/test/dotty/tools/dotc/CompilationTests.scala +++ b/compiler/test/dotty/tools/dotc/CompilationTests.scala @@ -4,11 +4,15 @@ package dotc import org.junit.{ Test, BeforeClass, AfterClass } +import java.nio.file._ +import java.util.stream.{ Stream => JStream } +import scala.collection.JavaConverters._ import scala.util.matching.Regex import scala.concurrent.duration._ import vulpix.{ ParallelTesting, SummaryReport, SummaryReporting, TestConfiguration } + class CompilationTests extends ParallelTesting { import TestConfiguration._ import CompilationTests._ @@ -219,7 +223,7 @@ class CompilationTests extends ParallelTesting { // compile with bootstrapped library on cp: defaultOutputDir + "lib/src/:" + // as well as bootstrapped compiler: - defaultOutputDir + "dotty1/dotty/:" + + defaultOutputDir + "dotty1/dotty1/:" + Jars.dottyInterfaces ) @@ -227,8 +231,36 @@ class CompilationTests extends ParallelTesting { compileDir("../library/src", allowDeepSubtypes.and("-Ycheck-reentrant", "-strict", "-priorityclasspath", defaultOutputDir)) - def dotty1 = - compileDir("../compiler/src/dotty", opt) + def sources(paths: JStream[Path], excludedFiles: List[String] = Nil): List[String] = + paths.iterator().asScala + .filter(path => + (path.toString.endsWith(".scala") || path.toString.endsWith(".java")) + && !excludedFiles.contains(path.getFileName.toString)) + .map(_.toString).toList + + val compilerDir = Paths.get("../compiler/src") + val compilerSources = sources(Files.walk(compilerDir)) + + val backendDir = Paths.get("../scala-backend/src/compiler/scala/tools/nsc/backend") + val backendJvmDir = Paths.get("../scala-backend/src/compiler/scala/tools/nsc/backend/jvm") + + // NOTE: Keep these exclusions synchronized with the ones in the sbt build (Build.scala) + val backendExcluded = + List("JavaPlatform.scala", "Platform.scala", "ScalaPrimitives.scala") + val backendJvmExcluded = + List("BCodeICodeCommon.scala", "GenASM.scala", "GenBCode.scala", "ScalacBackendInterface.scala") + + val backendSources = + sources(Files.list(backendDir), excludedFiles = backendExcluded) + val backendJvmSources = + sources(Files.list(backendJvmDir), excludedFiles = backendJvmExcluded) + + def dotty1 = { + compileList( + "dotty1", + compilerSources ++ backendSources ++ backendJvmSources, + opt) + } def dotty2 = compileShallowFilesInDir("../compiler/src/dotty", opt) @@ -247,7 +279,9 @@ class CompilationTests extends ParallelTesting { compileShallowFilesInDir("../compiler/src/dotty/tools/dotc/rewrite", opt) + compileShallowFilesInDir("../compiler/src/dotty/tools/dotc/transform", opt) + compileShallowFilesInDir("../compiler/src/dotty/tools/dotc/typer", opt) + - compileShallowFilesInDir("../compiler/src/dotty/tools/dotc/util", opt) + compileShallowFilesInDir("../compiler/src/dotty/tools/dotc/util", opt) + + compileList("shallow-backend", backendSources, opt) + + compileList("shallow-backend-jvm", backendJvmSources, opt) } :: Nil }.map(_.checkCompile()).foreach(_.delete()) } |