[KLIB] Lift up -Xmetadata-klib CLI key from Native to Common args

This is a precondition for obsoleting and finally removing
`-Xexpect-actual-linker` CLI key, which became useless since
the removal of ExpectActualTable.

^KT-61136
This commit is contained in:
Dmitriy Dolovov
2023-09-15 18:53:28 +02:00
committed by Space Team
parent 53f994263f
commit 848c88b1a5
14 changed files with 25 additions and 12 deletions
@@ -68,7 +68,7 @@ internal inline fun <F> PhaseContext.firFrontend(
resolvedLibraries,
dependencyList,
extensionRegistrars,
metadataCompilationMode = configuration.get(KonanConfigKeys.METADATA_KLIB) ?: false,
metadataCompilationMode = config.metadataKlib,
isCommonSource = isCommonSource,
fileBelongsToModule = fileBelongsToModule,
registerExtraComponents = {
@@ -224,7 +224,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
internal val produce get() = configuration.get(KonanConfigKeys.PRODUCE)!!
internal val metadataKlib get() = configuration.get(KonanConfigKeys.METADATA_KLIB)!!
internal val metadataKlib get() = configuration.getBoolean(CommonConfigurationKeys.METADATA_KLIB)
internal val headerKlibPath get() = configuration.get(KonanConfigKeys.HEADER_KLIB)
@@ -73,8 +73,6 @@ class KonanConfigKeys {
= CompilerConfigurationKey.create("list available targets")
val MANIFEST_FILE: CompilerConfigurationKey<String?>
= CompilerConfigurationKey.create("provide manifest addend file")
val METADATA_KLIB: CompilerConfigurationKey<Boolean>
= CompilerConfigurationKey.create("metadata klib")
val HEADER_KLIB: CompilerConfigurationKey<String?>
= CompilerConfigurationKey.create("path to file where header klib should be produced")
val MODULE_NAME: CompilerConfigurationKey<String?>
@@ -55,7 +55,6 @@ fun CompilerConfiguration.setupFromArguments(arguments: K2NativeCompilerArgument
val outputKind = CompilerOutputKind.valueOf(
(arguments.produce ?: "program").uppercase())
put(PRODUCE, outputKind)
put(METADATA_KLIB, arguments.metadataKlib)
putIfNotNull(HEADER_KLIB, arguments.headerKlibPath)
arguments.libraryVersion?.let { put(LIBRARY_VERSION, it) }
@@ -90,7 +90,7 @@ internal class DynamicCompilerDriver : CompilerDriver() {
private fun produceKlib(engine: PhaseEngine<PhaseContext>, config: KonanConfig, environment: KotlinCoreEnvironment) {
val serializerOutput = if (environment.configuration.getBoolean(CommonConfigurationKeys.USE_FIR))
serializeKLibK2(engine, environment)
serializeKLibK2(engine, config, environment)
else
serializeKlibK1(engine, config, environment)
serializerOutput?.let { engine.writeKlib(it) }
@@ -98,18 +98,19 @@ internal class DynamicCompilerDriver : CompilerDriver() {
private fun serializeKLibK2(
engine: PhaseEngine<PhaseContext>,
config: KonanConfig,
environment: KotlinCoreEnvironment
): SerializerOutput? {
val frontendOutput = engine.runFirFrontend(environment)
if (frontendOutput is FirOutput.ShouldNotGenerateCode) return null
require(frontendOutput is FirOutput.Full)
return if (environment.configuration.getBoolean(KonanConfigKeys.METADATA_KLIB)) {
return if (config.metadataKlib) {
engine.runFirSerializer(frontendOutput)
} else {
val fir2IrOutput = engine.runFir2Ir(frontendOutput)
val headerKlibPath = environment.configuration.get(KonanConfigKeys.HEADER_KLIB)
val headerKlibPath = config.headerKlibPath
if (!headerKlibPath.isNullOrEmpty()) {
val headerKlib = engine.runFir2IrSerializer(FirSerializerInput(fir2IrOutput, produceHeaderKlib = true))
engine.writeKlib(headerKlib, headerKlibPath)