Add KotlinArtifactsExtensionImpl code generator.

This commit is contained in:
konstantin.tskhovrebov
2022-04-14 18:04:34 +02:00
committed by Space
parent 3085f6bacf
commit e974d16e7a
4 changed files with 151 additions and 49 deletions
@@ -24,6 +24,17 @@ val generateAbstractBinaryContainer by generator(
group = generateGroupName
}
val generateAbstractKotlinArtifactsExtensionImplementation by generator(
"org.jetbrains.kotlin.generators.gradle.dsl.KotlinArtifactsDSLCodegenKt",
sourceSets["main"]
) {
group = generateGroupName
systemProperty(
"org.jetbrains.kotlin.generators.gradle.dsl.outputSourceRoot",
project(":kotlin-gradle-plugin").projectDir.resolve("src/common/kotlin").absolutePath
)
}
val generateKpmNativeVariants by generator(
"org.jetbrains.kotlin.generators.gradle.dsl.KpmNativeVariantCodegenKt",
sourceSets["main"]
@@ -0,0 +1,81 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.generators.gradle.dsl
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File
fun main() {
generateAbstractKotlinArtifactsExtensionImplementation()
}
private fun generateAbstractKotlinArtifactsExtensionImplementation() {
val className = typeName("org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.KotlinArtifactsExtensionImpl")
val imports = """
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.KotlinArtifact
import org.jetbrains.kotlin.gradle.dsl.KotlinArtifactConfig
import org.jetbrains.kotlin.gradle.dsl.KotlinArtifactsExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject
""".trimIndent()
val generatedCodeWarning = "// DO NOT EDIT MANUALLY! Generated by ${object {}.javaClass.enclosingClass.name}"
val overrides = listOf(
"override val artifactConfigs = project.objects.domainObjectSet(KotlinArtifactConfig::class.java)",
"override val artifacts = project.objects.namedDomainObjectSet(KotlinArtifact::class.java)",
"override val Native = project.objects.newInstance(KotlinNativeArtifactDSLImpl::class.java, project)"
).joinToString("\n").indented(4)
val buildTypeConstants = NativeBuildType.values().joinToString("\n") {
"val ${it.name} = NativeBuildType.${it.name}"
}.indented(4)
val bitcodeModeConstants = BitcodeEmbeddingMode.values().joinToString(
separator = "\n",
prefix = "class BitcodeEmbeddingModeDsl {\n",
postfix = "\n}"
) {
"val ${it.name} = BitcodeEmbeddingMode.${it.name}".indented(4)
}.indented(4)
val bitcodeMode = listOf(
"@JvmField",
"val EmbedBitcodeMode = BitcodeEmbeddingModeDsl()"
).joinToString("\n").indented(4)
val konanTargetConstants = KonanTarget.predefinedTargets.values.joinToString("\n") {
val nameParts = it.name.split("_")
val name = nameParts.drop(1).joinToString(
separator = "",
prefix = nameParts.first(),
transform = String::capitalize
)
"val $name = KonanTarget.${it.name.toUpperCase()}"
}.indented(4)
val code = listOf(
"package ${className.packageName()}",
imports,
generatedCodeWarning,
"abstract class ${className.shortName()} @Inject constructor(project: Project) : KotlinArtifactsExtension {",
overrides,
buildTypeConstants,
bitcodeModeConstants,
bitcodeMode,
konanTargetConstants,
"}"
).joinToString(separator = "\n\n")
val targetFile = File("$outputSourceRoot/${className.fqName.replace(".", "/")}.kt")
targetFile.writeText(code)
}
@@ -6,14 +6,10 @@
package org.jetbrains.kotlin.gradle.targets.native.tasks.artifact
import org.gradle.api.Action
import org.gradle.api.DomainObjectSet
import org.gradle.api.NamedDomainObjectSet
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
import org.jetbrains.kotlin.gradle.utils.castIsolatedKotlinPluginClassLoaderAware
import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject
private const val KOTLIN_ARTIFACTS_EXTENSION_NAME = "kotlinArtifacts"
@@ -26,51 +22,6 @@ internal fun Project.registerKotlinArtifactsExtension() {
val Project.kotlinArtifactsExtension: KotlinArtifactsExtension
get() = extensions.getByName(KOTLIN_ARTIFACTS_EXTENSION_NAME).castIsolatedKotlinPluginClassLoaderAware()
abstract class KotlinArtifactsExtensionImpl @Inject constructor(project: Project) : KotlinArtifactsExtension {
override val artifactConfigs = project.objects.domainObjectSet(KotlinArtifactConfig::class.java)
override val artifacts = project.objects.namedDomainObjectSet(KotlinArtifact::class.java)
override val Native = project.objects.newInstance(KotlinNativeArtifactDSLImpl::class.java, project)
val DEBUG = NativeBuildType.DEBUG
val RELEASE = NativeBuildType.RELEASE
class BitcodeEmbeddingModeDsl {
val DISABLE = org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.DISABLE
val BITCODE = org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.BITCODE
val MARKER = org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.MARKER
}
@JvmField
val EmbedBitcodeMode = BitcodeEmbeddingModeDsl()
val androidX64 = KonanTarget.ANDROID_X64
val androidX86 = KonanTarget.ANDROID_X86
val androidArm32 = KonanTarget.ANDROID_ARM32
val androidArm64 = KonanTarget.ANDROID_ARM64
val iosArm32 = KonanTarget.IOS_ARM32
val iosArm64 = KonanTarget.IOS_ARM64
val iosX64 = KonanTarget.IOS_X64
val iosSimulatorArm64 = KonanTarget.IOS_SIMULATOR_ARM64
val watchosArm32 = KonanTarget.WATCHOS_ARM32
val watchosArm64 = KonanTarget.WATCHOS_ARM64
val watchosX86 = KonanTarget.WATCHOS_X86
val watchosX64 = KonanTarget.WATCHOS_X64
val watchosSimulatorArm64 = KonanTarget.WATCHOS_SIMULATOR_ARM64
val tvosArm64 = KonanTarget.TVOS_ARM64
val tvosX64 = KonanTarget.TVOS_X64
val tvosSimulatorArm64 = KonanTarget.TVOS_SIMULATOR_ARM64
val linuxX64 = KonanTarget.LINUX_X64
val mingwX86 = KonanTarget.MINGW_X86
val mingwX64 = KonanTarget.MINGW_X64
val macosX64 = KonanTarget.MACOS_X64
val macosArm64 = KonanTarget.MACOS_ARM64
val linuxArm64 = KonanTarget.LINUX_ARM64
val linuxArm32Hfp = KonanTarget.LINUX_ARM32_HFP
val linuxMips32 = KonanTarget.LINUX_MIPS32
val linuxMipsel32 = KonanTarget.LINUX_MIPSEL32
val wasm32 = KonanTarget.WASM32
}
abstract class KotlinNativeArtifactDSLImpl @Inject constructor(private val project: Project) : KotlinNativeArtifactDSL {
companion object {
private val UNSAFE_NAME_SYMBOLS = """\W""".toRegex()
@@ -0,0 +1,59 @@
package org.jetbrains.kotlin.gradle.targets.native.tasks.artifact
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.KotlinArtifact
import org.jetbrains.kotlin.gradle.dsl.KotlinArtifactConfig
import org.jetbrains.kotlin.gradle.dsl.KotlinArtifactsExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject
// DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.KotlinArtifactsDSLCodegenKt
abstract class KotlinArtifactsExtensionImpl @Inject constructor(project: Project) : KotlinArtifactsExtension {
override val artifactConfigs = project.objects.domainObjectSet(KotlinArtifactConfig::class.java)
override val artifacts = project.objects.namedDomainObjectSet(KotlinArtifact::class.java)
override val Native = project.objects.newInstance(KotlinNativeArtifactDSLImpl::class.java, project)
val RELEASE = NativeBuildType.RELEASE
val DEBUG = NativeBuildType.DEBUG
class BitcodeEmbeddingModeDsl {
val DISABLE = BitcodeEmbeddingMode.DISABLE
val BITCODE = BitcodeEmbeddingMode.BITCODE
val MARKER = BitcodeEmbeddingMode.MARKER
}
@JvmField
val EmbedBitcodeMode = BitcodeEmbeddingModeDsl()
val androidX64 = KonanTarget.ANDROID_X64
val androidX86 = KonanTarget.ANDROID_X86
val androidArm32 = KonanTarget.ANDROID_ARM32
val androidArm64 = KonanTarget.ANDROID_ARM64
val iosArm32 = KonanTarget.IOS_ARM32
val iosArm64 = KonanTarget.IOS_ARM64
val iosX64 = KonanTarget.IOS_X64
val iosSimulatorArm64 = KonanTarget.IOS_SIMULATOR_ARM64
val watchosArm32 = KonanTarget.WATCHOS_ARM32
val watchosArm64 = KonanTarget.WATCHOS_ARM64
val watchosX86 = KonanTarget.WATCHOS_X86
val watchosX64 = KonanTarget.WATCHOS_X64
val watchosSimulatorArm64 = KonanTarget.WATCHOS_SIMULATOR_ARM64
val tvosArm64 = KonanTarget.TVOS_ARM64
val tvosX64 = KonanTarget.TVOS_X64
val tvosSimulatorArm64 = KonanTarget.TVOS_SIMULATOR_ARM64
val linuxX64 = KonanTarget.LINUX_X64
val mingwX86 = KonanTarget.MINGW_X86
val mingwX64 = KonanTarget.MINGW_X64
val macosX64 = KonanTarget.MACOS_X64
val macosArm64 = KonanTarget.MACOS_ARM64
val linuxArm64 = KonanTarget.LINUX_ARM64
val linuxArm32Hfp = KonanTarget.LINUX_ARM32_HFP
val linuxMips32 = KonanTarget.LINUX_MIPS32
val linuxMipsel32 = KonanTarget.LINUX_MIPSEL32
val wasm32 = KonanTarget.WASM32
}