From 59b91cf906b1fa6a650b309461762d02096e17ca Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Fri, 3 Nov 2017 17:06:33 +0300 Subject: [PATCH] gradle-plugin: Support custom entry point --- .../gradle/plugin/KonanCompileConfig.kt | 2 ++ .../kotlin/gradle/plugin/KonanSpecs.kt | 2 ++ .../gradle/plugin/tasks/KonanCompileTask.kt | 10 ++++++++- .../test/IncrementalSpecification.groovy | 22 +++++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt index 9099d99fd5d..c92df1ecec7 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt @@ -61,6 +61,8 @@ abstract class KonanCompileConfig(name: String, override fun enableOptimizations(flag: Boolean) = forEach { it.enableOptimizations(flag) } override fun enableAssertions(flag: Boolean) = forEach { it.enableAssertions(flag) } + override fun entryPoint(entryPoint: String) = forEach { it.entryPoint(entryPoint) } + override fun measureTime(flag: Boolean) = forEach { it.measureTime(flag) } } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt index 24c42f7dc19..7147cb37318 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt @@ -62,6 +62,8 @@ interface KonanCompileSpec: KonanBuildingSpec { fun enableOptimizations(flag: Boolean) fun enableAssertions(flag: Boolean) + fun entryPoint(entryPoint: String) + fun measureTime(flag: Boolean) } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt index 1f1e7538617..da5afb0db19 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt @@ -61,6 +61,9 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec { @Input var noMain = false @Input var enableOptimizations = false @Input var enableAssertions = false + + @Optional @Input var entryPoint: String? = null + @Console var measureTime = false val languageVersion : String? @@ -87,6 +90,7 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec { addArgIfNotNull("-target", konanTarget.userName) addArgIfNotNull("-language-version", languageVersion) addArgIfNotNull("-api-version", apiVersion) + addArgIfNotNull("-entry", entryPoint) addKey("-g", enableDebug) addKey("-nostdlib", noStdLib) @@ -146,13 +150,17 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec { } override fun enableOptimizations(flag: Boolean) { - enableOptimizations = true + enableOptimizations = flag } override fun enableAssertions(flag: Boolean) { enableAssertions = flag } + override fun entryPoint(entryPoint: String) { + this.entryPoint = entryPoint + } + override fun measureTime(flag: Boolean) { measureTime = flag } diff --git a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy index 33fc3414b19..1a789d5a1ff 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy +++ b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy @@ -97,6 +97,28 @@ class IncrementalSpecification extends BaseKonanSpecification { "noDefaultLibs" | "true" } + def 'Plugin should support custom entry points and recompile an artifact if it changes'() { + when: + def project = KonanProject.createEmpty(projectDirectory) { KonanProject it -> + it.addCompilerArtifact("main", """ + |fun main(args: Array) { println("default main") } + | + """.stripMargin()) + } + def results = buildTwice(project) { KonanProject it -> + it.srcFiles[0].write(""" + |package foo + | + |fun bar(args: Array) { println("changed main") } + | + """.stripMargin()) + it.addSetting("main", "entryPoint", "'foo.bar'") + } + + then: + onlyRecompilationHappened(*results) + } + def 'srcFiles change for a compilation task should cause only recompilation'() { when: def project = KonanProject.createWithInterop(projectDirectory, ArtifactType.LIBRARY) { KonanProject it ->