diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt index 8f791e81d97..69f48beaa13 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt @@ -230,10 +230,11 @@ abstract class KotlinLibraryProperResolverWithAttributes( class SingleKlibComponentResolver( klibFile: String, knownAbiVersions: List?, - logger: Logger + logger: Logger, + knownIrProviders: List ) : KotlinLibraryProperResolverWithAttributes( emptyList(), listOf(klibFile), knownAbiVersions, emptyList(), - null, null, false, logger, emptyList() + null, null, false, logger, knownIrProviders ) { override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKotlinLibraryComponents(file, isDefault) } @@ -244,6 +245,7 @@ class SingleKlibComponentResolver( * - searching among user-supplied libraries by "unique_name" that matches the given library name * - filtering out pre-1.4 libraries (with the old style layout) * - filtering out library components that have different ABI version than the ABI version of the current compiler + * - filtering out libraries with non-default ir_provider. * * If no match found, fails with [Logger#fatal]. * @@ -251,5 +253,23 @@ class SingleKlibComponentResolver( */ object CompilerSingleFileKlibResolveStrategy : SingleFileKlibResolveStrategy { override fun resolve(libraryFile: File, logger: Logger) = - SingleKlibComponentResolver(libraryFile.absolutePath, listOf(KotlinAbiVersion.CURRENT), logger).resolve(libraryFile.absolutePath) + SingleKlibComponentResolver( + libraryFile.absolutePath, listOf(KotlinAbiVersion.CURRENT), logger, emptyList() + ).resolve(libraryFile.absolutePath) } + +/** + * Similar to [CompilerSingleFileKlibResolveStrategy], but doesn't filter out + * libraries with [knownIrProviders]. + */ +// TODO: It looks like a hack because it is. +// The reason this strategy exists is that we shouldn't skip Native metadata-based interop libraries +// when generating compiler caches. +class CompilerSingleFileKlibResolveAllowingIrProvidersStrategy( + private val knownIrProviders: List +) : SingleFileKlibResolveStrategy { + override fun resolve(libraryFile: File, logger: Logger) = + SingleKlibComponentResolver( + libraryFile.absolutePath, listOf(KotlinAbiVersion.CURRENT), logger, knownIrProviders + ).resolve(libraryFile.absolutePath) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index d3d17d2aba9..f3549a679a1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -24,13 +24,11 @@ import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder +import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.CompilerOutputKind.* import org.jetbrains.kotlin.konan.target.KonanTarget -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.resolveSingleFileKlib -import org.jetbrains.kotlin.library.uniqueName -import org.jetbrains.kotlin.library.unresolvedDependencies +import org.jetbrains.kotlin.library.* import java.io.File import java.nio.charset.StandardCharsets import java.security.MessageDigest @@ -645,6 +643,12 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile