gradle-plugin: Fix incremental build
The patch makes the plugin to set default input directories (src/main/kotlin and src/main/c_interop) at task construction rather than setting them during compiler command line building. It allows gradle to perform up-to-date checks correctly.
This commit is contained in:
+1
-5
@@ -160,11 +160,7 @@ open class KonanCompileTask: KonanTargetableTask() {
|
|||||||
addKey("-opt", enableOptimization)
|
addKey("-opt", enableOptimization)
|
||||||
addKey("-ea", enableAssertions)
|
addKey("-ea", enableAssertions)
|
||||||
|
|
||||||
(if (inputFiles.isEmpty()) {
|
inputFiles.flatMap { it.files }.filter { it.name.endsWith(".kt") }.mapTo(this) { it.canonicalPath }
|
||||||
project.fileTree("${project.projectDir.canonicalPath}/src/main/kotlin")
|
|
||||||
} else {
|
|
||||||
inputFiles.flatMap { it.files }
|
|
||||||
}).filter { it.name.endsWith(".kt") }.mapTo(this) { it.canonicalPath }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
|
|||||||
+3
-7
@@ -58,8 +58,6 @@ open class KonanInteropTask: KonanTargetableTask() {
|
|||||||
get() = listOf("-Dkonan.home=${project.konanHome}", "-Djava.library.path=${project.konanHome}/konan/nativelib")
|
get() = listOf("-Dkonan.home=${project.konanHome}", "-Djava.library.path=${project.konanHome}/konan/nativelib")
|
||||||
internal val INTEROP_CLASSPATH: String
|
internal val INTEROP_CLASSPATH: String
|
||||||
get() = "${project.konanHome}/konan/lib/"
|
get() = "${project.konanHome}/konan/lib/"
|
||||||
internal val C_INTEROP_DIR_PATH: String
|
|
||||||
get() = "${project.projectDir}/src/main/c_interop"
|
|
||||||
|
|
||||||
// Output directories -----------------------------------------------------
|
// Output directories -----------------------------------------------------
|
||||||
|
|
||||||
@@ -124,9 +122,7 @@ open class KonanInteropTask: KonanTargetableTask() {
|
|||||||
manifest ?.let {addArg("-manifest", it)}
|
manifest ?.let {addArg("-manifest", it)}
|
||||||
|
|
||||||
addArgIfNotNull("-target", target)
|
addArgIfNotNull("-target", target)
|
||||||
val defFilePath = defFile?.canonicalPath ?:
|
addArgIfNotNull("-def", defFile?.canonicalPath)
|
||||||
project.file("$C_INTEROP_DIR_PATH/$libName.def").takeIf { it.exists() }?.canonicalPath
|
|
||||||
addArgIfNotNull("-def", defFilePath)
|
|
||||||
addArg("-pkg", pkg ?: libName)
|
addArg("-pkg", pkg ?: libName)
|
||||||
addArgIfNotNull("-linker", linker)
|
addArgIfNotNull("-linker", linker)
|
||||||
|
|
||||||
@@ -159,8 +155,8 @@ open class KonanInteropConfig(
|
|||||||
// Task to process the library and generate stubs
|
// Task to process the library and generate stubs
|
||||||
val generateStubsTask: KonanInteropTask = project.tasks.create(
|
val generateStubsTask: KonanInteropTask = project.tasks.create(
|
||||||
"gen${name.capitalize()}InteropStubs",
|
"gen${name.capitalize()}InteropStubs",
|
||||||
KonanInteropTask::class.java
|
KonanInteropTask::class.java) {
|
||||||
) { it.init(name)
|
it.init(name)
|
||||||
it.manifest = "${it.stubsDir.path}/manifest.properties"
|
it.manifest = "${it.stubsDir.path}/manifest.properties"
|
||||||
}
|
}
|
||||||
// Config and task to compile *.kt stubs into a library
|
// Config and task to compile *.kt stubs into a library
|
||||||
|
|||||||
+14
-2
@@ -48,6 +48,10 @@ internal val Project.konanInteropStubsOutputDir get() = "${konanBuildRoot}/int
|
|||||||
internal val Project.konanInteropCompiledStubsDir get() = "${konanBuildRoot}/interopCompiledStubs"
|
internal val Project.konanInteropCompiledStubsDir get() = "${konanBuildRoot}/interopCompiledStubs"
|
||||||
internal val Project.konanInteropLibsOutputDir get() = "${konanBuildRoot}/nativelibs"
|
internal val Project.konanInteropLibsOutputDir get() = "${konanBuildRoot}/nativelibs"
|
||||||
|
|
||||||
|
internal val Project.konanDefaultSrcDir get() = file("${projectDir.canonicalPath}/src/main/kotlin")
|
||||||
|
internal fun Project.konanDefaultDefFile(interopName: String)
|
||||||
|
= file("${projectDir.canonicalPath}/src/main/c_interop/$interopName.def")
|
||||||
|
|
||||||
internal val Project.konanArtifactsContainer: KonanArtifactsContainer
|
internal val Project.konanArtifactsContainer: KonanArtifactsContainer
|
||||||
get() = extensions.getByName(KonanPlugin.COMPILER_EXTENSION_NAME) as KonanArtifactsContainer
|
get() = extensions.getByName(KonanPlugin.COMPILER_EXTENSION_NAME) as KonanArtifactsContainer
|
||||||
internal val Project.konanInteropContainer: KonanInteropContainer
|
internal val Project.konanInteropContainer: KonanInteropContainer
|
||||||
@@ -90,7 +94,11 @@ class KonanArtifactsContainer(val project: ProjectInternal): AbstractNamedDomain
|
|||||||
project.gradle.services.get(Instantiator::class.java)) {
|
project.gradle.services.get(Instantiator::class.java)) {
|
||||||
|
|
||||||
override fun doCreate(name: String): KonanCompileConfig =
|
override fun doCreate(name: String): KonanCompileConfig =
|
||||||
KonanCompileConfig(name, project)
|
KonanCompileConfig(name, project).apply {
|
||||||
|
project.konanDefaultSrcDir?.takeIf { it.exists() }?.let {
|
||||||
|
inputDir(it.canonicalPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class KonanInteropContainer(val project: ProjectInternal): AbstractNamedDomainObjectContainer<KonanInteropConfig>(
|
class KonanInteropContainer(val project: ProjectInternal): AbstractNamedDomainObjectContainer<KonanInteropConfig>(
|
||||||
@@ -98,7 +106,11 @@ class KonanInteropContainer(val project: ProjectInternal): AbstractNamedDomainOb
|
|||||||
project.gradle.services.get(Instantiator::class.java)) {
|
project.gradle.services.get(Instantiator::class.java)) {
|
||||||
|
|
||||||
override fun doCreate(name: String): KonanInteropConfig =
|
override fun doCreate(name: String): KonanInteropConfig =
|
||||||
KonanInteropConfig(name, project)
|
KonanInteropConfig(name, project).apply {
|
||||||
|
project.konanDefaultDefFile(name).takeIf { it.exists() }?.let {
|
||||||
|
defFile(it.canonicalFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Useful extensions and functions ---------------------------------------
|
// Useful extensions and functions ---------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user