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.TaskProvider
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.KotlinCompilationInfo.KPM
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.testTaskName
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.newInstance
import org.jetbrains.kotlin.konan.target.HostManager
@@ -482,7 +484,10 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
val project = compilationInfo.project
val compileTaskProvider = project.registerTask<KotlinNativeCompile>(
compilationInfo.compileKotlinTaskName,
listOf(compilationInfo)
listOf(
compilationInfo,
compilationInfo.compilerOptions.options as KotlinNativeCompilerOptions
)
) {
it.group = BasePlugin.BUILD_GROUP
it.description = "Compiles a klibrary from the '${compilationInfo.compilationName}' " +
@@ -490,6 +495,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
it.enabled = konanTarget.enabledOnCurrentHost
it.destinationDirectory.set(project.klibOutputDirectory(compilationInfo).resolve("klib"))
it.compilerOptions.moduleName.set(project.klibModuleName(it.baseName))
}
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.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.sources.applyLanguageSettingsToCompilerOptions
import org.jetbrains.kotlin.project.model.LanguageSettings
class NativeCompilerOptions(project: Project) : HasCompilerOptions<KotlinCommonCompilerOptions> {
override val options: KotlinCommonCompilerOptions = project.objects
.newInstance(KotlinCommonCompilerOptionsDefault::class.java)
override val options: KotlinNativeCompilerOptions = project.objects
.newInstance(KotlinNativeCompilerOptionsDefault::class.java)
.apply {
useK2.finalizeValue()
}
@@ -9,6 +9,7 @@ import org.gradle.api.file.FileCollection
import org.gradle.api.file.FileTree
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
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.tasks.CompilerPluginOptions
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
@@ -37,10 +38,9 @@ internal fun buildKotlinNativeKlibCompilerArgs(
libraries: List<File>,
languageSettings: LanguageSettings,
compilerOptions: KotlinCommonCompilerOptions,
compilerOptions: KotlinNativeCompilerOptions,
compilerPlugins: List<CompilerPluginData>,
moduleName: String,
shortModuleName: String,
friendModule: FileCollection,
libraryVersion: String,
@@ -58,7 +58,7 @@ internal fun buildKotlinNativeKlibCompilerArgs(
}
// 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")
val friends = friendModule.files
@@ -23,6 +23,7 @@ import org.gradle.process.ExecOperations
import org.gradle.work.NormalizeLineEndings
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
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.KotlinNativeCInteropRunner.Companion.run
import org.jetbrains.kotlin.gradle.dsl.*
@@ -307,12 +308,13 @@ internal constructor(
@get:Internal
@Transient // can't be serialized for Gradle configuration cache
final override val compilation: KotlinCompilationInfo,
override val compilerOptions: KotlinNativeCompilerOptions,
private val objectFactory: ObjectFactory,
private val providerFactory: ProviderFactory,
private val execOperations: ExecOperations
) : AbstractKotlinNativeCompile<KotlinCommonOptions, StubK2NativeCompilerArguments>(objectFactory),
KotlinCompile<KotlinCommonOptions>,
KotlinCompilationTask<KotlinCommonCompilerOptions> {
KotlinCompilationTask<KotlinNativeCompilerOptions> {
@get:Input
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
// private val allSourceProvider = compilation.map { project.files(it.allSources).asFileTree }
@get:Input
val moduleName: String by lazy {
project.klibModuleName(baseName)
}
@Deprecated(
message = "Please use 'compilerOptions.moduleName' to configure",
replaceWith = ReplaceWith("compilerOptions.moduleName.get()")
)
@get:Internal
val moduleName: String get() = compilerOptions.moduleName.get()
@get:OutputFile
override val outputFile: Provider<File>
@@ -377,8 +381,7 @@ internal constructor(
@Input get() = languageSettings.optInAnnotationsInUse
// endregion.
// region Kotlin options.
override val compilerOptions: KotlinCommonCompilerOptions = compilation.compilerOptions.options
// region Kotlin options
override val kotlinOptions: KotlinCommonOptions = object : KotlinCommonOptions {
override val options: KotlinCommonCompilerOptions
@@ -471,7 +474,6 @@ internal constructor(
languageSettings,
compilerOptions,
plugins,
moduleName,
shortModuleName,
friendModule,
artifactVersion,