diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt index 1e3a66f3503..2e29ba55b2d 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt @@ -87,7 +87,7 @@ public fun runTopLevelPhases(konanConfig: KonanConfig, environment: KotlinCoreEn } } - phaser.phase(KonanPhase.LINKER) { + phaser.phase(KonanPhase.LINK_STAGE) { LinkStage(context).linkStage() } } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt index 0e8bba96ee6..5e444a6c586 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt @@ -34,7 +34,9 @@ enum class KonanPhase(val description: String, /* ... ... */ RTTI("RTTI Generation"), /* ... ... */ CODEGEN("Code Generation"), /* ... ... */ METADATOR("Metadata Generation"), - /* */ LINKER("Link Stage"); + /* */ LINK_STAGE("Link stage"), + /* ... */ OBJECT_FILES("Bitcode to object file"), + /* ... */ LINKER("Linker"); val prerequisite = prerequisite.toSet() } @@ -61,7 +63,7 @@ object KonanPhases { verbose?.forEach { phases[known(it)]!!.verbose = true } if (get(NOLINK) ?: false ) { - KonanPhase.LINKER.enabled = false + KonanPhase.LINK_STAGE.enabled = false } }} } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt index 26be0890f5d..0ab503bece7 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt @@ -262,16 +262,22 @@ internal class LinkStage(val context: Context) { fun linkStage() { context.log("# Compiler root: ${distribution.konanHome}") - val bitcodeFiles = listOf(emitted, distribution.start, distribution.runtime, - distribution.launcher) + libraries + val bitcodeFiles = listOf(emitted, distribution.start, + distribution.runtime, distribution.launcher) + libraries - val objectFiles = if (optimize) { - listOf( llvmLto(bitcodeFiles ) ) - } else { - bitcodeFiles.map{ it -> llvmLlc(it) } + var objectFiles: List = listOf() + + val phaser = PhaseManager(context) + phaser.phase(KonanPhase.OBJECT_FILES) { + objectFiles = if (optimize) { + listOf( llvmLto(bitcodeFiles ) ) + } else { + bitcodeFiles.map{ it -> llvmLlc(it) } + } + } + phaser.phase(KonanPhase.LINKER) { + val executable = link(objectFiles) } - - val executable = link(objectFiles) } }