From 68db5733a892459bed47cc7593fb062487355286 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Thu, 23 Jan 2020 17:49:42 +0300 Subject: [PATCH] Fixed static framework linker options When using static caches we need to extract linker options in the same way as for dynamic frameworks --- .../org/jetbrains/kotlin/backend/konan/CompilerOutput.kt | 2 +- .../src/org/jetbrains/kotlin/backend/konan/Linker.kt | 5 +---- .../jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt | 8 ++++++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt index ee795a9b44e..6f8a0b1ce36 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt @@ -196,7 +196,7 @@ private fun embedAppleLinkerOptionsToBitcode(llvm: Llvm, config: KonanConfig) { } val optionsToEmbed = findEmbeddableOptions(config.platform.configurables.linkerKonanFlags) + - llvm.nativeDependenciesToLink.flatMap { findEmbeddableOptions(it.linkerOpts) } + llvm.allNativeDependencies.flatMap { findEmbeddableOptions(it.linkerOpts) } embedLlvmLinkOptions(llvm.llvmModule, optionsToEmbed) } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt index b6121d5fe3a..ba5262299fe 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt @@ -43,10 +43,7 @@ internal class Linker(val context: Context) { } val includedBinaries = includedBinariesLibraries.map { (it as? KonanLibrary)?.includedPaths.orEmpty() }.flatten() - val cachedLibraries = context.librariesWithDependencies - .filter { context.config.cachedLibraries.isLibraryCached(it) } - val libraryProvidedLinkerFlags = (nativeDependencies + cachedLibraries) - .distinct().map { it.linkerOpts }.flatten() + val libraryProvidedLinkerFlags = context.llvm.allNativeDependencies.map { it.linkerOpts }.flatten() runLinker(objectFiles, includedBinaries, libraryProvidedLinkerFlags) renameOutput() diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt index 0fac988ca61..51ab0f1c023 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt @@ -21,6 +21,8 @@ import org.jetbrains.kotlin.ir.util.isReal import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.library.KotlinLibrary +import org.jetbrains.kotlin.library.uniqueName +import org.jetbrains.kotlin.library.unresolvedDependencies import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import kotlin.properties.ReadOnlyProperty @@ -395,6 +397,12 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) { } + val allNativeDependencies: List by lazy { + val cachedLibraries = context.librariesWithDependencies.filter { + context.config.cachedLibraries.isLibraryCached(it) + } + (nativeDependenciesToLink + cachedLibraries).distinct() + } val bitcodeToLink: List by lazy { (context.config.resolvedLibraries.getFullList(TopologicalLibraryOrder) as List)