wip - check for ir providers
diff --git a/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/loadNativeKlibs.kt b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/loadNativeKlibs.kt
index f1c27f1..5d8a914 100644
--- a/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/loadNativeKlibs.kt
+++ b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/loadNativeKlibs.kt
@@ -10,6 +10,7 @@
import org.jetbrains.kotlin.backend.common.loadFriendLibraries
import org.jetbrains.kotlin.backend.common.reportLoadingProblemsIfAny
import org.jetbrains.kotlin.config.CompilerConfiguration
+import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.loader.KlibLoader
@@ -36,7 +37,7 @@
): LoadedKlibs {
val result = KlibLoader {
libraryPaths(libraryPaths)
- platformChecker(KlibPlatformChecker.Native(nativeTarget.name))
+ platformChecker(KlibPlatformChecker.Native(nativeTarget.name, knownIrProviders = setOf(KLIB_INTEROP_IR_PROVIDER_IDENTIFIER)))
maxPermittedAbiVersion(KotlinAbiVersion.CURRENT)
}.load()
.apply { reportLoadingProblemsIfAny(configuration, allAsErrors = true) }
diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/loader/KlibPlatformChecker.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/loader/KlibPlatformChecker.kt
index b0ef606..f0c7dc0 100644
--- a/compiler/util-klib/src/org/jetbrains/kotlin/library/loader/KlibPlatformChecker.kt
+++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/loader/KlibPlatformChecker.kt
@@ -8,6 +8,7 @@
import org.jetbrains.kotlin.library.BaseKotlinLibrary
import org.jetbrains.kotlin.library.builtInsPlatform
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
+import org.jetbrains.kotlin.library.irProviderName
import org.jetbrains.kotlin.library.loader.KlibLoaderResult.ProblemCase.PlatformCheckMismatch
import org.jetbrains.kotlin.library.nativeTargets
import org.jetbrains.kotlin.library.wasmTargets
@@ -19,7 +20,10 @@
* Checks if a library is a Kotlin/Native library.
* If [target] is not null, then additionally checks that the given target is supported in the library.
*/
- class Native(private val target: String? = null) : KlibPlatformChecker {
+ class Native(
+ private val target: String? = null,
+ private val knownIrProviders: Set<String> = emptySet()
+ ) : KlibPlatformChecker {
override fun check(library: BaseKotlinLibrary): PlatformCheckMismatch? =
checkPlatform(
expectedPlatform = BuiltInsPlatform.NATIVE,
@@ -28,7 +32,25 @@
platform = BuiltInsPlatform.NATIVE,
expectedTarget = target,
actualTargets = library.nativeTargets
+ ) ?: checkIrProvider(
+ expectedIrProviders = knownIrProviders,
+ actualIrProvider = library.irProviderName
)
+
+ companion object {
+ private fun checkIrProvider(
+ expectedIrProviders: Set<String>,
+ actualIrProvider: String?
+ ): PlatformCheckMismatch? {
+ if (actualIrProvider == null || actualIrProvider in expectedIrProviders) return null
+
+ return PlatformCheckMismatch(
+ property = "irProvider",
+ expected = if (expectedIrProviders.isEmpty()) "<none>" else expectedIrProviders.joinToString(),
+ actual = actualIrProvider
+ )
+ }
+ }
}
/**