KLIB reader: separate library reading from dependency resolving (#1925)

This commit is contained in:
Dmitriy Dolovov
2018-08-24 10:29:13 +03:00
committed by GitHub
parent 59eae5e04b
commit 076f6a7c99
22 changed files with 421 additions and 316 deletions
@@ -16,17 +16,18 @@
package org.jetbrains.kotlin.cli.utilities
import org.jetbrains.kotlin.backend.konan.library.resolveLibrariesRecursive
import org.jetbrains.kotlin.backend.konan.library.KLIB_CURRENT_ABI_VERSION
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.library.defaultResolver
import org.jetbrains.kotlin.konan.library.includedHeaders
import org.jetbrains.kotlin.konan.library.libraryResolver
import org.jetbrains.kotlin.konan.library.packageFqName
import org.jetbrains.kotlin.konan.target.PlatformManager
import org.jetbrains.kotlin.native.interop.gen.jvm.interop
import org.jetbrains.kotlin.utils.addIfNotNull
private val NODEFAULTLIBS = "-nodefaultlibs"
private val PURGE_USER_LIBS = "--purge_user_libs"
private const val NODEFAULTLIBS = "-nodefaultlibs"
private const val PURGE_USER_LIBS = "--purge_user_libs"
// TODO: this function should eventually be eliminated from 'utilities'.
// The interaction of interop and the compler should be streamlined.
@@ -68,15 +69,15 @@ fun invokeInterop(flavor: String, args: Array<String>): Array<String> {
val manifest = File(buildDir, "manifest.properties")
val target = PlatformManager().targetManager(targetRequest).target
val resolver = defaultResolver(repos, target)
val allLibraries = resolver.resolveLibrariesRecursive(
libraries, target, noStdLib = true, noDefaultLibs = noDefaultLibs
)
val resolver = defaultResolver(repos, target).libraryResolver(KLIB_CURRENT_ABI_VERSION)
val allLibraries = resolver.resolveWithDependencies(
libraries, noStdLib = true, noDefaultLibs = noDefaultLibs
).getFullList()
val importArgs = allLibraries.flatMap {libraryReader ->
val importArgs = allLibraries.flatMap { library ->
// TODO: handle missing properties?
libraryReader.packageFqName?.asString()?.let { packageFqName ->
val headerIds = libraryReader.includedHeaders
library.packageFqName?.asString()?.let { packageFqName ->
val headerIds = library.includedHeaders
val arg = "$packageFqName:${headerIds.joinToString(";")}"
listOf("-import", arg)
} ?: emptyList()