[K/N] Move isFinalBinary and involvesLinkStage checks to KonanConfig
It allows to make more precise checks by accessing KonanConfig properties.
This commit is contained in:
+3
-3
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
|
|||||||
/**
|
/**
|
||||||
* Supposed to be true for a single LLVM module within final binary.
|
* Supposed to be true for a single LLVM module within final binary.
|
||||||
*/
|
*/
|
||||||
val CompilerOutputKind.isFinalBinary: Boolean get() = when (this) {
|
val KonanConfig.isFinalBinary: Boolean get() = when (this.produce) {
|
||||||
CompilerOutputKind.PROGRAM, CompilerOutputKind.DYNAMIC,
|
CompilerOutputKind.PROGRAM, CompilerOutputKind.DYNAMIC,
|
||||||
CompilerOutputKind.STATIC, CompilerOutputKind.FRAMEWORK -> true
|
CompilerOutputKind.STATIC, CompilerOutputKind.FRAMEWORK -> true
|
||||||
CompilerOutputKind.DYNAMIC_CACHE, CompilerOutputKind.STATIC_CACHE,
|
CompilerOutputKind.DYNAMIC_CACHE, CompilerOutputKind.STATIC_CACHE,
|
||||||
@@ -41,8 +41,8 @@ val CompilerOutputKind.involvesBitcodeGeneration: Boolean
|
|||||||
internal val Context.producedLlvmModuleContainsStdlib: Boolean
|
internal val Context.producedLlvmModuleContainsStdlib: Boolean
|
||||||
get() = this.llvmModuleSpecification.containsModule(this.stdlibModule)
|
get() = this.llvmModuleSpecification.containsModule(this.stdlibModule)
|
||||||
|
|
||||||
val CompilerOutputKind.involvesLinkStage: Boolean
|
val KonanConfig.involvesLinkStage: Boolean
|
||||||
get() = when (this) {
|
get() = when (this.produce) {
|
||||||
CompilerOutputKind.PROGRAM, CompilerOutputKind.DYNAMIC,
|
CompilerOutputKind.PROGRAM, CompilerOutputKind.DYNAMIC,
|
||||||
CompilerOutputKind.DYNAMIC_CACHE, CompilerOutputKind.STATIC_CACHE,
|
CompilerOutputKind.DYNAMIC_CACHE, CompilerOutputKind.STATIC_CACHE,
|
||||||
CompilerOutputKind.STATIC, CompilerOutputKind.FRAMEWORK -> true
|
CompilerOutputKind.STATIC, CompilerOutputKind.FRAMEWORK -> true
|
||||||
|
|||||||
+1
-1
@@ -204,7 +204,7 @@ internal class Linker(val context: Context) {
|
|||||||
private fun shouldPerformPreLink(caches: CachesToLink, linkerOutputKind: LinkerOutputKind): Boolean {
|
private fun shouldPerformPreLink(caches: CachesToLink, linkerOutputKind: LinkerOutputKind): Boolean {
|
||||||
// Pre-link is only useful when producing static library. Otherwise its just a waste of time.
|
// Pre-link is only useful when producing static library. Otherwise its just a waste of time.
|
||||||
val isStaticLibrary = linkerOutputKind == LinkerOutputKind.STATIC_LIBRARY &&
|
val isStaticLibrary = linkerOutputKind == LinkerOutputKind.STATIC_LIBRARY &&
|
||||||
context.config.produce.isFinalBinary
|
context.config.isFinalBinary
|
||||||
val enabled = context.config.cacheSupport.preLinkCaches
|
val enabled = context.config.cacheSupport.preLinkCaches
|
||||||
val nonEmptyCaches = caches.static.isNotEmpty()
|
val nonEmptyCaches = caches.static.isNotEmpty()
|
||||||
return isStaticLibrary && enabled && nonEmptyCaches
|
return isStaticLibrary && enabled && nonEmptyCaches
|
||||||
|
|||||||
+1
-1
@@ -627,7 +627,7 @@ internal fun PhaseConfig.konanPhasesConfig(config: KonanConfig) {
|
|||||||
disableUnless(rewriteExternalCallsCheckerGlobals, getBoolean(KonanConfigKeys.CHECK_EXTERNAL_CALLS))
|
disableUnless(rewriteExternalCallsCheckerGlobals, getBoolean(KonanConfigKeys.CHECK_EXTERNAL_CALLS))
|
||||||
disableUnless(stringConcatenationTypeNarrowingPhase, config.optimizationsEnabled)
|
disableUnless(stringConcatenationTypeNarrowingPhase, config.optimizationsEnabled)
|
||||||
disableUnless(optimizeTLSDataLoadsPhase, config.optimizationsEnabled)
|
disableUnless(optimizeTLSDataLoadsPhase, config.optimizationsEnabled)
|
||||||
if (!config.produce.involvesLinkStage) {
|
if (!config.involvesLinkStage) {
|
||||||
disable(bitcodePostprocessingPhase)
|
disable(bitcodePostprocessingPhase)
|
||||||
disable(linkBitcodeDependenciesPhase)
|
disable(linkBitcodeDependenciesPhase)
|
||||||
disable(objectFilesPhase)
|
disable(objectFilesPhase)
|
||||||
|
|||||||
+2
-2
@@ -2748,7 +2748,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun overrideRuntimeGlobals() {
|
private fun overrideRuntimeGlobals() {
|
||||||
if (!context.config.produce.isFinalBinary)
|
if (!context.config.isFinalBinary)
|
||||||
return
|
return
|
||||||
|
|
||||||
overrideRuntimeGlobal("Kotlin_destroyRuntimeMode", Int32(context.config.destroyRuntimeMode.value))
|
overrideRuntimeGlobal("Kotlin_destroyRuntimeMode", Int32(context.config.destroyRuntimeMode.value))
|
||||||
@@ -2882,7 +2882,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun appendGlobalCtors(ctorFunctions: List<LLVMValueRef>) {
|
private fun appendGlobalCtors(ctorFunctions: List<LLVMValueRef>) {
|
||||||
if (context.config.produce.isFinalBinary) {
|
if (context.config.isFinalBinary) {
|
||||||
// Generate function calling all [ctorFunctions].
|
// Generate function calling all [ctorFunctions].
|
||||||
val globalCtorFunction = generateFunctionNoRuntime(codegen, kVoidFuncType, "_Konan_constructors") {
|
val globalCtorFunction = generateFunctionNoRuntime(codegen, kVoidFuncType, "_Konan_constructors") {
|
||||||
ctorFunctions.forEach {
|
ctorFunctions.forEach {
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportNamer
|
|||||||
|
|
||||||
internal fun patchObjCRuntimeModule(context: Context): LLVMModuleRef? {
|
internal fun patchObjCRuntimeModule(context: Context): LLVMModuleRef? {
|
||||||
val config = context.config
|
val config = context.config
|
||||||
if (!(config.produce.isFinalBinary && config.target.family.isAppleFamily)) return null
|
if (!(config.isFinalBinary && config.target.family.isAppleFamily)) return null
|
||||||
|
|
||||||
val patchBuilder = PatchBuilder(context)
|
val patchBuilder = PatchBuilder(context)
|
||||||
patchBuilder.addObjCPatches()
|
patchBuilder.addObjCPatches()
|
||||||
|
|||||||
+1
-1
@@ -83,7 +83,7 @@ internal class ObjCExport(val context: Context, symbolTable: SymbolTable) {
|
|||||||
ObjCExportBlockCodeGenerator(codegen).generate()
|
ObjCExportBlockCodeGenerator(codegen).generate()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!context.config.produce.isFinalBinary) return // TODO: emit RTTI to the same modules as classes belong to.
|
if (!context.config.isFinalBinary) return // TODO: emit RTTI to the same modules as classes belong to.
|
||||||
|
|
||||||
val mapper = exportedInterface?.mapper ?: ObjCExportMapper(unitSuspendFunctionExport = context.config.unitSuspendFunctionObjCExport)
|
val mapper = exportedInterface?.mapper ?: ObjCExportMapper(unitSuspendFunctionExport = context.config.unitSuspendFunctionObjCExport)
|
||||||
namer = exportedInterface?.namer ?: ObjCExportNamerImpl(
|
namer = exportedInterface?.namer ?: ObjCExportNamerImpl(
|
||||||
|
|||||||
Reference in New Issue
Block a user