diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt index 6bc0ad37ad8..e60688ae761 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt @@ -52,6 +52,8 @@ interface DependenciesTracker { val nativeDependenciesToLink: List val allNativeDependencies: List val bitcodeToLink: List + + fun collectResult(): DependenciesTrackingResult } private sealed class FileOrigin { @@ -66,12 +68,13 @@ private sealed class FileOrigin { class CertainFile(val library: KotlinLibrary, val fqName: String, val filePath: String) : FileOrigin() } -internal class DependenciesTrackerImpl(private val generationState: NativeGenerationState) : DependenciesTracker { +internal class DependenciesTrackerImpl( + private val llvmModuleSpecification: LlvmModuleSpecification, + private val config: KonanConfig, + private val context: Context, +) : DependenciesTracker { private data class LibraryFile(val library: KotlinLibrary, val fqName: String, val filePath: String) - private val config = generationState.config - private val context = generationState.context - private val usedBitcode = mutableSetOf() private val usedNativeDependencies = mutableSetOf() private val usedBitcodeOfFile = mutableSetOf() @@ -297,11 +300,11 @@ internal class DependenciesTrackerImpl(private val generationState: NativeGenera val bitcodeToLink = topSortedLibraries.filter { shouldContainBitcode(it) } private fun shouldContainBitcode(library: KonanLibrary): Boolean { - if (!generationState.llvmModuleSpecification.containsLibrary(library)) { + if (!llvmModuleSpecification.containsLibrary(library)) { return false } - if (!generationState.llvmModuleSpecification.isFinal) { + if (!llvmModuleSpecification.isFinal) { return true } @@ -322,6 +325,12 @@ internal class DependenciesTrackerImpl(private val generationState: NativeGenera override val nativeDependenciesToLink get() = dependencies.nativeDependenciesToLink override val allNativeDependencies get() = dependencies.allNativeDependencies override val bitcodeToLink get() = dependencies.bitcodeToLink + + override fun collectResult(): DependenciesTrackingResult = DependenciesTrackingResult( + bitcodeToLink, + allNativeDependencies, + allCachedBitcodeDependencies, + ) } internal object DependenciesSerializer { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt index ca76d35e07d..2e675dfe2fc 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt @@ -86,7 +86,7 @@ internal class NativeGenerationState( val producedLlvmModuleContainsStdlib get() = llvmModuleSpecification.containsModule(context.stdlibModule) - val dependenciesTracker: DependenciesTracker = DependenciesTrackerImpl(this) + val dependenciesTracker: DependenciesTracker = DependenciesTrackerImpl(llvmModuleSpecification, config, context) private val runtimeDelegate = lazy { Runtime(llvmContext, config.distribution.compilerInterface(config.target)) } private val llvmDelegate = lazy { Llvm(this, LLVMModuleCreateWithNameInContext("out", llvmContext)!!) } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt index c7057940e2a..9f02c5765c9 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt @@ -142,11 +142,7 @@ internal fun PhaseEngine.compileModule(module: IrModuleFr // TODO: Currently, all llvm modules are named as "out" which might lead to collisions. val bitcodeFile = context.tempFiles.create(context.llvm.module.getName(), ".bc").javaFile() runPhase(WriteBitcodeFilePhase, WriteBitcodeFileInput(context.llvm.module, bitcodeFile)) - val dependenciesTrackingResult = DependenciesTrackingResult( - context.dependenciesTracker.bitcodeToLink, - context.dependenciesTracker.allNativeDependencies, - context.dependenciesTracker.allCachedBitcodeDependencies, - ) + val dependenciesTrackingResult = context.dependenciesTracker.collectResult() return ModuleCompilationOutput(bitcodeFile, dependenciesTrackingResult, context.tempFiles, context.outputFiles) }