diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 1d03c5f74..dd9041476 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -1,3 +1,5 @@ +import com.thomaskioko.tvmaniac.plugins.addKspDependencyForAllTargets + plugins { id("plugin.tvmaniac.kotlin.android") id("plugin.tvmaniac.multiplatform") @@ -60,8 +62,6 @@ kotlin { api(projects.data.similar.implementation) api(projects.data.trailers.api) api(projects.data.trailers.implementation) - - implementation(libs.kotlinInject.runtime) } } } @@ -75,11 +75,7 @@ ksp { arg("me.tatarka.inject.generateCompanionExtensions", "true") } -dependencies { - add("kspAndroid", libs.kotlinInject.compiler) - add("kspIosX64", libs.kotlinInject.compiler) - add("kspIosArm64", libs.kotlinInject.compiler) -} +addKspDependencyForAllTargets(libs.kotlinInject.compiler) multiplatformSwiftPackage { packageName("TvManiac") diff --git a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/plugins/KotlinMultiplatformConventionPlugin.kt b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/plugins/KotlinMultiplatformConventionPlugin.kt index db90cea7f..f704880a9 100644 --- a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/plugins/KotlinMultiplatformConventionPlugin.kt +++ b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/plugins/KotlinMultiplatformConventionPlugin.kt @@ -4,10 +4,13 @@ import com.thomaskioko.tvmaniac.extensions.configureKotlin import com.thomaskioko.tvmaniac.extensions.libs import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.configurationcache.extensions.capitalized import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget class KotlinMultiplatformConventionPlugin : Plugin<Project> { @@ -63,4 +66,26 @@ class KotlinMultiplatformConventionPlugin : Plugin<Project> { configureKotlin() } } +} + +fun Project.addKspDependencyForAllTargets(dependencyNotation: Any) = addKspDependencyForAllTargets("", dependencyNotation) +private fun Project.addKspDependencyForAllTargets( + configurationNameSuffix: String, + dependencyNotation: Any, +) { + val kmpExtension = extensions.getByType<KotlinMultiplatformExtension>() + dependencies { + kmpExtension.targets + .asSequence() + .filter { target -> + // Don't add KSP for common target, only final platforms + target.platformType != KotlinPlatformType.common + } + .forEach { target -> + add( + "ksp${target.targetName.capitalized()}$configurationNameSuffix", + dependencyNotation, + ) + } + } } \ No newline at end of file