From a66442738cc2571582cedceb373a6352b4a4c0d3 Mon Sep 17 00:00:00 2001 From: SvyatoslavScherbina Date: Fri, 20 Dec 2019 15:54:10 +0300 Subject: [PATCH] Fix link options and included binaries when building with cache (#3706) --- .../org/jetbrains/kotlin/backend/konan/Linker.kt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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 fe28e39fd07..c9724ddbeee 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 @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.LinkerOutputKind import org.jetbrains.kotlin.backend.konan.files.renameAtomic +import org.jetbrains.kotlin.konan.library.KonanLibrary internal fun determineLinkerOutput(context: Context): LinkerOutputKind = when (context.config.produce) { @@ -34,8 +35,19 @@ internal class Linker(val context: Context) { fun link(objectFiles: List) { val nativeDependencies = context.llvm.nativeDependenciesToLink - val includedBinaries = nativeDependencies.map { it.includedPaths }.flatten() - val libraryProvidedLinkerFlags = nativeDependencies.map { it.linkerOpts }.flatten() + + val includedBinariesLibraries = if (context.config.produce.isCache) { + context.config.librariesToCache + } else { + nativeDependencies.filterNot { context.config.cachedLibraries.isLibraryCached(it) } + } + 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() + runLinker(objectFiles, includedBinaries, libraryProvidedLinkerFlags) renameOutput() }