diff --git a/GRADLE_PLUGIN.md b/GRADLE_PLUGIN.md index 8de63c200e7..c00f5db80c8 100644 --- a/GRADLE_PLUGIN.md +++ b/GRADLE_PLUGIN.md @@ -94,8 +94,10 @@ cinterop execution (see the `dumpParameters` task in `samles/csvparser/build.gra // naitve library for linking. nativeLibrary project.file('path/to/native/library/') + // Produce either a 'program' or a 'library' or a bare 'bitcode'. + produce 'library' + noStdLib() // Don't link with stdlib. - noLink() // Don't link, just produce a bitcode file. enableOptimization() // Enable compiler optimizations. // Arguments to be passed to a linker. @@ -128,4 +130,4 @@ cinterop execution (see the `dumpParameters` task in `samles/csvparser/build.gra link // Additional files to link with native stubs. } - } \ No newline at end of file + } diff --git a/buildSrc/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy b/buildSrc/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy index c1bcddd2f1b..df511ad8503 100644 --- a/buildSrc/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy +++ b/buildSrc/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy @@ -308,7 +308,7 @@ class RunInteropKonanTest extends KonanTest { void compileTest(List filesToCompile, String exe) { String interopBc = exe + "-interop.bc" - runCompiler([interopConf.generatedSrcDir.absolutePath], interopBc, ["-nolink"]) + runCompiler([interopConf.generatedSrcDir.absolutePath], interopBc, ['-produce', 'library']) String interopStubsBc = new File(interopConf.nativeLibsDir, interop + "stubs.bc").absolutePath @@ -321,19 +321,6 @@ class RunInteropKonanTest extends KonanTest { } } -@ParallelizableTask -class LinkKonanTestNoStdlib extends KonanTest { - protected String lib - - void compileTest(List filesToCompile, String exe) { - def libDir = project.file(lib).absolutePath - def libBc = "${libDir}.bc" - - runCompiler(lib, libBc, ['-nolink', '-nostdlib']) - runCompiler(filesToCompile, exe, ['-library', libBc]) - } -} - @ParallelizableTask class LinkKonanTest extends KonanTest { protected String lib @@ -342,7 +329,7 @@ class LinkKonanTest extends KonanTest { def libDir = project.file(lib).absolutePath def libBc = "${libDir}.bc" - runCompiler(lib, libBc, ['-nolink'] + ((flags != null) ? flags :[])) + runCompiler(lib, libBc, ['-produce', 'library'] + ((flags != null) ? flags :[])) runCompiler(filesToCompile, exe, ['-library', libBc] + ((flags != null) ? flags :[])) } } diff --git a/cmd/cinterop b/cmd/cinterop index b625998b7c8..9a00d1adc80 100644 --- a/cmd/cinterop +++ b/cmd/cinterop @@ -24,7 +24,7 @@ fi declare -a java_args declare -a interop_args -OUTPUT_FILE_NAME=nativelib.kt.bc +OUTPUT_FILE_NAME=nativelib TARGET=host while [ $# -gt 0 ]; do @@ -96,5 +96,5 @@ $JAVACMD $JAVA_OPTS ${java_args[@]} \ # Stubs may be rather big, so we may need more heap space. XMX_ARG=-J-Xmx3G -$KONAN_HOME/bin/konanc $XMX_ARG "$GENERATED_DIR" -nolink -nativelibrary "$NATIVES_DIR/$CSTUBSNAME.bc" \ +$KONAN_HOME/bin/konanc $XMX_ARG "$GENERATED_DIR" -produce library -nativelibrary "$NATIVES_DIR/$CSTUBSNAME.bc" \ -o "$OUTPUT_FILE_NAME" -target "$TARGET" diff --git a/samples/csvparser/build.gradle b/samples/csvparser/build.gradle index 0e066cf8231..66e9e7dbc5c 100644 --- a/samples/csvparser/build.gradle +++ b/samples/csvparser/build.gradle @@ -32,8 +32,8 @@ void dumpCompilationTask(Task task) { println("libraries : ${task.libraries}") println("nativeLibraries : ${task.nativeLibraries}") println("linkerOpts : ${task.linkerOpts}") + println("produce : ${task.produce}") println("noStdLib : ${task.noStdLib}") - println("noLink : ${task.noLink}") println("noMain : ${task.noMain}") println("enableOptimization : ${task.enableOptimization}") println("enableAssertions : ${task.enableAssertions}") @@ -69,4 +69,4 @@ clean { doLast { delete outputFile } -} \ No newline at end of file +} diff --git a/samples/gitchurn/build.gradle b/samples/gitchurn/build.gradle index bb5d6bc83d7..bce9d5f3cb9 100644 --- a/samples/gitchurn/build.gradle +++ b/samples/gitchurn/build.gradle @@ -16,7 +16,6 @@ konanArtifacts { } } - build { project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanGitChurn.artifactPath).name}" } doLast { @@ -36,8 +35,8 @@ void dumpCompilationTask(Task task) { println("libraries : ${task.libraries}") println("nativeLibraries : ${task.nativeLibraries}") println("linkerOpts : ${task.linkerOpts}") + println("produce : ${task.produce}") println("noStdLib : ${task.noStdLib}") - println("noLink : ${task.noLink}") println("noMain : ${task.noMain}") println("enableOptimization : ${task.enableOptimization}") println("enableAssertions : ${task.enableAssertions}") @@ -73,4 +72,4 @@ clean { doLast { delete outputFile } -} \ No newline at end of file +} diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerConfig.kt index ae649170900..a547a832d0c 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerConfig.kt @@ -39,7 +39,7 @@ import java.io.File * nativeLibrary File("Library") * * noStdLib - * noLink + * produce "library"|"program"|"bitcode" * enableOptimization * * linkerOpts "linker" "args" @@ -61,6 +61,7 @@ import java.io.File * } */ + // TODO: check debug outputs // TODO: Use +=/-= syntax for libraries and inputFiles open class KonanCompilerConfig( @@ -90,9 +91,9 @@ open class KonanCompilerConfig( anotherTask.target?.let { target(it) } anotherTask.languageVersion?.let { languageVersion(it) } anotherTask.apiVersion?.let { apiVersion(it) } + anotherTask.produce?.let { produce(it) } if (anotherTask.noStdLib) noStdLib() - if (anotherTask.noLink) noLink() if (anotherTask.noMain) noMain() if (anotherTask.enableOptimization) enableOptimization() if (anotherTask.enableAssertions) enableAssertions() @@ -174,8 +175,8 @@ open class KonanCompilerConfig( noStdLib = true } - fun noLink() = with(compilationTask) { - noLink = true + fun produce(prod: String) = with(compilationTask) { + produce = prod } fun noMain() = with(compilationTask) { @@ -189,4 +190,4 @@ open class KonanCompilerConfig( fun enableAssertions() = with(compilationTask) { enableAssertions = true } -} \ No newline at end of file +} diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt index 93cb320c7d4..72b178c09b0 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt @@ -48,8 +48,10 @@ open class KonanCompileTask: DefaultTask() { outputDir = project.file("${project.konanCompilerOutputDir}/$artifactName") } + private val artifactSuffix = mapOf("program" to "kexe", "library" to "klib", "bitcode" to "bc") + val artifactPath: String - get() = "${outputDir.absolutePath}/$artifactName.${ if (noLink) "bc" else "kexe" }" + get() = "${outputDir.absolutePath}/$artifactName.${artifactSuffix[produce]}" // Other compilation parameters ------------------------------------------- @@ -58,13 +60,14 @@ open class KonanCompileTask: DefaultTask() { @InputFiles val libraries = mutableSetOf() @InputFiles val nativeLibraries = mutableSetOf() + @Input var produce = "program" + internal set + @Input var linkerOpts = mutableListOf() internal set @Input var noStdLib = false internal set - @Input var noLink = false - internal set @Input var noMain = false internal set @Input var enableOptimization = false @@ -89,6 +92,7 @@ open class KonanCompileTask: DefaultTask() { addFileArgs("-library", libraries) addFileArgs("-nativelibrary", nativeLibraries) + addArg("-produce", produce) addListArg("-linkerArgs", linkerOpts) @@ -97,7 +101,6 @@ open class KonanCompileTask: DefaultTask() { addArgIfNotNull("-api-version", apiVersion) addKey("-nostdlib", noStdLib) - addKey("-nolink", noLink) addKey("-nomain", noMain) addKey("-opt", enableOptimization) addKey("-ea", enableAssertions) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanInteropConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanInteropConfig.kt index 3901ace49e0..2fdfa65698b 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanInteropConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanInteropConfig.kt @@ -60,7 +60,7 @@ open class KonanInteropConfig( internal val compileStubsConfig = KonanCompilerConfig("${name}InteropStubs", project, "compile").apply { compilationTask.dependsOn(generateStubsTask) outputDir("${project.konanInteropCompiledStubsDir}/$name") - noLink() + produce("library") inputFiles(project.fileTree(generateStubsTask.stubsDir).apply { builtBy(generateStubsTask) }) } val compileStubsTask = compileStubsConfig.compilationTask