diff --git a/SKIE/settings.gradle.kts b/SKIE/settings.gradle.kts index cf35cc57d..ba9e5b267 100644 --- a/SKIE/settings.gradle.kts +++ b/SKIE/settings.gradle.kts @@ -52,6 +52,8 @@ buildSetup { val gradle by group("skie-gradle") { val plugin by module + val `plugin-api` by module + val `sub-plugin-api` by module val `plugin-shim-api` by module val `plugin-shim-impl` by module } diff --git a/SKIE/skie-gradle/plugin-api/gradle-plugin-api.gradle.kts b/SKIE/skie-gradle/plugin-api/gradle-plugin-api.gradle.kts new file mode 100644 index 000000000..3fb3bb2a6 --- /dev/null +++ b/SKIE/skie-gradle/plugin-api/gradle-plugin-api.gradle.kts @@ -0,0 +1,21 @@ +plugins { + id("skie.gradle") + id("skie.publishable") +} + +skiePublishing { + name = "SKIE Gradle Plugin API" + description = "Public API for SKIE Gradle plugin." +} + +kotlin { + sourceSets { + val commonMain by getting { + dependencies { + api(projects.common.configuration.configurationDeclaration) + + implementation(projects.common.util) + } + } + } +} diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieAnalyticsConfiguration.kt b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieAnalyticsConfiguration.kt similarity index 100% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieAnalyticsConfiguration.kt rename to SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieAnalyticsConfiguration.kt diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieBuildConfiguration.kt b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieBuildConfiguration.kt similarity index 76% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieBuildConfiguration.kt rename to SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieBuildConfiguration.kt index 4b212e92d..7eb2508f6 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieBuildConfiguration.kt +++ b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieBuildConfiguration.kt @@ -3,8 +3,7 @@ package co.touchlab.skie.plugin.configuration import co.touchlab.skie.configuration.SkieConfigurationFlag -import co.touchlab.skie.plugin.SkieTarget -import co.touchlab.skie.plugin.configuration.util.takeIf +import co.touchlab.skie.plugin.util.takeIf import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import javax.inject.Inject @@ -24,18 +23,11 @@ abstract class SkieBuildConfiguration @Inject constructor(objects: ObjectFactory val enableConcurrentSkieCompilation: Property = objects.property(Boolean::class.java).convention(true) val enableParallelSkieCompilation: Property = objects.property(Boolean::class.java).convention(true) - internal fun buildConfigurationFlags(outputKind: SkieTarget.OutputKind): Set = + internal fun buildConfigurationFlags(): Set = setOfNotNull( - decideSwiftLibraryEvolutionFlag(outputKind), + SkieConfigurationFlag.Build_SwiftLibraryEvolution takeIf enableSwiftLibraryEvolution, SkieConfigurationFlag.Build_ParallelSwiftCompilation takeIf enableParallelSwiftCompilation, SkieConfigurationFlag.Build_ConcurrentSkieCompilation takeIf enableConcurrentSkieCompilation, SkieConfigurationFlag.Build_ParallelSkieCompilation takeIf enableParallelSkieCompilation, ) - - private fun decideSwiftLibraryEvolutionFlag(outputKind: SkieTarget.OutputKind) = - if (outputKind == SkieTarget.OutputKind.XCFramework) { - SkieConfigurationFlag.Build_SwiftLibraryEvolution - } else { - SkieConfigurationFlag.Build_SwiftLibraryEvolution takeIf enableSwiftLibraryEvolution - } } diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieDebugConfiguration.kt b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieDebugConfiguration.kt similarity index 97% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieDebugConfiguration.kt rename to SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieDebugConfiguration.kt index eb2fe683a..6bc6a158a 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieDebugConfiguration.kt +++ b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieDebugConfiguration.kt @@ -3,7 +3,7 @@ package co.touchlab.skie.plugin.configuration import co.touchlab.skie.configuration.SkieConfigurationFlag -import co.touchlab.skie.plugin.configuration.util.takeIf +import co.touchlab.skie.plugin.util.takeIf import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import javax.inject.Inject diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieExtension.kt b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieExtension.kt similarity index 59% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieExtension.kt rename to SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieExtension.kt index 756c50d5d..c9add06ce 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieExtension.kt +++ b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieExtension.kt @@ -3,10 +3,7 @@ package co.touchlab.skie.plugin.configuration import co.touchlab.skie.configuration.SkieConfigurationFlag -import co.touchlab.skie.plugin.SkieTarget -import co.touchlab.skie.plugin.configuration.util.GradleSkieConfigurationData import org.gradle.api.Action -import org.gradle.api.Project import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import org.gradle.api.provider.SetProperty @@ -55,26 +52,5 @@ open class SkieExtension @Inject constructor(objects: ObjectFactory) { action.execute(migration) } - // Putting these extensions here so that they don't pollute the extension's namespace. They can be used by wrapping in `with(SkieExtension) { ... }` - companion object { - - fun createExtension(project: Project): SkieExtension = - project.extensions.create("skie", SkieExtension::class.java) - - fun SkieExtension.buildConfiguration(outputKind: SkieTarget.OutputKind): GradleSkieConfigurationData = - GradleSkieConfigurationData( - enabledConfigurationFlags = (mergeConfigurationSetsFromConfigurations(outputKind) + additionalConfigurationFlags.get()) - suppressedConfigurationFlags.get(), - groups = features.buildGroups(), - ) - - private fun SkieExtension.mergeConfigurationSetsFromConfigurations(outputKind: SkieTarget.OutputKind) = - analytics.buildConfigurationFlags() + - build.buildConfigurationFlags(outputKind) + - debug.buildConfigurationFlags() + - features.buildConfigurationFlags() + - migration.buildConfigurationFlags() - } + companion object } - -internal val Project.skieExtension: SkieExtension - get() = project.extensions.getByType(SkieExtension::class.java) diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieFeatureConfiguration.kt b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieFeatureConfiguration.kt similarity index 75% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieFeatureConfiguration.kt rename to SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieFeatureConfiguration.kt index 8fb900eea..0d08535c2 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieFeatureConfiguration.kt +++ b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieFeatureConfiguration.kt @@ -1,9 +1,10 @@ +@file:Suppress("MemberVisibilityCanBePrivate") + package co.touchlab.skie.plugin.configuration import co.touchlab.skie.configuration.ConfigurationKey import co.touchlab.skie.configuration.SkieConfigurationFlag -import co.touchlab.skie.plugin.configuration.util.GradleSkieConfigurationData -import co.touchlab.skie.plugin.configuration.util.takeIf +import co.touchlab.skie.plugin.util.takeIf import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import javax.inject.Inject @@ -25,7 +26,7 @@ abstract class SkieFeatureConfiguration @Inject constructor(objects: ObjectFacto */ val defaultArgumentsInExternalLibraries: Property = objects.property(Boolean::class.java).convention(false) - private val groupConfigurations = mutableListOf() + internal val groupConfigurations = mutableListOf() fun group(targetFqNamePrefix: String = "", overridesAnnotations: Boolean = false, action: GroupConfiguration.() -> Unit) { val groupConfiguration = GroupConfiguration(targetFqNamePrefix, overridesAnnotations) @@ -36,26 +37,17 @@ abstract class SkieFeatureConfiguration @Inject constructor(objects: ObjectFacto } class GroupConfiguration( - private val targetFqNamePrefix: String, - private val overridesAnnotations: Boolean, + internal val targetFqNamePrefix: String, + internal val overridesAnnotations: Boolean, ) { - private val items = mutableMapOf() + internal val items = mutableMapOf() operator fun ConfigurationKey.invoke(value: T) { items[this.name] = this.serialize(value) } - - internal fun build(): GradleSkieConfigurationData.Group = GradleSkieConfigurationData.Group( - target = targetFqNamePrefix, - overridesAnnotations = overridesAnnotations, - items = items.toMap(), - ) } - internal fun buildGroups(): List = - groupConfigurations.map { it.build() } - internal fun buildConfigurationFlags(): Set = setOfNotNull( SkieConfigurationFlag.Feature_CoroutinesInterop takeIf coroutinesInterop, diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieMigrationConfiguration.kt b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieMigrationConfiguration.kt similarity index 96% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieMigrationConfiguration.kt rename to SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieMigrationConfiguration.kt index 281545ac1..a433461f2 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieMigrationConfiguration.kt +++ b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/configuration/SkieMigrationConfiguration.kt @@ -3,7 +3,7 @@ package co.touchlab.skie.plugin.configuration import co.touchlab.skie.configuration.SkieConfigurationFlag -import co.touchlab.skie.plugin.configuration.util.takeIf +import co.touchlab.skie.plugin.util.takeIf import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import javax.inject.Inject diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/util/BooleanProperty.takeIf.kt b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/util/BooleanProperty.takeIf.kt similarity index 75% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/util/BooleanProperty.takeIf.kt rename to SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/util/BooleanProperty.takeIf.kt index 9af47275a..d0937899e 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/util/BooleanProperty.takeIf.kt +++ b/SKIE/skie-gradle/plugin-api/src/common/kotlin/co/touchlab/skie/plugin/util/BooleanProperty.takeIf.kt @@ -1,4 +1,4 @@ -package co.touchlab.skie.plugin.configuration.util +package co.touchlab.skie.plugin.util import org.gradle.api.provider.Property diff --git a/SKIE/skie-gradle/plugin-shim-api/gradle-plugin-shim-api.gradle.kts b/SKIE/skie-gradle/plugin-shim-api/gradle-plugin-shim-api.gradle.kts index 1de051ed6..fdbc715f5 100644 --- a/SKIE/skie-gradle/plugin-shim-api/gradle-plugin-shim-api.gradle.kts +++ b/SKIE/skie-gradle/plugin-shim-api/gradle-plugin-shim-api.gradle.kts @@ -1,5 +1,3 @@ -import co.touchlab.skie.gradle.version.gradleApiVersionDimension - plugins { id("skie.gradle") id("skie.publishable") @@ -14,8 +12,9 @@ kotlin { sourceSets { val commonMain by getting { dependencies { + api(projects.gradle.gradlePluginApi) + implementation(projects.common.util) - compileOnly("dev.gradleplugins:gradle-api:${gradleApiVersionDimension().components.min().value}") } } } diff --git a/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/SkieTarget.kt b/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/SkieTarget.kt index ea464113f..ddfa2e5bb 100644 --- a/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/SkieTarget.kt +++ b/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/SkieTarget.kt @@ -2,6 +2,7 @@ package co.touchlab.skie.plugin import co.touchlab.skie.plugin.shim.KonanTargetShim import co.touchlab.skie.plugin.shim.KotlinSourceSetShim +import co.touchlab.skie.plugin.util.KotlinCompilerPluginOption import co.touchlab.skie.util.directory.SkieBuildDirectory import co.touchlab.skie.util.directory.SkieDirectories import org.gradle.api.Project diff --git a/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/KotlinCompilerPluginOption.kt b/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/util/KotlinCompilerPluginOption.kt similarity index 69% rename from SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/KotlinCompilerPluginOption.kt rename to SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/util/KotlinCompilerPluginOption.kt index 31279af40..a634bfbe1 100644 --- a/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/KotlinCompilerPluginOption.kt +++ b/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/util/KotlinCompilerPluginOption.kt @@ -1,4 +1,4 @@ -package co.touchlab.skie.plugin +package co.touchlab.skie.plugin.util data class KotlinCompilerPluginOption( val key: String, diff --git a/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/util/KotlinDsl.kt b/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/util/KotlinDsl.kt index 3bc55d9b6..f845dfaa0 100644 --- a/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/util/KotlinDsl.kt +++ b/SKIE/skie-gradle/plugin-shim-api/src/common/kotlin/co/touchlab/skie/plugin/util/KotlinDsl.kt @@ -8,7 +8,7 @@ import org.gradle.api.artifacts.Configuration import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.TaskCollection -inline fun DomainObjectCollection.withType() = +inline fun DomainObjectCollection.withType(): DomainObjectCollection = withType(S::class.java) inline fun NamedDomainObjectCollection.withType(): NamedDomainObjectCollection = diff --git a/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieArtifactTarget.kt b/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieArtifactTarget.kt index 9142638e1..76ebdf300 100644 --- a/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieArtifactTarget.kt +++ b/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieArtifactTarget.kt @@ -2,6 +2,7 @@ package co.touchlab.skie.plugin import co.touchlab.skie.plugin.shim.ActualKonanTargetShim import co.touchlab.skie.plugin.shim.KonanTargetShim +import co.touchlab.skie.plugin.util.KotlinCompilerPluginOption import co.touchlab.skie.plugin.util.lowerCamelCaseName import co.touchlab.skie.util.directory.SkieDirectories import org.gradle.api.Project diff --git a/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieBinaryTarget.kt b/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieBinaryTarget.kt index 63503f093..86964d917 100644 --- a/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieBinaryTarget.kt +++ b/SKIE/skie-gradle/plugin-shim-impl/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/ActualSkieBinaryTarget.kt @@ -1,10 +1,10 @@ package co.touchlab.skie.plugin -import co.touchlab.skie.plugin.SkieTarget.OutputKind import co.touchlab.skie.plugin.shim.ActualKonanTargetShim import co.touchlab.skie.plugin.shim.ActualKotlinSourceSetShim import co.touchlab.skie.plugin.shim.KonanTargetShim import co.touchlab.skie.plugin.shim.KotlinSourceSetShim +import co.touchlab.skie.plugin.util.KotlinCompilerPluginOption import co.touchlab.skie.util.directory.SkieDirectories import org.gradle.api.Project import org.gradle.api.file.FileCollection @@ -20,7 +20,7 @@ class ActualSkieBinaryTarget( override val project: Project, target: KotlinNativeTarget, private val binary: NativeBinary, - override val outputKind: OutputKind, + override val outputKind: SkieTarget.OutputKind, ) : SkieTarget.Binary { override val konanTarget: KonanTargetShim = ActualKonanTargetShim(target.konanTarget) diff --git a/SKIE/skie-gradle/plugin/gradle-plugin.gradle.kts b/SKIE/skie-gradle/plugin/gradle-plugin.gradle.kts index 675c4c75d..b11fa945e 100644 --- a/SKIE/skie-gradle/plugin/gradle-plugin.gradle.kts +++ b/SKIE/skie-gradle/plugin/gradle-plugin.gradle.kts @@ -1,6 +1,7 @@ import co.touchlab.skie.gradle.KotlinCompilerVersion import co.touchlab.skie.gradle.publish.dependencyCoordinate import co.touchlab.skie.gradle.util.enquoted +import co.touchlab.skie.gradle.util.gradlePluginApi import co.touchlab.skie.gradle.version.gradleApiVersionDimension import co.touchlab.skie.gradle.version.kotlinToolingVersionDimension @@ -62,9 +63,12 @@ configurations.configureEach { } dependencies { - implementation(projects.gradle.gradlePluginShimApi) + api(projects.gradle.gradlePluginApi) api(projects.common.configuration.configurationDeclaration) - compileOnly("dev.gradleplugins:gradle-api:${gradleApiVersionDimension().components.min().value}") + implementation(projects.gradle.gradleSubPluginApi) + implementation(projects.gradle.gradlePluginShimApi) + + compileOnly(gradlePluginApi()) compileOnly(libs.plugin.kotlin.gradle.api) compileOnly(libs.plugin.kotlin.gradle) diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin-compiler-attribute/co/touchlab/skie/gradle/KotlinCompilerVersion.kt b/SKIE/skie-gradle/plugin/src/main/kotlin-compiler-attribute/co/touchlab/skie/gradle/KotlinCompilerVersion.kt index aa45ea7a0..a416de20b 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin-compiler-attribute/co/touchlab/skie/gradle/KotlinCompilerVersion.kt +++ b/SKIE/skie-gradle/plugin/src/main/kotlin-compiler-attribute/co/touchlab/skie/gradle/KotlinCompilerVersion.kt @@ -5,13 +5,15 @@ import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.AttributeDisambiguationRule import org.gradle.api.attributes.MultipleCandidatesDetails +import org.gradle.api.logging.Logger import org.gradle.api.logging.Logging import javax.inject.Inject interface KotlinCompilerVersion : Named { + companion object { - val attribute = Attribute.of("co.touchlab.skie.kotlin.compiler.version", KotlinCompilerVersion::class.java) + val attribute: Attribute = Attribute.of("co.touchlab.skie.kotlin.compiler.version", KotlinCompilerVersion::class.java) fun registerIn(dependencies: DependencyHandler, currentKotlinVersion: String) { dependencies.attributesSchema.attribute(attribute) { @@ -41,7 +43,7 @@ interface KotlinCompilerVersion : Named { companion object { - val log = Logging.getLogger("KotlinCompilerVersion.DisambiguationRule") + val log: Logger = Logging.getLogger("KotlinCompilerVersion.DisambiguationRule") } } } diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/SkieGradlePlugin.kt b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/SkieGradlePlugin.kt index 9312de7d1..d57c410c4 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/SkieGradlePlugin.kt +++ b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/SkieGradlePlugin.kt @@ -3,6 +3,7 @@ package co.touchlab.skie.plugin import co.touchlab.skie.plugin.analytics.GradleAnalyticsManager import co.touchlab.skie.plugin.configuration.CreateSkieConfigurationTask import co.touchlab.skie.plugin.configuration.SkieExtension +import co.touchlab.skie.plugin.configuration.createExtension import co.touchlab.skie.plugin.coroutines.addDependencyOnSkieRuntime import co.touchlab.skie.plugin.coroutines.configureMinOsVersionIfNeeded import co.touchlab.skie.plugin.defaultarguments.disableCachingIfNeeded diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/analytics/GradleAnalyticsManager.kt b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/analytics/GradleAnalyticsManager.kt index 9f177c62c..8e4d74220 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/analytics/GradleAnalyticsManager.kt +++ b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/analytics/GradleAnalyticsManager.kt @@ -7,7 +7,7 @@ import co.touchlab.skie.plugin.analytics.git.getGitRoot import co.touchlab.skie.plugin.analytics.hardware.HardwareAnalytics import co.touchlab.skie.plugin.analytics.performance.GradlePerformanceAnalytics import co.touchlab.skie.plugin.analytics.project.ProjectAnalytics -import co.touchlab.skie.plugin.configuration.SkieExtension.Companion.buildConfiguration +import co.touchlab.skie.plugin.configuration.buildConfiguration import co.touchlab.skie.plugin.configuration.skieExtension import co.touchlab.skie.plugin.directory.createSkieBuildDirectoryTask import co.touchlab.skie.plugin.kgpShim diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/CreateSkieConfigurationTask.kt b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/CreateSkieConfigurationTask.kt index b434ec956..a2a3de62e 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/CreateSkieConfigurationTask.kt +++ b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/CreateSkieConfigurationTask.kt @@ -1,8 +1,6 @@ package co.touchlab.skie.plugin.configuration import co.touchlab.skie.plugin.SkieTarget -import co.touchlab.skie.plugin.configuration.SkieExtension.Companion.buildConfiguration -import co.touchlab.skie.plugin.configuration.util.GradleSkieConfigurationData import co.touchlab.skie.plugin.directory.createSkieBuildDirectoryTask import co.touchlab.skie.plugin.skieBuildDirectory import co.touchlab.skie.plugin.util.registerSkieTargetBasedTask diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/util/GradleSkieConfigurationData.kt b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/GradleSkieConfigurationData.kt similarity index 91% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/util/GradleSkieConfigurationData.kt rename to SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/GradleSkieConfigurationData.kt index e093ce5cd..048397b29 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/util/GradleSkieConfigurationData.kt +++ b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/GradleSkieConfigurationData.kt @@ -1,4 +1,4 @@ -package co.touchlab.skie.plugin.configuration.util +package co.touchlab.skie.plugin.configuration import co.touchlab.skie.configuration.SkieConfigurationFlag import co.touchlab.skie.configuration.UntypedSkieConfigurationData diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieExtensionInternals.kt b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieExtensionInternals.kt new file mode 100644 index 000000000..a18f5cb0a --- /dev/null +++ b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/SkieExtensionInternals.kt @@ -0,0 +1,44 @@ +@file:Suppress("MemberVisibilityCanBePrivate", "unused", "invisible_reference", "invisible_member") + +package co.touchlab.skie.plugin.configuration + +import co.touchlab.skie.configuration.SkieConfigurationFlag +import co.touchlab.skie.plugin.SkieTarget +import org.gradle.api.Project + +internal fun SkieExtension.Companion.createExtension(project: Project): SkieExtension = + project.extensions.create("skie", SkieExtension::class.java) + +internal val Project.skieExtension: SkieExtension + get() = project.extensions.getByType(SkieExtension::class.java) + +internal fun SkieExtension.buildConfiguration(outputKind: SkieTarget.OutputKind): GradleSkieConfigurationData = + GradleSkieConfigurationData( + enabledConfigurationFlags = (mergeConfigurationSetsFromConfigurations(outputKind) + additionalConfigurationFlags.get()) - suppressedConfigurationFlags.get(), + groups = features.buildGroups(), + ) + +private fun SkieExtension.mergeConfigurationSetsFromConfigurations(outputKind: SkieTarget.OutputKind): Set = + analytics.buildConfigurationFlags() + + build.buildConfigurationFlags() + + debug.buildConfigurationFlags() + + features.buildConfigurationFlags() + + migration.buildConfigurationFlags() + + addSwiftLibraryEvolutionFlagIfNeeded(outputKind) + +private fun addSwiftLibraryEvolutionFlagIfNeeded(outputKind: SkieTarget.OutputKind): Set = + if (outputKind == SkieTarget.OutputKind.XCFramework) { + setOf(SkieConfigurationFlag.Build_SwiftLibraryEvolution) + } else { + emptySet() + } + +private fun SkieFeatureConfiguration.buildGroups(): List = + groupConfigurations.map { it.build() } + +private fun SkieFeatureConfiguration.GroupConfiguration.build(): GradleSkieConfigurationData.Group = + GradleSkieConfigurationData.Group( + target = targetFqNamePrefix, + overridesAnnotations = overridesAnnotations, + items = items.toMap(), + ) diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/util/SkiePluginOptionToKotlinCompilerPluginOption.kt b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/util/SkiePluginOptionToKotlinCompilerPluginOption.kt index 89da7d395..631896208 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/util/SkiePluginOptionToKotlinCompilerPluginOption.kt +++ b/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/util/SkiePluginOptionToKotlinCompilerPluginOption.kt @@ -1,6 +1,5 @@ package co.touchlab.skie.plugin.util -import co.touchlab.skie.plugin.KotlinCompilerPluginOption import co.touchlab.skie.util.plugin.SkiePlugin internal fun SkiePlugin.Option.toKotlinCompilerPluginOption(value: T): KotlinCompilerPluginOption = diff --git a/SKIE/skie-gradle/sub-plugin-api/gradle-sub-plugin-api.gradle.kts b/SKIE/skie-gradle/sub-plugin-api/gradle-sub-plugin-api.gradle.kts new file mode 100644 index 000000000..8960f3519 --- /dev/null +++ b/SKIE/skie-gradle/sub-plugin-api/gradle-sub-plugin-api.gradle.kts @@ -0,0 +1,20 @@ +plugins { + id("skie.gradle") + id("skie.publishable") +} + +skiePublishing { + name = "SKIE Gradle Sub Plugin API" + description = "API for creating Sub-plugins for SKIE." +} + +kotlin { + sourceSets { + val commonMain by getting { + dependencies { + api(projects.gradle.gradlePluginApi) + api(projects.gradle.gradlePluginShimApi) + } + } + } +} diff --git a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/subplugin/SkieSubplugin.kt b/SKIE/skie-gradle/sub-plugin-api/src/common/kotlin/co/touchlab/skie/plugin/subplugin/SkieSubplugin.kt similarity index 90% rename from SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/subplugin/SkieSubplugin.kt rename to SKIE/skie-gradle/sub-plugin-api/src/common/kotlin/co/touchlab/skie/plugin/subplugin/SkieSubplugin.kt index f710b3bed..aaa633149 100644 --- a/SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/subplugin/SkieSubplugin.kt +++ b/SKIE/skie-gradle/sub-plugin-api/src/common/kotlin/co/touchlab/skie/plugin/subplugin/SkieSubplugin.kt @@ -1,7 +1,7 @@ package co.touchlab.skie.plugin.subplugin -import co.touchlab.skie.plugin.KotlinCompilerPluginOption import co.touchlab.skie.plugin.SkieTarget +import co.touchlab.skie.plugin.util.KotlinCompilerPluginOption import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.Configuration diff --git a/build-setup/src/main/kotlin/co/touchlab/skie/gradle/util/GradlePluginApiDependency.kt b/build-setup/src/main/kotlin/co/touchlab/skie/gradle/util/GradlePluginApiDependency.kt new file mode 100644 index 000000000..9bbacc486 --- /dev/null +++ b/build-setup/src/main/kotlin/co/touchlab/skie/gradle/util/GradlePluginApiDependency.kt @@ -0,0 +1,7 @@ +package co.touchlab.skie.gradle.util + +import co.touchlab.skie.gradle.version.gradleApiVersionDimension +import org.gradle.api.Project + +fun Project.gradlePluginApi(): String = + "dev.gradleplugins:gradle-api:${gradleApiVersionDimension().components.min().value}"