[K/N] Untie DependenciesTracker from NativeGenerationState
This commit is contained in:
committed by
Space Team
parent
7402ef24bb
commit
eba1b4c388
+15
-6
@@ -52,6 +52,8 @@ interface DependenciesTracker {
|
||||
val nativeDependenciesToLink: List<KonanLibrary>
|
||||
val allNativeDependencies: List<KonanLibrary>
|
||||
val bitcodeToLink: List<KonanLibrary>
|
||||
|
||||
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<KotlinLibrary>()
|
||||
private val usedNativeDependencies = mutableSetOf<KotlinLibrary>()
|
||||
private val usedBitcodeOfFile = mutableSetOf<LibraryFile>()
|
||||
@@ -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 {
|
||||
|
||||
+1
-1
@@ -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)!!) }
|
||||
|
||||
+1
-5
@@ -142,11 +142,7 @@ internal fun PhaseEngine<NativeGenerationState>.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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user