Provide a forced compiler version compatibility -X control.

This commit is contained in:
Alexander Gorshenev
2018-09-20 16:55:01 +03:00
committed by alexander-gorshenev
parent 0786cc3e76
commit 30fd4060d3
5 changed files with 19 additions and 4 deletions
@@ -175,6 +175,9 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
put(LIST_PHASES, arguments.listPhases)
put(TIME_PHASES, arguments.timePhases)
put(COMPATIBLE_COMPILER_VERSIONS,
arguments.compatibleCompilerVersions.toNonNullList())
put(ENABLE_ASSERTIONS, arguments.enableAssertions)
put(GENERATE_TEST_RUNNER, arguments.generateTestRunner)
@@ -81,12 +81,15 @@ class K2NativeCompilerArguments : CommonCompilerArguments() {
var target: String? = null
// The rest of the options are only interesting to the developers.
// Make sure to prepend them with a double dash.
// Make sure to prepend them with -X.
// Keep the list lexically sorted.
@Argument(value="-Xcheck-dependencies", deprecatedName = "--check_dependencies", description = "Check dependencies and download the missing ones")
var checkDependencies: Boolean = false
@Argument(value="-Xcompatible-compiler-version", valueDescription = "<version>", description = "Assume the given compiler version to be binary compatible")
var compatibleCompilerVersions: Array<String>? = null
@Argument(value = "-Xdisable", deprecatedName = "--disable", valueDescription = "<Phase>", description = "Disable backend phase")
var disablePhases: Array<String>? = null
@@ -21,7 +21,9 @@ import org.jetbrains.kotlin.konan.library.libraryResolver
import org.jetbrains.kotlin.konan.properties.loadProperties
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.KonanAbiVersion
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.library.toUnresolvedLibraries
import org.jetbrains.kotlin.konan.parseKonanVersion
class KonanConfig(val project: Project, val configuration: CompilerConfiguration) {
@@ -76,12 +78,16 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
private val repositories = configuration.getList(KonanConfigKeys.REPOSITORIES)
private fun resolverLogger(msg: String) = configuration.report(STRONG_WARNING, msg)
private val compatibleCompilerVersions: List<KonanVersion> =
configuration.getList(KonanConfigKeys.COMPATIBLE_COMPILER_VERSIONS).map { it.parseKonanVersion() }
private val resolver = defaultResolver(
repositories,
libraryNames.filter { it.contains(File.separator) },
target,
distribution,
::resolverLogger
::resolverLogger,
compatibleCompilerVersions = compatibleCompilerVersions
).libraryResolver()
internal val resolvedLibraries by lazy {
@@ -14,6 +14,8 @@ class KonanConfigKeys {
// Keep the list lexically sorted.
val CHECK_DEPENDENCIES: CompilerConfigurationKey<Boolean>
= CompilerConfigurationKey.create("check dependencies and download the missing ones")
val COMPATIBLE_COMPILER_VERSIONS: CompilerConfigurationKey<List<String>>
= CompilerConfigurationKey.create("compatible compiler versions")
val DEBUG: CompilerConfigurationKey<Boolean>
= CompilerConfigurationKey.create("add debug information")
val DISABLED_PHASES: CompilerConfigurationKey<List<String>>
@@ -39,13 +39,14 @@ fun defaultResolver(
target: KonanTarget,
distribution: Distribution,
logger: Logger = ::dummyLogger,
skipCurrentDir: Boolean = false
skipCurrentDir: Boolean = false,
compatibleCompilerVersions: List<KonanVersion> = emptyList()
): SearchPathResolverWithTarget = KonanLibraryProperResolver(
repositories,
directLibs,
target,
listOf(KonanAbiVersion.CURRENT),
listOf(KonanVersion.CURRENT),
listOf(KonanVersion.CURRENT) + compatibleCompilerVersions,
distribution.klib,
distribution.localKonanDir.absolutePath,
skipCurrentDir,