diff --git a/samples/concurrent/build.gradle b/samples/concurrent/build.gradle index ae890075866..d2bc9c03daa 100644 --- a/samples/concurrent/build.gradle +++ b/samples/concurrent/build.gradle @@ -11,4 +11,13 @@ konanArtifacts { useInterop "MessageChannel" nativeLibrary "${project.buildDir.canonicalPath}/clang/MessageChannel.bc" } +} + +task compileCpp(type: Exec) { + workingDir project.getProjectDir() + commandLine './buildCpp.sh' +} + +genMessageChannelInteropStubs { + dependsOn(compileCpp) } \ No newline at end of file diff --git a/samples/tetris/build.gradle b/samples/tetris/build.gradle index 71087fe99b7..6892577057b 100644 --- a/samples/tetris/build.gradle +++ b/samples/tetris/build.gradle @@ -65,7 +65,7 @@ konanArtifacts { } } -build { +compileKonan { project.ext { buildTasks = getTaskDependencies().getDependencies().findAll { task -> task.name.startsWith("compileKonan") } } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt index e8bfd1cb5b8..950cf0d7594 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt @@ -197,13 +197,13 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR * Looks for task with given name in the given project. * If such task isn't found, will create it. Returns created/found task. */ - private fun getTask(project: ProjectInternal, name: String): Task = project.getTasksByName(name, false).single() + private fun ProjectInternal.getTask(name: String): Task = getTasksByName(name, false).single() - private fun getOrCreateTask(project: ProjectInternal, name: String): Task { - var tasks = project.getTasksByName(name, false) + private fun ProjectInternal.getOrCreateTask(name: String): Task { + var tasks = getTasksByName(name, false) assert(tasks.size <= 1) return if (tasks.isEmpty()) { - project.tasks.create(name, DefaultTask::class.java) + this.tasks.create(name, DefaultTask::class.java) } else { tasks.single() } @@ -223,12 +223,15 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR if (!project.extensions.extraProperties.has(KonanPlugin.KONAN_BUILD_TARGETS)) { project.extensions.extraProperties.set(KonanPlugin.KONAN_BUILD_TARGETS, project.host) } - getTask(project, "build").apply { + val compileKonanTask = project.getOrCreateTask("compileKonan").apply { dependsOn(project.supportedCompileTasks) } + project.getTask("build").apply { + dependsOn(compileKonanTask) + } - getOrCreateTask(project, "run").apply { - dependsOn(getTask(project, "build")) + project.getOrCreateTask("run").apply { + dependsOn(project.getTask("build")) doLast { for (task in project.tasks.withType(KonanCompileTask::class.java).matching { !it.isCrossCompile}) { if (task?.produce == "program") {