From cf3855a396a862489258c039f5968add9c4a9828 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 12 Sep 2022 14:04:01 +0200 Subject: [PATCH] KotlinNativeCompilerArgBuilder now uses compiler options ^KT-27301 In Progress --- .../tasks/KotlinNativeCompilerArgBuilder.kt | 51 +++++++++++++------ .../artifact/KotlinNativeLinkArtifactTask.kt | 2 +- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt index 62689c1ae78..38ea0466723 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt @@ -7,7 +7,8 @@ package org.jetbrains.kotlin.gradle.targets.native.tasks import org.gradle.api.file.FileCollection import org.gradle.api.file.FileTree -import org.jetbrains.kotlin.gradle.dsl.KotlinCommonToolOptions +import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions +import org.jetbrains.kotlin.gradle.dsl.CompilerCommonToolOptions import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions import org.jetbrains.kotlin.konan.target.CompilerOutputKind @@ -34,7 +35,7 @@ internal fun buildKotlinNativeKlibCompilerArgs( languageSettings: LanguageSettings, enableEndorsedLibs: Boolean, - kotlinOptions: KotlinCommonToolOptions, + compilerOptions: CompilerCommonOptions, compilerPlugins: List, moduleName: String, @@ -62,7 +63,7 @@ internal fun buildKotlinNativeKlibCompilerArgs( addArg("-friend-modules", friends.joinToString(File.pathSeparator) { it.absolutePath }) } - addAll(buildKotlinNativeCommonArgs(languageSettings, enableEndorsedLibs, kotlinOptions, compilerPlugins)) + addAll(buildKotlinNativeCompileCommonArgs(enableEndorsedLibs, languageSettings, compilerOptions, compilerPlugins)) addAll(source.map { it.absolutePath }) if (!commonSourcesTree.isEmpty) { @@ -80,7 +81,7 @@ internal fun buildKotlinNativeBinaryLinkerArgs( friendModules: List, enableEndorsedLibs: Boolean, - kotlinOptions: KotlinCommonToolOptions, + toolOptions: CompilerCommonToolOptions, compilerPlugins: List, processTests: Boolean, @@ -107,7 +108,7 @@ internal fun buildKotlinNativeBinaryLinkerArgs( binaryOptions.forEach { (name, value) -> add("-Xbinary=$name=$value") } addKey("-Xstatic-framework", isStaticFramework) - addAll(buildKotlinNativeCommonArgs(null, enableEndorsedLibs, kotlinOptions, compilerPlugins)) + addAll(buildKotlinNativeCommonArgs(enableEndorsedLibs, toolOptions, compilerPlugins)) exportLibraries.forEach { add("-Xexport-library=${it.absolutePath}") } includeLibraries.forEach { add("-Xinclude=${it.absolutePath}") } @@ -134,10 +135,10 @@ private fun buildKotlinNativeMainArgs( libraries.forEach { addArg("-l", it.absolutePath) } } -internal fun buildKotlinNativeCommonArgs( - languageSettings: LanguageSettings?, //null for linking +internal fun buildKotlinNativeCompileCommonArgs( enableEndorsedLibs: Boolean, - kotlinOptions: KotlinCommonToolOptions, + languageSettings: LanguageSettings, + compilerOptions: CompilerCommonOptions, compilerPlugins: List ): List = mutableListOf().apply { add("-Xmulti-platform") @@ -148,19 +149,39 @@ internal fun buildKotlinNativeCommonArgs( addArgs("-P", plugin.options.arguments) } - languageSettings?.run { - addArgIfNotNull("-language-version", languageVersion) - addArgIfNotNull("-api-version", apiVersion) + languageSettings.run { addKey("-progressive", progressiveMode) enabledLanguageFeatures.forEach { add("-XXLanguage:+$it") } optInAnnotationsInUse.forEach { add("-opt-in=$it") } } - addKey("-Werror", kotlinOptions.allWarningsAsErrors) - addKey("-nowarn", kotlinOptions.suppressWarnings) - addKey("-verbose", kotlinOptions.verbose) + addArgIfNotNull("-language-version", compilerOptions.languageVersion.orNull?.version) + addArgIfNotNull("-api-version", compilerOptions.apiVersion.orNull?.version) + addKey("-Werror", compilerOptions.allWarningsAsErrors.get()) + addKey("-nowarn", compilerOptions.suppressWarnings.get()) + addKey("-verbose", compilerOptions.verbose.get()) - addAll(kotlinOptions.freeCompilerArgs) + addAll(compilerOptions.freeCompilerArgs.get()) +} + +internal fun buildKotlinNativeCommonArgs( + enableEndorsedLibs: Boolean, + toolOptions: CompilerCommonToolOptions, + compilerPlugins: List +): List = mutableListOf().apply { + add("-Xmulti-platform") + addKey("-no-endorsed-libs", !enableEndorsedLibs) + + compilerPlugins.forEach { plugin -> + plugin.files.map { it.canonicalPath }.sorted().forEach { add("-Xplugin=$it") } + addArgs("-P", plugin.options.arguments) + } + + addKey("-Werror", toolOptions.allWarningsAsErrors.get()) + addKey("-nowarn", toolOptions.suppressWarnings.get()) + addKey("-verbose", toolOptions.verbose.get()) + + addAll(toolOptions.freeCompilerArgs.get()) } private fun MutableList.addArg(parameter: String, value: String) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt index 2463e966d15..8a803cd2e64 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt @@ -171,7 +171,7 @@ open class KotlinNativeLinkArtifactTask @Inject constructor( libraries = libraries.klibs(), friendModules = emptyList(), //FriendModules aren't needed here because it's no test artifact enableEndorsedLibs = enableEndorsedLibs, - kotlinOptions = kotlinOptions, + toolOptions = kotlinOptions, compilerPlugins = emptyList(),//CompilerPlugins aren't needed here because it's no compilation but linking processTests = processTests, entryPoint = entryPoint,