[PL] Disallow partial linkage when compiler is configured to produce KLIB

Partial linkage is intended for producing binaries, not libraries.
This commit is contained in:
Dmitriy Dolovov
2023-03-30 15:41:41 +02:00
committed by Space Team
parent 1fef48bb60
commit b7d0209e4b
3 changed files with 36 additions and 12 deletions
@@ -44,11 +44,25 @@ enum class PartialLinkageLogLevel {
val CompilerConfiguration.partialLinkageConfig: PartialLinkageConfig
get() = this[PartialLinkageConfig.KEY] ?: PartialLinkageConfig.DEFAULT
inline fun CompilerConfiguration.setupPartialLinkageConfig(mode: String?, logLevel: String?, onError: (String) -> Unit) {
val resolvedMode = if (mode != null)
PartialLinkageMode.resolveMode(mode) ?: return onError("Unknown partial linkage mode '$mode'")
else
PartialLinkageMode.DEFAULT
fun CompilerConfiguration.setupPartialLinkageConfig(
mode: String?,
logLevel: String?,
compilerModeAllowsUsingPartialLinkage: Boolean,
onWarning: (String) -> Unit,
onError: (String) -> Unit
) {
val resolvedMode = when {
mode != null -> {
val resolvedMode = PartialLinkageMode.resolveMode(mode) ?: return onError("Unknown partial linkage mode '$mode'")
if (!compilerModeAllowsUsingPartialLinkage && resolvedMode.isEnabled) {
onWarning("Current compiler configuration does not allow using partial linkage mode '$mode'. The partial linkage will be disabled.")
PartialLinkageMode.DISABLE
} else
resolvedMode
}
!compilerModeAllowsUsingPartialLinkage -> PartialLinkageMode.DISABLE
else -> PartialLinkageMode.DEFAULT
}
val resolvedLogLevel = if (logLevel != null)
PartialLinkageLogLevel.resolveLogLevel(logLevel) ?: return onError("Unknown partial linkage compile-time log level '$logLevel'")