@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.gradle.plugin.*
1717import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
1818import org.jetbrains.kotlin.konan.target.HostManager
1919import org.jetbrains.kotlin.library.abi.ExperimentalLibraryAbiReader
20- import org.jetbrains.kotlin.library.abi.LibraryAbiReader
2120import java.io.*
2221import java.util.*
2322
@@ -320,6 +319,7 @@ private inline fun <reified T : Task> Project.task(
320319private const val BANNED_TARGETS_PROPERTY_NAME = " binary.compatibility.validator.klib.targets.disabled.for.testing"
321320private const val KLIB_DUMPS_DIRECTORY = " klib"
322321private const val KLIB_INFERRED_DUMPS_DIRECTORY = " klib-all"
322+ private const val ENABLE_CROSS_COMPILATION_PROPERTY_NAME = " kotlin.native.enableKlibsCrossCompilation"
323323
324324/* *
325325 * KLib ABI dump validation and dump extraction consists of multiple steps that extracts and transforms dumps for klibs.
@@ -544,10 +544,14 @@ private class KlibValidationPipelineBuilder(
544544
545545 private fun Project.targetIsSupported (target : KotlinTarget ): Boolean {
546546 if (bannedTargets().contains(target.targetName)) return false
547- return when (target) {
548- is KotlinNativeTarget -> HostManager ().isEnabled(target.konanTarget)
549- else -> true
547+ if (target !is KotlinNativeTarget || HostManager ().isEnabled(target.konanTarget)) {
548+ return true
550549 }
550+
551+ // Starting from Kotlin 2.1.0, cross compilation could be enabled via property
552+ if (! isKgpVersionAtLeast2_1(getKotlinPluginVersion())) return false
553+
554+ return (project.findProperty(ENABLE_CROSS_COMPILATION_PROPERTY_NAME ) as String? ).toBoolean()
551555 }
552556
553557 // Compilable targets not supported by the host compiler
@@ -770,3 +774,11 @@ private var Configuration.isCanBeDeclaredCompat: Boolean
770774 isCanBeDeclared = value
771775 }
772776 }
777+
778+ private fun isKgpVersionAtLeast2_1 (kgpVersion : String ): Boolean {
779+ val parts = kgpVersion.split(' .' )
780+ if (parts.size < 2 ) return false
781+ val major = parts[0 ].toIntOrNull() ? : return false
782+ val minor = parts[1 ].toIntOrNull() ? : return false
783+ return major > 2 || (major == 2 && minor >= 1 )
784+ }
0 commit comments