From 96316a4016822bcc153238bf28eb7121351abb08 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 16 Feb 2023 18:53:04 +0100 Subject: [PATCH] Generate KotlinNativeCompilerOptions Gradle DSL ^KT-53108 In Progress --- .../arguments/K2NativeCompilerArguments.kt | 11 +++- .../arguments/GenerateGradleOptions.kt | 57 ++++++++++++++++++- .../api/kotlin-gradle-plugin-api.api | 4 ++ .../gradle/dsl/KotlinNativeCompilerOptions.kt | 17 ++++++ .../dsl/KotlinNativeCompilerOptionsDefault.kt | 24 ++++++++ 5 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptions.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptionsDefault.kt diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt index b4181e3271a..0e9b6857a5e 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt @@ -59,7 +59,16 @@ class K2NativeCompilerArguments : CommonCompilerArguments() { @Argument(value="-memory-model", valueDescription = "", description = "Memory model to use, 'strict' and 'experimental' are currently supported") var memoryModel: String? = null - @Argument(value="-module-name", deprecatedName = "-module_name", valueDescription = "", description = "Specify a name for the compilation module") + @GradleOption( + value = DefaultValue.STRING_NULL_DEFAULT, + gradleInputType = GradleInputTypes.INPUT + ) + @Argument( + value = "-module-name", + deprecatedName = "-module_name", + valueDescription = "", + description = "Specify a name for the compilation module" + ) var moduleName: String? = null @Argument( diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt index a882f8da526..60b5951e764 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt @@ -32,7 +32,7 @@ interface AdditionalGradleProperties { private data class GeneratedOptions( val optionsName: FqName, - val deprecatedOptionsName: FqName, + val deprecatedOptionsName: FqName?, val properties: List> ) @@ -92,6 +92,19 @@ fun generateKotlinGradleOptions(withPrinterToFile: (targetFile: File, Printer.() withPrinterToFile ) + val nativeOptions = generateKotlinNativeOptions( + apiSrcDir, + commonCompilerOptions, + withPrinterToFile + ) + generateKotlinNativeOptionsImpl( + srcDir, + nativeOptions.optionsName, + commonCompilerOptionsImplFqName, + nativeOptions.properties, + withPrinterToFile + ) + val jsDceOptions = generateJsDceOptions( apiSrcDir, commonToolOptions, @@ -340,6 +353,48 @@ private fun generateKotlinJsOptionsImpl( } } +private fun generateKotlinNativeOptions( + apiSrcDir: File, + commonCompilerOptions: GeneratedOptions, + withPrinterToFile: (targetFile: File, Printer.() -> Unit) -> Unit +): GeneratedOptions { + val nativeInterfaceFqName = FqName("$OPTIONS_PACKAGE_PREFIX.KotlinNativeCompilerOptions") + val nativeOptions = gradleOptions() + withPrinterToFile(fileFromFqName(apiSrcDir, nativeInterfaceFqName)) { + generateInterface( + nativeInterfaceFqName, + nativeOptions, + parentType = commonCompilerOptions.optionsName, + ) + } + + println("\n### Attributes specific for Native\n") + generateMarkdown(nativeOptions) + + return GeneratedOptions(nativeInterfaceFqName, null, nativeOptions) +} + +private fun generateKotlinNativeOptionsImpl( + srcDir: File, + nativeInterfaceFqName: FqName, + commonCompilerImpl: FqName, + nativeOptions: List>, + withPrinterToFile: (targetFile: File, Printer.() -> Unit) -> Unit +) { + val k2NativeCompilerArgumentsFqName = FqName(K2NativeCompilerArguments::class.qualifiedName!!) + val nativeImplFqName = FqName("${nativeInterfaceFqName.asString()}$IMPLEMENTATION_SUFFIX") + withPrinterToFile(fileFromFqName(srcDir, nativeImplFqName)) { + generateImpl( + nativeImplFqName, + commonCompilerImpl, + nativeInterfaceFqName, + k2NativeCompilerArgumentsFqName, + nativeOptions + ) + } +} + + private fun generateJsDceOptions( apiSrcDir: File, commonToolOptions: GeneratedOptions, diff --git a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api index 4629af85cc6..c8c6503f01d 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api +++ b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api @@ -464,6 +464,10 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinNativeArti public abstract interface annotation class org/jetbrains/kotlin/gradle/dsl/KotlinNativeArtifactDSL$ExperimentalArtifactDsl : java/lang/annotation/Annotation { } +public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptions : org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptions { + public abstract fun getModuleName ()Lorg/gradle/api/provider/Property; +} + public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinNativeFatFramework : org/jetbrains/kotlin/gradle/dsl/KotlinNativeArtifact { public abstract fun getEmbedBitcode ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/BitcodeEmbeddingMode; public abstract fun getTargets ()Ljava/util/Set; diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptions.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptions.kt new file mode 100644 index 00000000000..5ffa9807a94 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptions.kt @@ -0,0 +1,17 @@ +// DO NOT EDIT MANUALLY! +// Generated by org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +// To regenerate run 'generateGradleOptions' task +@file:Suppress("RemoveRedundantQualifierName", "Deprecation", "DuplicatedCode") + +package org.jetbrains.kotlin.gradle.dsl + +interface KotlinNativeCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions { + + /** + * Specify a name for the compilation module + * Default value: null + */ + @get:org.gradle.api.tasks.Optional + @get:org.gradle.api.tasks.Input + val moduleName: org.gradle.api.provider.Property +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptionsDefault.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptionsDefault.kt new file mode 100644 index 00000000000..9562f5c2756 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeCompilerOptionsDefault.kt @@ -0,0 +1,24 @@ +// DO NOT EDIT MANUALLY! +// Generated by org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +// To regenerate run 'generateGradleOptions' task +@file:Suppress("RemoveRedundantQualifierName", "Deprecation", "DuplicatedCode") + +package org.jetbrains.kotlin.gradle.dsl + +internal abstract class KotlinNativeCompilerOptionsDefault @javax.inject.Inject constructor( + objectFactory: org.gradle.api.model.ObjectFactory +) : org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptionsDefault(objectFactory), org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptions { + + override val moduleName: org.gradle.api.provider.Property = + objectFactory.property(kotlin.String::class.java) + + internal fun fillCompilerArguments(args: org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments) { + super.fillCompilerArguments(args) + args.moduleName = moduleName.orNull + } + + internal fun fillDefaultValues(args: org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments) { + super.fillDefaultValues(args) + args.moduleName = null + } +}