From ca7d1d019474fee468a756079e099a9b1da7d3c0 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Tue, 28 Feb 2023 16:05:40 +0200 Subject: [PATCH] [K/N] Minor -Xcompile-from-bitcode enhancements --- .../jetbrains/kotlin/backend/konan/KonanConfig.kt | 7 +------ .../kotlin/backend/konan/SetupConfiguration.kt | 13 ++++++++++++- .../backend/konan/driver/DynamicCompilerDriver.kt | 7 +++++-- 3 files changed, 18 insertions(+), 9 deletions(-) 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 bbe8129810f..e9d1741d8c6 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 @@ -502,12 +502,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration * Path to serialized dependencies to use for bitcode compilation. */ internal val readSerializedDependencies: String? by lazy { - configuration.get(KonanConfigKeys.SERIALIZED_DEPENDENCIES).also { - if (compileFromBitcode.isNullOrEmpty()) { - configuration.report(CompilerMessageSeverity.STRONG_WARNING, - "Providing serialized dependencies only works in conjunction with a bitcode file to compile.") - } - } + configuration.get(KonanConfigKeys.SERIALIZED_DEPENDENCIES) } /** 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 6d28d1961ac..591bf6ed19c 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 @@ -263,7 +263,7 @@ fun CompilerConfiguration.setupFromArguments(arguments: K2NativeCompilerArgument put(PARTIAL_LINKAGE, arguments.partialLinkage) put(OMIT_FRAMEWORK_BINARY, arguments.omitFrameworkBinary) putIfNotNull(COMPILE_FROM_BITCODE, arguments.compileFromBitcode) - putIfNotNull(SERIALIZED_DEPENDENCIES, arguments.serializedDependencies) + putIfNotNull(SERIALIZED_DEPENDENCIES, parseSerializedDependencies(arguments, this@setupFromArguments)) putIfNotNull(SAVE_DEPENDENCIES_PATH, arguments.saveDependenciesPath) putIfNotNull(SAVE_LLVM_IR_DIRECTORY, arguments.saveLlvmIrDirectory) } @@ -507,3 +507,14 @@ private fun parseBundleId( argumentValue } } + +private fun parseSerializedDependencies( + arguments: K2NativeCompilerArguments, + configuration: CompilerConfiguration +): String? { + if (!arguments.serializedDependencies.isNullOrEmpty() && arguments.compileFromBitcode.isNullOrEmpty()) { + configuration.report(STRONG_WARNING, + "Providing serialized dependencies only works in conjunction with a bitcode file to compile.") + } + return arguments.serializedDependencies +} \ No newline at end of file diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt index 763c8a88102..22814571ea7 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt @@ -5,10 +5,12 @@ package org.jetbrains.kotlin.backend.konan.driver +import kotlinx.cinterop.CPointer import kotlinx.cinterop.usingJvmCInteropCallbacks import llvm.LLVMContextCreate import llvm.LLVMContextDispose import llvm.LLVMDisposeModule +import llvm.LLVMOpaqueModule import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.BitcodePostProcessingContextImpl import org.jetbrains.kotlin.backend.konan.Context @@ -133,8 +135,9 @@ internal class DynamicCompilerDriver : CompilerDriver() { private fun produceBinaryFromBitcode(engine: PhaseEngine, config: KonanConfig, bitcodeFilePath: String) { val llvmContext = LLVMContextCreate()!! - val llvmModule = parseBitcodeFile(llvmContext, bitcodeFilePath) + var llvmModule: CPointer? = null try { + llvmModule = parseBitcodeFile(llvmContext, bitcodeFilePath) val context = BitcodePostProcessingContextImpl(config, llvmModule, llvmContext) val depsPath = config.readSerializedDependencies val dependencies = if (depsPath.isNullOrEmpty()) DependenciesTrackingResult(emptyList(), emptyList(), emptyList()).also { @@ -142,7 +145,7 @@ internal class DynamicCompilerDriver : CompilerDriver() { } else DependenciesTrackingResult.deserialize(depsPath, File(depsPath).readStrings(), config) engine.runBitcodeBackend(context, dependencies) } finally { - LLVMDisposeModule(llvmModule) + llvmModule?.let { LLVMDisposeModule(it) } LLVMContextDispose(llvmContext) } }