gradle-plugin: Add root konanCompile task to compile all artifacts

This commit is contained in:
Ilya Matveev
2017-06-19 17:45:53 +07:00
committed by ilmat192
parent 0063d162bf
commit 48c0a4a232
3 changed files with 20 additions and 8 deletions
+9
View File
@@ -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)
}
+1 -1
View File
@@ -65,7 +65,7 @@ konanArtifacts {
}
}
build {
compileKonan {
project.ext {
buildTasks = getTaskDependencies().getDependencies().findAll { task -> task.name.startsWith("compileKonan") }
}
@@ -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") {