From a450866db39a747524869ee2f2a5636ccf2236e4 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Mon, 20 Mar 2023 12:45:00 +0100 Subject: [PATCH] [PL] Commonize Native & JS compiler configuration keys --- .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 8 +--- .../jetbrains/kotlin/cli/js/klib/irForKlib.kt | 6 +-- .../ir/backend/js/JsIrBackendContext.kt | 3 +- .../ir/backend/js/ic/JsIrLinkerLoader.kt | 4 +- .../linkage/partial/PartialLinkageConfig.kt | 42 +++++++++++++++++++ .../jetbrains/kotlin/ir/backend/js/klib.kt | 7 ++-- .../kotlin/config/PartialLinkageLogLevel.kt | 21 ---------- .../kotlin/js/config/JSConfigurationKeys.java | 7 ---- .../ir/AbstractJsPartialLinkageTestCase.kt | 5 ++- .../jetbrains/kotlin/backend/konan/Context.kt | 2 +- .../kotlin/backend/konan/KonanConfig.kt | 11 ++--- .../backend/konan/KonanConfigurationKeys.kt | 3 -- .../jetbrains/kotlin/backend/konan/PsiToIr.kt | 3 +- .../backend/konan/SetupConfiguration.kt | 13 ++---- 14 files changed, 70 insertions(+), 65 deletions(-) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/linkage/partial/PartialLinkageConfig.kt delete mode 100644 compiler/util/src/org/jetbrains/kotlin/config/PartialLinkageLogLevel.kt diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index a8cc2e144c2..2dfe12d9d60 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsCodeGenerator import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC +import org.jetbrains.kotlin.ir.linkage.partial.setupPartialLinkageConfig import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult import org.jetbrains.kotlin.js.config.* @@ -168,15 +169,10 @@ class K2JsIrCompiler : CLICompiler() { configuration.put(JSConfigurationKeys.LIBRARIES, libraries) configuration.put(JSConfigurationKeys.TRANSITIVE_LIBRARIES, libraries) - - configuration.put(JSConfigurationKeys.PARTIAL_LINKAGE, arguments.partialLinkage) - arguments.partialLinkageLogLevel?.let { - configuration.put(JSConfigurationKeys.PARTIAL_LINKAGE_LOG_LEVEL, PartialLinkageLogLevel.resolveLogLevel(it)) - } - configuration.put(JSConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS, arguments.wasmEnableArrayRangeChecks) configuration.put(JSConfigurationKeys.WASM_ENABLE_ASSERTS, arguments.wasmEnableAsserts) configuration.put(JSConfigurationKeys.WASM_GENERATE_WAT, arguments.wasmGenerateWat) + configuration.setupPartialLinkageConfig(arguments.partialLinkage, arguments.partialLinkageLogLevel) val commonSourcesArray = arguments.commonSources val commonSources = commonSourcesArray?.toSet() ?: emptySet() diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/irForKlib.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/irForKlib.kt index aec89457a79..fdc257b5213 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/irForKlib.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/irForKlib.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerIr import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.ir.util.SymbolTable @@ -59,11 +60,10 @@ fun generateIrForKlibSerialization( ): Pair { val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT val messageLogger = configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None - val allowUnboundSymbols = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false val symbolTable = SymbolTable(IdSignatureDescriptor(JsManglerDesc), irFactory) val psi2Ir = Psi2IrTranslator( configuration.languageVersionSettings, - Psi2IrConfiguration(errorPolicy.allowErrors, allowUnboundSymbols), + Psi2IrConfiguration(errorPolicy.allowErrors, configuration.partialLinkageConfig.isEnabled), messageLogger::checkNoUnboundSymbols ) val psi2IrContext = psi2Ir.createGeneratorContext(analysisResult.moduleDescriptor, analysisResult.bindingContext, symbolTable) @@ -83,7 +83,7 @@ fun generateIrForKlibSerialization( messageLogger, psi2IrContext.irBuiltIns, psi2IrContext.symbolTable, - partialLinkageEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false, + partialLinkageEnabled = configuration.partialLinkageConfig.isEnabled, feContext, ICData(icData.map { it.irData }, errorPolicy.allowErrors), stubGenerator = stubGenerator diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt index 7c1ecb2b486..e2ed1e86974 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.DescriptorlessExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.types.* @@ -409,7 +410,7 @@ class JsIrBackendContext( } override val partialLinkageSupport = createPartialLinkageSupportForLowerings( - isEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false, + isEnabled = configuration.partialLinkageConfig.isEnabled, irBuiltIns, configuration.irMessageLogger ) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt index 89107bcc5e7..e20c2a8964c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt @@ -23,10 +23,10 @@ import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.descriptors.IrDescriptorBasedFunctionFactory +import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.irMessageLogger -import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.uniqueName import org.jetbrains.kotlin.library.unresolvedDependencies @@ -108,7 +108,7 @@ internal class JsIrLinkerLoader( val moduleDescriptor = loadedModules.keys.last() val typeTranslator = TypeTranslatorImpl(symbolTable, compilerConfiguration.languageVersionSettings, moduleDescriptor) val irBuiltIns = IrBuiltInsOverDescriptors(moduleDescriptor.builtIns, typeTranslator, symbolTable) - val partialLinkageEnabled = compilerConfiguration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false + val partialLinkageEnabled = compilerConfiguration.partialLinkageConfig.isEnabled val linker = JsIrLinker( currentModule = null, messageLogger = compilerConfiguration.irMessageLogger, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/linkage/partial/PartialLinkageConfig.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/linkage/partial/PartialLinkageConfig.kt new file mode 100644 index 00000000000..4db62584c1d --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/linkage/partial/PartialLinkageConfig.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ir.linkage.partial + +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.CompilerConfigurationKey + +data class PartialLinkageConfig(val isEnabled: Boolean, val logLevel: PartialLinkageLogLevel) { + companion object { + val DEFAULT = PartialLinkageConfig(false, PartialLinkageLogLevel.ERROR) + + val KEY = CompilerConfigurationKey.create("partial linkage configuration") + } +} + +enum class PartialLinkageLogLevel { + INFO, WARNING, ERROR; + + companion object { + val DEFAULT = WARNING + + fun resolveLogLevel(key: String): PartialLinkageLogLevel = + values().firstOrNull { entry -> entry.name.equals(key, ignoreCase = true) } + ?: error("Unknown partial linkage compile-time log level '$key'") + } +} + +val CompilerConfiguration.partialLinkageConfig: PartialLinkageConfig + get() = this[PartialLinkageConfig.KEY] ?: PartialLinkageConfig.DEFAULT + +fun CompilerConfiguration.setupPartialLinkageConfig(isEnabled: Boolean, logLevel: String?) { + setupPartialLinkageConfig( + PartialLinkageConfig(isEnabled, logLevel?.let(PartialLinkageLogLevel::resolveLogLevel) ?: PartialLinkageLogLevel.DEFAULT) + ) +} + +fun CompilerConfiguration.setupPartialLinkageConfig(config: PartialLinkageConfig) { + this.put(PartialLinkageConfig.KEY, config) +} diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index 5ebe47b7a61..5a9ebe1403b 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.descriptors.IrDescriptorBasedFunctionFactory import org.jetbrains.kotlin.ir.linkage.IrDeserializer +import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.acceptVoid @@ -198,7 +199,7 @@ fun loadIr( val allDependencies = depsDescriptors.allDependencies val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT val messageLogger = configuration.irMessageLogger - val partialLinkageEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false + val partialLinkageEnabled = configuration.partialLinkageConfig.isEnabled val signaturer = IdSignatureDescriptor(JsManglerDesc) val symbolTable = SymbolTable(signaturer, irFactory) @@ -261,7 +262,7 @@ fun getIrModuleInfoForKlib( val typeTranslator = TypeTranslatorImpl(symbolTable, configuration.languageVersionSettings, moduleDescriptor) val irBuiltIns = IrBuiltInsOverDescriptors(moduleDescriptor.builtIns, typeTranslator, symbolTable) - val partialLinkageEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false + val partialLinkageEnabled = configuration.partialLinkageConfig.isEnabled val irLinker = JsIrLinker( currentModule = null, @@ -321,7 +322,7 @@ fun getIrModuleInfoForSourceFiles( JsIrLinker.JsFePluginContext(moduleDescriptor, symbolTable, typeTranslator, irBuiltIns) } - val partialLinkageEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false + val partialLinkageEnabled = configuration.partialLinkageConfig.isEnabled val irLinker = JsIrLinker( currentModule = psi2IrContext.moduleDescriptor, diff --git a/compiler/util/src/org/jetbrains/kotlin/config/PartialLinkageLogLevel.kt b/compiler/util/src/org/jetbrains/kotlin/config/PartialLinkageLogLevel.kt deleted file mode 100644 index e7a445e1069..00000000000 --- a/compiler/util/src/org/jetbrains/kotlin/config/PartialLinkageLogLevel.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.config - -enum class PartialLinkageLogLevel { - INFO, WARNING, ERROR; - - companion object { - val DEFAULT = WARNING - - fun resolveLogLevel(key: String): PartialLinkageLogLevel = when (key.uppercase()) { - "INFO" -> INFO - "WARNING" -> WARNING - "ERROR" -> ERROR - else -> error("Unknown partial linkage compile-time log level '$key'") - } - } -} diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java index c1f9a1a42a0..89efb13f448 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.js.config; import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor; import org.jetbrains.kotlin.config.CompilerConfigurationKey; -import org.jetbrains.kotlin.config.PartialLinkageLogLevel; import org.jetbrains.kotlin.incremental.js.IncrementalNextRoundChecker; import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider; import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer; @@ -101,12 +100,6 @@ public class JSConfigurationKeys { public static final CompilerConfigurationKey ERROR_TOLERANCE_POLICY = CompilerConfigurationKey.create("set up policy to ignore compilation errors"); - public static final CompilerConfigurationKey PARTIAL_LINKAGE = - CompilerConfigurationKey.create("enables partial linkage mode"); - - public static final CompilerConfigurationKey PARTIAL_LINKAGE_LOG_LEVEL = - CompilerConfigurationKey.create("partial linkage compile-time log level"); - public static final CompilerConfigurationKey PROPERTY_LAZY_INITIALIZATION = CompilerConfigurationKey.create("perform lazy initialization for properties"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsPartialLinkageTestCase.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsPartialLinkageTestCase.kt index 99f4e5a8681..b1300087739 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsPartialLinkageTestCase.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsPartialLinkageTestCase.kt @@ -33,6 +33,9 @@ import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransf import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC +import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageConfig +import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageLogLevel +import org.jetbrains.kotlin.ir.linkage.partial.setupPartialLinkageConfig import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.testOld.V8IrJsTestChecker @@ -86,7 +89,6 @@ abstract class AbstractJsPartialLinkageTestCase(val compilerType: CompilerType) private fun createConfig(moduleName: String): CompilerConfiguration { val config = environment.configuration.copy() config.put(CommonConfigurationKeys.MODULE_NAME, moduleName) - config.put(JSConfigurationKeys.PARTIAL_LINKAGE, true) config.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN) config.put(JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION, true) @@ -233,6 +235,7 @@ abstract class AbstractJsPartialLinkageTestCase(val compilerType: CompilerType) private fun buildBinaryAndRun(mainModuleKlibFile: File, allDependencies: Dependencies) { val configuration = createConfig(MAIN_MODULE_NAME) + configuration.setupPartialLinkageConfig(PartialLinkageConfig(isEnabled = true, logLevel = PartialLinkageLogLevel.WARNING)) val compilationOutputs = when (compilerType) { CompilerType.K1_NO_IC, CompilerType.K2_NO_IC -> buildBinaryNoIC(configuration, mainModuleKlibFile, allDependencies) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt index 48ea2e9a044..762209ea8da 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt @@ -115,7 +115,7 @@ internal class Context( override fun dispose() {} override val partialLinkageSupport = createPartialLinkageSupportForLowerings( - config.partialLinkageEnabled, + config.partialLinkageConfig.isEnabled, irBuiltIns, configuration.irMessageLogger ) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt index dab590e7795..b628e97032b 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt @@ -12,10 +12,8 @@ import org.jetbrains.kotlin.backend.konan.serialization.KonanUserVisibleIrModule import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity -import org.jetbrains.kotlin.config.CommonConfigurationKeys -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.KotlinCompilerVersion -import org.jetbrains.kotlin.config.PartialLinkageLogLevel +import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.properties.loadProperties @@ -400,8 +398,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration internal val useDebugInfoInNativeLibs= configuration.get(BinaryOptions.stripDebugInfoFromNativeLibs) == false - internal val partialLinkageEnabled = configuration[KonanConfigKeys.PARTIAL_LINKAGE] ?: false - internal val partialLinkageLogLevel = configuration[KonanConfigKeys.PARTIAL_LINKAGE_LOG_LEVEL] ?: PartialLinkageLogLevel.DEFAULT + internal val partialLinkageConfig = configuration.partialLinkageConfig internal val additionalCacheFlags by lazy { platformManager.loader(target).additionalCacheFlags } @@ -435,7 +432,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration private val userCacheFlavorString = buildString { appendCommonCacheFlavor() - if (partialLinkageEnabled) append("-pl") + if (partialLinkageConfig.isEnabled) append("-pl") } private val systemCacheRootDirectory = File(distribution.konanHome).child("klib").child("cache") diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt index c371fcf6011..eccbfed3b6c 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.backend.konan import org.jetbrains.kotlin.config.CompilerConfigurationKey -import org.jetbrains.kotlin.config.PartialLinkageLogLevel import org.jetbrains.kotlin.konan.target.CompilerOutputKind class KonanConfigKeys { @@ -159,8 +158,6 @@ class KonanConfigKeys { val LLVM_VARIANT: CompilerConfigurationKey = CompilerConfigurationKey.create("llvm variant") val RUNTIME_LOGS: CompilerConfigurationKey = CompilerConfigurationKey.create("enable runtime logging") val LAZY_IR_FOR_CACHES: CompilerConfigurationKey = CompilerConfigurationKey.create("use lazy IR for cached libraries") - val PARTIAL_LINKAGE: CompilerConfigurationKey = CompilerConfigurationKey.create("enables partial linkage mode") - val PARTIAL_LINKAGE_LOG_LEVEL: CompilerConfigurationKey = CompilerConfigurationKey.create("partial linkage compile-time log level") val TEST_DUMP_OUTPUT_PATH: CompilerConfigurationKey = CompilerConfigurationKey.create("path to a file to dump the list of all available tests") val OMIT_FRAMEWORK_BINARY: CompilerConfigurationKey = CompilerConfigurationKey.create("do not generate binary in framework") val COMPILE_FROM_BITCODE: CompilerConfigurationKey = CompilerConfigurationKey.create("path to bitcode file to compile") diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt index 80561eef955..ccb8e826c14 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.builders.TranslationPluginContext import org.jetbrains.kotlin.ir.linkage.IrDeserializer +import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.acceptVoid @@ -53,7 +54,7 @@ internal fun PsiToIrContext.psiToIr( val expectActualLinker = config.configuration[CommonConfigurationKeys.EXPECT_ACTUAL_LINKER] ?: false val messageLogger = config.configuration.irMessageLogger - val partialLinkageEnabled = config.configuration[KonanConfigKeys.PARTIAL_LINKAGE] ?: false + val partialLinkageEnabled = config.configuration.partialLinkageConfig.isEnabled val translator = Psi2IrTranslator( config.configuration.languageVersionSettings, diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt index 6d4e4faf0e1..4317a2e91b5 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt @@ -9,10 +9,8 @@ import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* -import org.jetbrains.kotlin.config.CommonConfigurationKeys -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.PartialLinkageLogLevel -import org.jetbrains.kotlin.config.getModuleNameForSource +import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.ir.linkage.partial.setupPartialLinkageConfig import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.util.visibleName @@ -272,9 +270,7 @@ fun CompilerConfiguration.setupFromArguments(arguments: K2NativeCompilerArgument putIfNotNull(RUNTIME_LOGS, arguments.runtimeLogs) putIfNotNull(BUNDLE_ID, parseBundleId(arguments, outputKind, this@setupFromArguments)) arguments.testDumpOutputPath?.let { put(TEST_DUMP_OUTPUT_PATH, it) } - put(PARTIAL_LINKAGE, arguments.partialLinkage) - arguments.partialLinkageLogLevel?.let { put(PARTIAL_LINKAGE_LOG_LEVEL, PartialLinkageLogLevel.resolveLogLevel(it)) } - + setupPartialLinkageConfig(arguments.partialLinkage, arguments.partialLinkageLogLevel) put(OMIT_FRAMEWORK_BINARY, arguments.omitFrameworkBinary) putIfNotNull(COMPILE_FROM_BITCODE, parseCompileFromBitcode(arguments, this@setupFromArguments, outputKind)) putIfNotNull(SERIALIZED_DEPENDENCIES, parseSerializedDependencies(arguments, this@setupFromArguments)) @@ -287,8 +283,7 @@ private fun String.absoluteNormalizedFile() = java.io.File(this).absoluteFile.no internal fun CompilerConfiguration.setupCommonOptionsForCaches(konanConfig: KonanConfig) = with(KonanConfigKeys) { put(TARGET, konanConfig.target.toString()) put(DEBUG, konanConfig.debug) - put(PARTIAL_LINKAGE, konanConfig.partialLinkageEnabled) - put(PARTIAL_LINKAGE_LOG_LEVEL, konanConfig.partialLinkageLogLevel) + setupPartialLinkageConfig(konanConfig.partialLinkageConfig) putIfNotNull(EXTERNAL_DEPENDENCIES, konanConfig.externalDependenciesFile?.absolutePath) put(BinaryOptions.memoryModel, konanConfig.memoryModel) put(PROPERTY_LAZY_INITIALIZATION, konanConfig.propertyLazyInitialization)