[K/N] Add -Xforce-compiler-driver=(static, dynamic) flag

Useful for development purposes when one wants to compare
the outputs of different drivers.
This commit is contained in:
Sergey Bogolepov
2022-10-05 12:34:25 +03:00
committed by Space Team
parent 6ef4277d89
commit d7fff3ca01
4 changed files with 14 additions and 2 deletions
@@ -393,6 +393,9 @@ class K2NativeCompilerArguments : CommonCompilerArguments() {
@Argument(value = "-Xomit-framework-binary", description = "Omit binary when compiling framework")
var omitFrameworkBinary: Boolean = false
@Argument(value = "-Xforce-compiler-driver", description = "Force compiler to use specific compiler driver: static or dynamic")
var forceCompilerDriver: String? = null
override fun configureAnalysisFlags(collector: MessageCollector, languageVersion: LanguageVersion): MutableMap<AnalysisFlag<*>, Any> =
super.configureAnalysisFlags(collector, languageVersion).also {
val optInList = it[AnalysisFlags.optIn] as List<*>
@@ -370,6 +370,7 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
arguments.testDumpOutputPath?.let { put(TEST_DUMP_OUTPUT_PATH, it) }
put(PARTIAL_LINKAGE, arguments.partialLinkage)
put(OMIT_FRAMEWORK_BINARY, arguments.omitFrameworkBinary)
putIfNotNull(FORCE_COMPILER_DRIVER, arguments.forceCompilerDriver)
}
}
}
@@ -177,6 +177,7 @@ class KonanConfigKeys {
val PARTIAL_LINKAGE: CompilerConfigurationKey<Boolean> = CompilerConfigurationKey.create("allows some symbols in klibs be missed")
val TEST_DUMP_OUTPUT_PATH: CompilerConfigurationKey<String?> = CompilerConfigurationKey.create("path to a file to dump the list of all available tests")
val OMIT_FRAMEWORK_BINARY: CompilerConfigurationKey<Boolean> = CompilerConfigurationKey.create("do not generate binary in framework")
val FORCE_COMPILER_DRIVER: CompilerConfigurationKey<String?> = CompilerConfigurationKey.create("explicitly pick compiler driver")
}
}
@@ -38,7 +38,7 @@ class KonanDriver(val project: Project, val environment: KotlinCoreEnvironment,
val konanConfig = KonanConfig(project, configuration)
ensureModuleName(konanConfig)
pickCompilerDriver().run(konanConfig, environment)
pickCompilerDriver(konanConfig).run(konanConfig, environment)
}
private fun ensureModuleName(config: KonanConfig) {
@@ -53,7 +53,14 @@ class KonanDriver(val project: Project, val environment: KotlinCoreEnvironment,
}
}
private fun pickCompilerDriver(): CompilerDriver {
private fun pickCompilerDriver(config: KonanConfig): CompilerDriver {
config.configuration[KonanConfigKeys.FORCE_COMPILER_DRIVER]?.let {
return when (it) {
"dynamic" -> DynamicCompilerDriver()
"static" -> StaticCompilerDriver()
else -> error("Unknown compiler driver. Possible values: dynamic, static")
}
}
// Dynamic driver is WIP, so it might not support all possible configurations.
return if (DynamicCompilerDriver.supportsConfig()) {
DynamicCompilerDriver()