From c9ce17522474df5a02e94ffeaafd06a5f98b9ae5 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Fri, 26 May 2017 14:07:37 +0300 Subject: [PATCH] A bit simple file name suffix management. --- .../org/jetbrains/kotlin/cli/bc/K2Native.kt | 25 +++++-------------- .../backend/konan/KonanConfigurationKeys.kt | 10 +++----- .../kotlin/backend/konan/KonanPhases.kt | 6 ++--- .../konan/library/SearchPathResolver.kt | 8 ++---- .../kotlin/backend/konan/util/util.kt | 5 ++++ 5 files changed, 19 insertions(+), 35 deletions(-) diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index 910de7c36b6..6169b7f3b96 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -20,6 +20,8 @@ import com.intellij.openapi.Disposable import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.CompilerOutputKind.* import org.jetbrains.kotlin.backend.konan.util.profile +import org.jetbrains.kotlin.backend.konan.util.suffixIfNot +import org.jetbrains.kotlin.backend.konan.util.removeSuffixIfPresent import org.jetbrains.kotlin.cli.common.CLICompiler import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles @@ -50,9 +52,6 @@ private fun maybeExecuteHelper(configuration: CompilerConfiguration) { } } -private fun suffixIfNot(name: String, suffix: String) = - if (name.endsWith(suffix)) name else "$name$suffix" - class K2Native : CLICompiler() { override fun doExecute(arguments : K2NativeCompilerArguments, @@ -113,23 +112,11 @@ class K2Native : CLICompiler() { (arguments.produce ?: "program").toUpperCase()) put(PRODUCE, outputKind) - val (defaultName, suffix) = when (outputKind) { - CompilerOutputKind.LIBRARY -> { - put(NOLINK, true) - Pair("library", ".klib") - } - CompilerOutputKind.PROGRAM -> { - put(NOLINK, false) - Pair("program", ".kexe") - } - CompilerOutputKind.BITCODE -> { - put(NOLINK, true) - Pair("output", ".bc") - } - } - val output = arguments.outputFile ?: defaultName + val suffix = outputKind.suffix + val output = arguments.outputFile?.removeSuffixIfPresent(suffix) + ?: outputKind.name.toLowerCase() put(OUTPUT_NAME, output) - put(OUTPUT_FILE, suffixIfNot(output, suffix)) + put(OUTPUT_FILE, output.suffixIfNot(outputKind.suffix)) // This is a decision we could change put(CommonConfigurationKeys.MODULE_NAME, output) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt index 59b0cd83eda..8dcf7b29052 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt @@ -46,8 +46,6 @@ class KonanConfigKeys { = CompilerConfigurationKey.create("module kind") val NATIVE_LIBRARY_FILES: CompilerConfigurationKey> = CompilerConfigurationKey.create("native library file paths") - val NOLINK: CompilerConfigurationKey - = CompilerConfigurationKey.create("don't link, only produce a bitcode file ") val NOMAIN: CompilerConfigurationKey = CompilerConfigurationKey.create("assume 'main' entry point to be provided by external libraries") val NOSTDLIB: CompilerConfigurationKey @@ -95,8 +93,8 @@ class KonanConfigKeys { } } -enum class CompilerOutputKind { - PROGRAM, - LIBRARY, - BITCODE +enum class CompilerOutputKind(val suffix: String) { + PROGRAM(".kexe"), + LIBRARY(".klib"), + BITCODE(".bc") } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt index 18cb6b95e8f..9094809f22a 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt @@ -77,6 +77,8 @@ object KonanPhases { // Don't serialize anything to a final executable. KonanPhase.SERIALIZER.enabled = (get(PRODUCE) == CompilerOutputKind.LIBRARY) + KonanPhase.LINK_STAGE.enabled = + (get(PRODUCE) == CompilerOutputKind.PROGRAM) val disabled = get(DISABLED_PHASES) disabled?.forEach { phases[known(it)]!!.enabled = false } @@ -86,10 +88,6 @@ object KonanPhases { val verbose = get(VERBOSE_PHASES) verbose?.forEach { phases[known(it)]!!.verbose = true } - - if (get(NOLINK) ?: false ) { - KonanPhase.LINK_STAGE.enabled = false - } }} } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt index 439f0c16211..d99ba7774d2 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt @@ -19,18 +19,14 @@ package org.jetbrains.kotlin.backend.konan.library import org.jetbrains.kotlin.backend.konan.Distribution import org.jetbrains.kotlin.backend.konan.KonanProperties import org.jetbrains.kotlin.backend.konan.util.File +import org.jetbrains.kotlin.backend.konan.util.suffixIfNot +import org.jetbrains.kotlin.backend.konan.util.removeSuffixIfPresent interface SearchPathResolver { val searchRoots: List fun resolve(givenPath: String): File } -fun String.suffixIfNot(suffix: String) = - if (this.endsWith(suffix)) this else "$this$suffix" - -fun String.removeSuffixIfPresent(suffix: String) = - if (this.endsWith(suffix)) this.dropLast(suffix.length) else this - class KonanLibrarySearchPathResolver(repositories: List, val distribution: Distribution): SearchPathResolver { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/util/util.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/util/util.kt index b866b254af0..6459a68f824 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/util/util.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/util/util.kt @@ -51,3 +51,8 @@ fun T.onlyIf(condition: T.()->Boolean, then: (T)->Unit): T { return this } +fun String.suffixIfNot(suffix: String) = + if (this.endsWith(suffix)) this else "$this$suffix" + +fun String.removeSuffixIfPresent(suffix: String) = + if (this.endsWith(suffix)) this.dropLast(suffix.length) else this