Create module 'builtins', move 'runtime' -> 'runtime.jvm'
'builtins' will be used for platform-independent core built-in definitions, 'runtime.jvm' for things that should be present at runtime in order for Kotlin code to execute correctly on JVM ProgressionUtil goes to 'builtins' right now because progression iterators depend on it, but should be rewritten to Kotlin later
This commit is contained in:
Generated
+2
-1
@@ -7,6 +7,7 @@
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/backend/backend.iml" filepath="$PROJECT_DIR$/compiler/backend/backend.iml" group="compiler/java" />
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/backend-common/backend-common.iml" filepath="$PROJECT_DIR$/compiler/backend-common/backend-common.iml" group="compiler" />
|
||||
<module fileurl="file://$PROJECT_DIR$/build-tools/build-tools.iml" filepath="$PROJECT_DIR$/build-tools/build-tools.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/core/builtins/builtins.iml" filepath="$PROJECT_DIR$/core/builtins/builtins.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/builtins-serializer/builtins-serializer.iml" filepath="$PROJECT_DIR$/compiler/builtins-serializer/builtins-serializer.iml" group="compiler/cli" />
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/cli/cli.iml" filepath="$PROJECT_DIR$/compiler/cli/cli.iml" group="compiler/cli" />
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/cli/cli-common/cli-common.iml" filepath="$PROJECT_DIR$/compiler/cli/cli-common/cli-common.iml" group="compiler/cli" />
|
||||
@@ -32,7 +33,7 @@
|
||||
<module fileurl="file://$PROJECT_DIR$/js/js.translator/js.translator.iml" filepath="$PROJECT_DIR$/js/js.translator/js.translator.iml" group="compiler/js" />
|
||||
<module fileurl="file://$PROJECT_DIR$/jps-plugin/kannotator-jps-plugin-test/kannotator-jps-plugin-test.iml" filepath="$PROJECT_DIR$/jps-plugin/kannotator-jps-plugin-test/kannotator-jps-plugin-test.iml" group="ide/jps" />
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/preloader/preloader.iml" filepath="$PROJECT_DIR$/compiler/preloader/preloader.iml" group="compiler/cli" />
|
||||
<module fileurl="file://$PROJECT_DIR$/runtime/runtime.iml" filepath="$PROJECT_DIR$/runtime/runtime.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/core/runtime.jvm/runtime.jvm.iml" filepath="$PROJECT_DIR$/core/runtime.jvm/runtime.jvm.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/frontend/serialization/serialization.iml" filepath="$PROJECT_DIR$/compiler/frontend/serialization/serialization.iml" group="compiler" />
|
||||
<module fileurl="file://$PROJECT_DIR$/core/serialization.java/serialization.java.iml" filepath="$PROJECT_DIR$/core/serialization.java/serialization.java.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/compiler/util/util.iml" filepath="$PROJECT_DIR$/compiler/util/util.iml" />
|
||||
|
||||
@@ -516,8 +516,8 @@
|
||||
<cleandir dir="${output}/classes/runtime"/>
|
||||
<javac2 destdir="${output}/classes/runtime" debug="true" debuglevel="lines,vars,source" includeAntRuntime="false" source="${java.target}" target="${java.target}">
|
||||
<withKotlin/>
|
||||
<src path="${basedir}/runtime/src"/>
|
||||
<src path="${basedir}/runtime/kt"/>
|
||||
<src path="${basedir}/core/builtins/src"/>
|
||||
<src path="${basedir}/core/runtime.jvm/src"/>
|
||||
</javac2>
|
||||
|
||||
<cleandir dir="${output}/classes/stdlib"/>
|
||||
@@ -552,7 +552,9 @@
|
||||
|
||||
<target name="runtime_sources">
|
||||
<jar destfile="${kotlin-home}/lib/kotlin-runtime-sources.jar">
|
||||
<fileset dir="${basedir}/runtime/src" includes="**/*"/>
|
||||
<fileset dir="${basedir}/core/builtins/native" includes="**/*"/>
|
||||
<fileset dir="${basedir}/core/builtins/src" includes="**/*"/>
|
||||
<fileset dir="${basedir}/core/runtime.jvm/src" includes="**/*"/>
|
||||
<fileset dir="${basedir}/libraries/stdlib/src" includes="**/*"/>
|
||||
<zipfileset file="${kotlin-home}/build.txt" prefix="META-INF"/>
|
||||
|
||||
|
||||
@@ -103,7 +103,9 @@ public class CodegenTestUtil {
|
||||
try {
|
||||
File javaClassesTempDirectory = new File(FileUtil.getTempDirectory(), "java-classes");
|
||||
JetTestUtils.mkdirs(javaClassesTempDirectory);
|
||||
String classPath = "out/production/runtime" + File.pathSeparator + JetTestUtils.getAnnotationsJar().getPath();
|
||||
String classPath = "out/production/builtins" + File.pathSeparator +
|
||||
"out/production/runtime.jvm" + File.pathSeparator +
|
||||
JetTestUtils.getAnnotationsJar().getPath();
|
||||
List<String> options = Arrays.asList(
|
||||
"-classpath", classPath,
|
||||
"-d", javaClassesTempDirectory.getPath()
|
||||
|
||||
+12
-55
@@ -17,25 +17,17 @@
|
||||
package org.jetbrains.jet.codegen.forTestCompile;
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.util.containers.Stack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.cli.common.ExitCode;
|
||||
import org.jetbrains.jet.cli.jvm.K2JVMCompiler;
|
||||
import org.jetbrains.jet.utils.Profiler;
|
||||
import org.junit.Assert;
|
||||
|
||||
import javax.tools.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Compile stdlib.jar that can be used in tests
|
||||
* Compile kotlin-runtime.jar that can be used in tests
|
||||
*
|
||||
* @see #runtimeJarForTests
|
||||
*/
|
||||
@@ -53,67 +45,32 @@ public class ForTestCompileRuntime {
|
||||
|
||||
@Override
|
||||
protected void doCompile(@NotNull File classesDir) throws Exception {
|
||||
compileJavaPartOfBuiltins(classesDir);
|
||||
compileJvmBuiltins(classesDir);
|
||||
compileStdlib(classesDir);
|
||||
}
|
||||
}
|
||||
|
||||
private static void compileStdlib(File destdir) throws IOException {
|
||||
private static void compileStdlib(@NotNull File destDir) throws IOException {
|
||||
ExitCode exitCode = new K2JVMCompiler().exec(System.out,
|
||||
"-output", destdir.getPath(),
|
||||
"-output", destDir.getPath(),
|
||||
"-src", "./libraries/stdlib/src",
|
||||
"-noStdlib",
|
||||
"-noJdkAnnotations",
|
||||
"-suppress", "warnings",
|
||||
"-annotations", "./jdk-annotations",
|
||||
"-classpath", "out/production/runtime");
|
||||
"-classpath", "out/production/builtins" + File.pathSeparator + "out/production/runtime.jvm");
|
||||
if (exitCode != ExitCode.OK) {
|
||||
throw new IllegalStateException("stdlib for test compilation failed: " + exitCode);
|
||||
}
|
||||
}
|
||||
|
||||
private static List<File> javaFilesInDir(File dir) {
|
||||
List<File> r = new ArrayList<File>();
|
||||
Stack<File> stack = new Stack<File>();
|
||||
stack.push(dir);
|
||||
while (!stack.empty()) {
|
||||
File file = stack.pop();
|
||||
if (file.isDirectory()) {
|
||||
stack.addAll(Arrays.asList(file.listFiles()));
|
||||
}
|
||||
else if (file.getName().endsWith(".java")) {
|
||||
r.add(file);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
|
||||
private static void compileJvmBuiltins(@NotNull File destDir) throws IOException {
|
||||
// Sources of stdlib and built-ins may diverge this way, because the former are compiled with the new compiler and the latter are
|
||||
// just copied from the sources built by bootstrap plugin (which has an old compiler)
|
||||
// TODO: compile Kotlin+Java built-in sources properly here, maybe reusing KotlinCompilerAdapter ant task
|
||||
FileUtil.copyDir(new File("out/production/builtins"), destDir);
|
||||
FileUtil.copyDir(new File("out/production/runtime.jvm"), destDir);
|
||||
}
|
||||
|
||||
private static void compileJavaPartOfBuiltins(File destdir) throws IOException {
|
||||
if (true) {
|
||||
FileUtil.copyDir(new File("out/production/runtime"), destdir);
|
||||
}
|
||||
else {
|
||||
doCompileJavaPartOfBuiltins(destdir);
|
||||
}
|
||||
}
|
||||
|
||||
private static void doCompileJavaPartOfBuiltins(File destdir) throws IOException {JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
|
||||
|
||||
StandardJavaFileManager fileManager = javaCompiler.getStandardFileManager(null, Locale.ENGLISH, Charset.forName("utf-8"));
|
||||
try {
|
||||
Iterable<? extends JavaFileObject> javaFileObjectsFromFiles = fileManager.getJavaFileObjectsFromFiles(javaFilesInDir(new File("runtime/src")));
|
||||
List<String> options = Arrays.asList(
|
||||
"-d", destdir.getPath()
|
||||
);
|
||||
JavaCompiler.CompilationTask task = javaCompiler.getTask(null, fileManager, null, options, null, javaFileObjectsFromFiles);
|
||||
|
||||
Assert.assertTrue(task.call());
|
||||
}
|
||||
finally {
|
||||
fileManager.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public static File runtimeJarForTests() {
|
||||
|
||||
@@ -110,8 +110,9 @@ public final class LoadDescriptorUtil {
|
||||
}
|
||||
|
||||
private static void compileJavaWithAnnotationsJar(@NotNull Collection<File> javaFiles, @NotNull File outDir) throws IOException {
|
||||
String classPath = "out/production/runtime" +
|
||||
File.pathSeparator + JetTestUtils.getAnnotationsJar().getPath();
|
||||
String classPath = "out/production/builtins" + File.pathSeparator +
|
||||
"out/production/runtime.jvm" + File.pathSeparator +
|
||||
JetTestUtils.getAnnotationsJar().getPath();
|
||||
JetTestUtils.compileJavaFiles(javaFiles, Arrays.asList(
|
||||
"-classpath", classPath,
|
||||
"-sourcepath", "compiler/tests", // for @ExpectLoadError annotation
|
||||
|
||||
@@ -48,7 +48,8 @@ public class ReplInterpreterTest {
|
||||
private void testFile(@NotNull String relativePath) {
|
||||
CompilerConfiguration configuration =
|
||||
JetTestUtils.compilerConfigurationForTests(ConfigurationKind.JDK_ONLY, TestJdkKind.FULL_JDK);
|
||||
configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File("out/production/runtime"));
|
||||
configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File("out/production/builtins"));
|
||||
configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File("out/production/runtime.jvm"));
|
||||
ReplInterpreter repl = new ReplInterpreter(disposable, configuration);
|
||||
|
||||
ReplSessionTestFile file = ReplSessionTestFile.load(new File("compiler/testData/repl/" + relativePath));
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/kt" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="builtins" />
|
||||
</component>
|
||||
</module>
|
||||
|
||||
@@ -50,20 +50,32 @@ fun floatToIntBits(v: String) = "java.lang.Float.floatToIntBits($v)"
|
||||
fun doubleToLongBits(v: String) = "java.lang.Double.doubleToLongBits($v)"
|
||||
|
||||
|
||||
val OUTPUT_DIR: File by Delegates.lazy {
|
||||
val result = File("runtime/kt/")
|
||||
|
||||
fun existingDirectory(path: String): File {
|
||||
val result = File(path)
|
||||
if (!result.exists()) {
|
||||
throw IllegalStateException("Output dir does not exist: ${result.getAbsolutePath()}")
|
||||
}
|
||||
result
|
||||
return result
|
||||
}
|
||||
|
||||
fun generateRuntimeFile(name: String, generate: (PrintWriter) -> Unit) {
|
||||
val file = File(OUTPUT_DIR, name)
|
||||
val BUILT_INS_DIR: File by Delegates.lazy { existingDirectory("core/builtins/src/jet/") }
|
||||
val RUNTIME_JVM_DIR: File by Delegates.lazy { existingDirectory("core/runtime.jvm/src/jet/") }
|
||||
|
||||
fun generateFile(dir: File, name: String, generate: (PrintWriter) -> Unit) {
|
||||
val file = File(dir, name)
|
||||
println("generating $file")
|
||||
PrintWriter(file) use generate
|
||||
}
|
||||
|
||||
fun generateBuiltInFile(name: String, generate: (PrintWriter) -> Unit) {
|
||||
generateFile(BUILT_INS_DIR, name, generate)
|
||||
}
|
||||
|
||||
fun generateRuntimeJvmFile(name: String, generate: (PrintWriter) -> Unit) {
|
||||
generateFile(BUILT_INS_DIR, name, generate)
|
||||
}
|
||||
|
||||
fun generatedBy(out: PrintWriter, generator: String) {
|
||||
out.println("// Generated by $generator")
|
||||
out.println()
|
||||
|
||||
@@ -122,11 +122,11 @@ class GenerateFunctions(val out: PrintWriter, val kind: FunctionKind) {
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
for (kind in FunctionKind.values()) {
|
||||
generateRuntimeFile(kind.getFileName()) {
|
||||
generateBuiltInFile(kind.getFileName()) {
|
||||
GenerateFunctions(it, kind).generateFunctionClasses()
|
||||
}
|
||||
|
||||
generateRuntimeFile(kind.getImplFileName()) {
|
||||
generateRuntimeJvmFile(kind.getImplFileName()) {
|
||||
GenerateFunctions(it, kind).generateFunctionImplClasses()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class GenerateIterators(val out: PrintWriter) {
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
generateRuntimeFile("Iterators.kt") {
|
||||
generateBuiltInFile("Iterators.kt") {
|
||||
GenerateIterators(it).generate()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ class GenerateProgressions(val out: PrintWriter) {
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
generateRuntimeFile("Progressions.kt") {
|
||||
generateBuiltInFile("Progressions.kt") {
|
||||
GenerateProgressions(it).generate()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ class GenerateRanges(val out: PrintWriter) {
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
generateRuntimeFile("Ranges.kt") {
|
||||
generateBuiltInFile("Ranges.kt") {
|
||||
GenerateRanges(it).generate()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
<target>
|
||||
<delete dir="${basedir}/target/copied-sources" failonerror="false" />
|
||||
<copy todir="${basedir}/target/copied-sources">
|
||||
<fileset dir="${basedir}/../../../runtime/src"/>
|
||||
<fileset dir="${basedir}/../../../runtime/kt"/>
|
||||
<fileset dir="${basedir}/../../../core/builtins/src"/>
|
||||
<fileset dir="${basedir}/../../../core/runtime.jvm/src"/>
|
||||
</copy>
|
||||
</target>
|
||||
</configuration>
|
||||
|
||||
Reference in New Issue
Block a user