Use KotlinNativeCompilerOptions in KotlinNativeCompile task

^KT-53108 Fixed
This commit is contained in:
Yahor Berdnikau
2023-02-17 17:34:24 +01:00
committed by Space Team
parent 96316a4016
commit 40a4845541
4 changed files with 24 additions and 15 deletions
@@ -24,6 +24,7 @@ import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Exec import org.gradle.api.tasks.Exec
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo.KPM import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo.KPM
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES
@@ -45,6 +46,7 @@ import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
import org.jetbrains.kotlin.gradle.testing.testTaskName import org.jetbrains.kotlin.gradle.testing.testTaskName
import org.jetbrains.kotlin.gradle.utils.Xcode import org.jetbrains.kotlin.gradle.utils.Xcode
import org.jetbrains.kotlin.gradle.utils.klibModuleName
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.gradle.utils.newInstance import org.jetbrains.kotlin.gradle.utils.newInstance
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
@@ -482,7 +484,10 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
val project = compilationInfo.project val project = compilationInfo.project
val compileTaskProvider = project.registerTask<KotlinNativeCompile>( val compileTaskProvider = project.registerTask<KotlinNativeCompile>(
compilationInfo.compileKotlinTaskName, compilationInfo.compileKotlinTaskName,
listOf(compilationInfo) listOf(
compilationInfo,
compilationInfo.compilerOptions.options as KotlinNativeCompilerOptions
)
) { ) {
it.group = BasePlugin.BUILD_GROUP it.group = BasePlugin.BUILD_GROUP
it.description = "Compiles a klibrary from the '${compilationInfo.compilationName}' " + it.description = "Compiles a klibrary from the '${compilationInfo.compilationName}' " +
@@ -490,6 +495,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
it.enabled = konanTarget.enabledOnCurrentHost it.enabled = konanTarget.enabledOnCurrentHost
it.destinationDirectory.set(project.klibOutputDirectory(compilationInfo).resolve("klib")) it.destinationDirectory.set(project.klibOutputDirectory(compilationInfo).resolve("klib"))
it.compilerOptions.moduleName.set(project.klibModuleName(it.baseName))
} }
compilationInfo.classesDirs.from(compileTaskProvider.map { it.outputFile }) compilationInfo.classesDirs.from(compileTaskProvider.map { it.outputFile })
@@ -7,15 +7,16 @@ package org.jetbrains.kotlin.gradle.targets.native
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptionsDefault import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptionsDefault
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToCompilerOptions import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToCompilerOptions
import org.jetbrains.kotlin.project.model.LanguageSettings import org.jetbrains.kotlin.project.model.LanguageSettings
class NativeCompilerOptions(project: Project) : HasCompilerOptions<KotlinCommonCompilerOptions> { class NativeCompilerOptions(project: Project) : HasCompilerOptions<KotlinCommonCompilerOptions> {
override val options: KotlinCommonCompilerOptions = project.objects override val options: KotlinNativeCompilerOptions = project.objects
.newInstance(KotlinCommonCompilerOptionsDefault::class.java) .newInstance(KotlinNativeCompilerOptionsDefault::class.java)
.apply { .apply {
useK2.finalizeValue() useK2.finalizeValue()
} }
@@ -9,6 +9,7 @@ import org.gradle.api.file.FileCollection
import org.gradle.api.file.FileTree import org.gradle.api.file.FileTree
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerToolOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerToolOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions
import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.CompilerOutputKind
@@ -37,10 +38,9 @@ internal fun buildKotlinNativeKlibCompilerArgs(
libraries: List<File>, libraries: List<File>,
languageSettings: LanguageSettings, languageSettings: LanguageSettings,
compilerOptions: KotlinCommonCompilerOptions, compilerOptions: KotlinNativeCompilerOptions,
compilerPlugins: List<CompilerPluginData>, compilerPlugins: List<CompilerPluginData>,
moduleName: String,
shortModuleName: String, shortModuleName: String,
friendModule: FileCollection, friendModule: FileCollection,
libraryVersion: String, libraryVersion: String,
@@ -58,7 +58,7 @@ internal fun buildKotlinNativeKlibCompilerArgs(
} }
// Configure FQ module name to avoid cyclic dependencies in klib manifests (see KT-36721). // Configure FQ module name to avoid cyclic dependencies in klib manifests (see KT-36721).
addArg("-module-name", moduleName) addArg("-module-name", compilerOptions.moduleName.get())
add("-Xshort-module-name=$shortModuleName") add("-Xshort-module-name=$shortModuleName")
val friends = friendModule.files val friends = friendModule.files
@@ -23,6 +23,7 @@ import org.gradle.process.ExecOperations
import org.gradle.work.NormalizeLineEndings import org.gradle.work.NormalizeLineEndings
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments import org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments
import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
import org.jetbrains.kotlin.compilerRunner.* import org.jetbrains.kotlin.compilerRunner.*
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner.Companion.run import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner.Companion.run
import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.dsl.*
@@ -307,12 +308,13 @@ internal constructor(
@get:Internal @get:Internal
@Transient // can't be serialized for Gradle configuration cache @Transient // can't be serialized for Gradle configuration cache
final override val compilation: KotlinCompilationInfo, final override val compilation: KotlinCompilationInfo,
override val compilerOptions: KotlinNativeCompilerOptions,
private val objectFactory: ObjectFactory, private val objectFactory: ObjectFactory,
private val providerFactory: ProviderFactory, private val providerFactory: ProviderFactory,
private val execOperations: ExecOperations private val execOperations: ExecOperations
) : AbstractKotlinNativeCompile<KotlinCommonOptions, StubK2NativeCompilerArguments>(objectFactory), ) : AbstractKotlinNativeCompile<KotlinCommonOptions, StubK2NativeCompilerArguments>(objectFactory),
KotlinCompile<KotlinCommonOptions>, KotlinCompile<KotlinCommonOptions>,
KotlinCompilationTask<KotlinCommonCompilerOptions> { KotlinCompilationTask<KotlinNativeCompilerOptions> {
@get:Input @get:Input
override val outputKind = LIBRARY override val outputKind = LIBRARY
@@ -332,10 +334,12 @@ internal constructor(
// Store as an explicit provider in order to allow Gradle Instant Execution to capture the state // Store as an explicit provider in order to allow Gradle Instant Execution to capture the state
// private val allSourceProvider = compilation.map { project.files(it.allSources).asFileTree } // private val allSourceProvider = compilation.map { project.files(it.allSources).asFileTree }
@get:Input @Deprecated(
val moduleName: String by lazy { message = "Please use 'compilerOptions.moduleName' to configure",
project.klibModuleName(baseName) replaceWith = ReplaceWith("compilerOptions.moduleName.get()")
} )
@get:Internal
val moduleName: String get() = compilerOptions.moduleName.get()
@get:OutputFile @get:OutputFile
override val outputFile: Provider<File> override val outputFile: Provider<File>
@@ -377,8 +381,7 @@ internal constructor(
@Input get() = languageSettings.optInAnnotationsInUse @Input get() = languageSettings.optInAnnotationsInUse
// endregion. // endregion.
// region Kotlin options. // region Kotlin options
override val compilerOptions: KotlinCommonCompilerOptions = compilation.compilerOptions.options
override val kotlinOptions: KotlinCommonOptions = object : KotlinCommonOptions { override val kotlinOptions: KotlinCommonOptions = object : KotlinCommonOptions {
override val options: KotlinCommonCompilerOptions override val options: KotlinCommonCompilerOptions
@@ -471,7 +474,6 @@ internal constructor(
languageSettings, languageSettings,
compilerOptions, compilerOptions,
plugins, plugins,
moduleName,
shortModuleName, shortModuleName,
friendModule, friendModule,
artifactVersion, artifactVersion,