Native: disable running cinterop in Gradle process when building K/N

Building Kotlin/Native itself involves running cinterop in the Gradle
daemon process to reduce build time.
But this optimization appears to be incorrect when reusing Gradle daemon
for subsequent builds.

This commit disables the optimization by default, keeping enabling it
possible using `kotlin.native.allowRunningCinteropInProcess=true`
project property.

For more details see ^KT-61300
This commit is contained in:
Svyatoslav Scherbina
2023-08-21 14:15:28 +00:00
committed by Space Team
parent 3d52ba3bca
commit 04d01e381f
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.gradle.plugin.konan package org.jetbrains.kotlin.gradle.plugin.konan
import kotlinBuildProperties
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin.ProjectProperty.KONAN_HOME import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin.ProjectProperty.KONAN_HOME
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
@@ -51,7 +52,7 @@ internal abstract class KonanCliRunner(
final override val mainClass get() = "org.jetbrains.kotlin.cli.utilities.MainKt" final override val mainClass get() = "org.jetbrains.kotlin.cli.utilities.MainKt"
final override val daemonEntryPoint get() = "daemonMain" final override val daemonEntryPoint get() = "daemonMain"
final override val mustRunViaExec get() = false.also { System.setProperty(runFromDaemonPropertyName, "true") } override val mustRunViaExec get() = false.also { System.setProperty(runFromDaemonPropertyName, "true") }
final override val execSystemPropertiesBlacklist: Set<String> final override val execSystemPropertiesBlacklist: Set<String>
get() = super.execSystemPropertiesBlacklist + runFromDaemonPropertyName get() = super.execSystemPropertiesBlacklist + runFromDaemonPropertyName
@@ -136,12 +137,19 @@ internal class CliToolConfig(konanHome: String, target: String) : AbstractToolCo
/** Kotlin/Native C-interop tool runner */ /** Kotlin/Native C-interop tool runner */
internal class KonanCliInteropRunner( internal class KonanCliInteropRunner(
project: Project, private val project: Project,
additionalJvmArgs: List<String> = emptyList(), additionalJvmArgs: List<String> = emptyList(),
konanHome: String = project.konanHome konanHome: String = project.konanHome
) : KonanCliRunner("cinterop", project, additionalJvmArgs, konanHome) { ) : KonanCliRunner("cinterop", project, additionalJvmArgs, konanHome) {
private val projectDir = project.projectDir.toString() private val projectDir = project.projectDir.toString()
override val mustRunViaExec: Boolean
get() = if (project.kotlinBuildProperties.getBoolean("kotlin.native.allowRunningCinteropInProcess")) {
super.mustRunViaExec
} else {
true
}
override fun transformArgs(args: List<String>): List<String> { override fun transformArgs(args: List<String>): List<String> {
return super.transformArgs(args) + listOf("-Xproject-dir", projectDir) return super.transformArgs(args) + listOf("-Xproject-dir", projectDir)
} }