diff --git a/benchmark/build.gradle.kts b/benchmark/build.gradle.kts index 91702e5..4d096e8 100644 --- a/benchmark/build.gradle.kts +++ b/benchmark/build.gradle.kts @@ -1,9 +1,8 @@ -import com.dokar.quickjs.disableUnsupportedPlatformTasks - plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinBenchmark) alias(libs.plugins.kotlinAllOpen) + id("com.dokar.quickjs.disable-unsupported-platform-tasks") } kotlin { @@ -34,5 +33,3 @@ benchmark { allOpen { annotation("org.openjdk.jmh.annotations.State") } - -disableUnsupportedPlatformTasks() diff --git a/buildSrc/.gitignore b/build-logic/.gitignore similarity index 100% rename from buildSrc/.gitignore rename to build-logic/.gitignore diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 0000000..7933a8d --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + `kotlin-dsl` + `java-gradle-plugin` +} + +repositories { + google() + mavenCentral() + gradlePluginPortal() +} + +gradlePlugin { + plugins { + create("quickJsNativeBuild") { + id = "com.dokar.quickjs.native-build" + implementationClass = "com.dokar.quickjs.QuickJsNativeBuildPlugin" + } + create("disableUnsupportedPlatformTasks") { + id = "com.dokar.quickjs.disable-unsupported-platform-tasks" + implementationClass = "com.dokar.quickjs.DisableUnsupportedPlatformTasksPlugin" + } + } +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 0000000..1126027 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,16 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "build-logic" diff --git a/buildSrc/src/main/kotlin/com/dokar/quickjs/Platform.kt b/build-logic/src/main/kotlin/com/dokar/quickjs/Platform.kt similarity index 99% rename from buildSrc/src/main/kotlin/com/dokar/quickjs/Platform.kt rename to build-logic/src/main/kotlin/com/dokar/quickjs/Platform.kt index 15464fb..f65bff3 100644 --- a/buildSrc/src/main/kotlin/com/dokar/quickjs/Platform.kt +++ b/build-logic/src/main/kotlin/com/dokar/quickjs/Platform.kt @@ -39,4 +39,4 @@ private fun currentPlatform(): Platform { } } throw IllegalStateException("Unsupported os, name: $osName, arch: $osArch") -} \ No newline at end of file +} diff --git a/build-logic/src/main/kotlin/com/dokar/quickjs/QuickJsBuildPlugins.kt b/build-logic/src/main/kotlin/com/dokar/quickjs/QuickJsBuildPlugins.kt new file mode 100644 index 0000000..8824882 --- /dev/null +++ b/build-logic/src/main/kotlin/com/dokar/quickjs/QuickJsBuildPlugins.kt @@ -0,0 +1,20 @@ +package com.dokar.quickjs + +import org.gradle.api.Plugin +import org.gradle.api.Project + +class QuickJsNativeBuildPlugin : Plugin { + override fun apply(project: Project) { + project.afterEvaluate { + applyQuickJsNativeBuildTasks(project.file("native/CMakeLists.txt")) + } + } +} + +class DisableUnsupportedPlatformTasksPlugin : Plugin { + override fun apply(project: Project) { + project.gradle.projectsEvaluated { + project.disableUnsupportedPlatformTasks() + } + } +} diff --git a/buildSrc/src/main/kotlin/com/dokar/quickjs/applyQuickJsNativeBuildTasks.kt b/build-logic/src/main/kotlin/com/dokar/quickjs/applyQuickJsNativeBuildTasks.kt similarity index 98% rename from buildSrc/src/main/kotlin/com/dokar/quickjs/applyQuickJsNativeBuildTasks.kt rename to build-logic/src/main/kotlin/com/dokar/quickjs/applyQuickJsNativeBuildTasks.kt index 00d7df6..ba50465 100644 --- a/buildSrc/src/main/kotlin/com/dokar/quickjs/applyQuickJsNativeBuildTasks.kt +++ b/build-logic/src/main/kotlin/com/dokar/quickjs/applyQuickJsNativeBuildTasks.kt @@ -175,7 +175,8 @@ private fun Project.findBuildPlatformsFromStartTaskNames(): List { if (isPublishing) { val allPlatforms = Platform.values().toList() return when (currentPlatform) { - Platform.linux_x64 -> allPlatforms.filter { + Platform.linux_x64, + Platform.linux_aarch64 -> allPlatforms.filter { it == Platform.linux_x64 || it == Platform.linux_aarch64 } Platform.windows_x64 -> allPlatforms.filter { it == Platform.windows_x64 } diff --git a/buildSrc/src/main/kotlin/com/dokar/quickjs/buildQuickJsNativeLibrary.kt b/build-logic/src/main/kotlin/com/dokar/quickjs/buildQuickJsNativeLibrary.kt similarity index 100% rename from buildSrc/src/main/kotlin/com/dokar/quickjs/buildQuickJsNativeLibrary.kt rename to build-logic/src/main/kotlin/com/dokar/quickjs/buildQuickJsNativeLibrary.kt diff --git a/build-logic/src/main/kotlin/com/dokar/quickjs/disableUnsupportedPlatformTasks.kt b/build-logic/src/main/kotlin/com/dokar/quickjs/disableUnsupportedPlatformTasks.kt new file mode 100644 index 0000000..1766339 --- /dev/null +++ b/build-logic/src/main/kotlin/com/dokar/quickjs/disableUnsupportedPlatformTasks.kt @@ -0,0 +1,51 @@ +package com.dokar.quickjs + +import org.gradle.api.Project + +fun Project.disableUnsupportedPlatformTasks() { + val isPublishing = gradle.startParameter.taskNames.any { + it.contains("publish", ignoreCase = true) + } + + tasks.configureEach { + val taskName = name.lowercase() + val platform = when { + taskName.contains("linuxx64") -> Platform.linux_x64 + taskName.contains("linuxarm64") -> Platform.linux_aarch64 + taskName.contains("mingwx64") -> Platform.windows_x64 + taskName.contains("macosx64") -> Platform.macos_x64 + taskName.contains("macosarm64") -> Platform.macos_aarch64 + taskName.contains("iosx64") -> Platform.ios_x64 + taskName.contains("iosarm64") -> Platform.ios_aarch64 + taskName.contains("iossimulatorarm64") -> Platform.ios_simulator_aarch64 + else -> null + } ?: return@configureEach + + enabled = if (isPublishing) { + when (currentPlatform) { + Platform.linux_x64, + Platform.linux_aarch64 -> { + platform == Platform.linux_x64 || platform == Platform.linux_aarch64 + } + + Platform.windows_x64 -> platform == Platform.windows_x64 + + Platform.macos_x64, + Platform.macos_aarch64 -> true + + else -> false + } + } else { + when (platform) { + Platform.linux_x64 -> currentPlatform == Platform.linux_x64 + Platform.linux_aarch64 -> currentPlatform == Platform.linux_aarch64 + Platform.windows_x64 -> currentPlatform == Platform.windows_x64 + Platform.macos_x64 -> currentPlatform == Platform.macos_x64 + Platform.macos_aarch64 -> currentPlatform == Platform.macos_aarch64 + Platform.ios_x64 -> currentPlatform == Platform.macos_x64 + Platform.ios_aarch64, + Platform.ios_simulator_aarch64 -> currentPlatform == Platform.macos_aarch64 + } + } + } +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index d555d95..0000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,8 +0,0 @@ -plugins { - `kotlin-dsl-base` -} - -repositories { - google() - mavenCentral() -} \ No newline at end of file diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts deleted file mode 100644 index 29744ec..0000000 --- a/buildSrc/settings.gradle.kts +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = "buildSrc" diff --git a/buildSrc/src/main/kotlin/com/dokar/quickjs/disableUnsupportedPlatformTasks.kt b/buildSrc/src/main/kotlin/com/dokar/quickjs/disableUnsupportedPlatformTasks.kt deleted file mode 100644 index 0929244..0000000 --- a/buildSrc/src/main/kotlin/com/dokar/quickjs/disableUnsupportedPlatformTasks.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.dokar.quickjs - -import org.gradle.api.Project - -fun Project.disableUnsupportedPlatformTasks() { - tasks.configureEach { - val isPublishing = gradle.startParameter.taskNames.contains("publish") - if (isPublishing) { - return@configureEach - } - val taskName = name.lowercase() - if (taskName.contains("linuxx64")) { - enabled = currentPlatform == Platform.linux_x64 - } else if (taskName.contains("linuxarm64")) { - enabled = currentPlatform == Platform.linux_aarch64 - } else if (taskName.contains("mingwx64")) { - enabled = currentPlatform == Platform.windows_x64 - } else if (taskName.contains("macosx64")) { - enabled = currentPlatform == Platform.macos_x64 - } else if (taskName.contains("macosarm64")) { - enabled = currentPlatform == Platform.macos_aarch64 - } else if (taskName.contains("iosx64")) { - enabled = currentPlatform == Platform.macos_x64 - } else if (taskName.contains("iosarm64")) { - enabled = currentPlatform == Platform.macos_aarch64 - } else if (taskName.contains("iossimulatorarm64")) { - enabled = currentPlatform == Platform.macos_aarch64 - } - } -} \ No newline at end of file diff --git a/quickjs-converter-ktxserialization/build.gradle.kts b/quickjs-converter-ktxserialization/build.gradle.kts index 6724265..0877b8d 100644 --- a/quickjs-converter-ktxserialization/build.gradle.kts +++ b/quickjs-converter-ktxserialization/build.gradle.kts @@ -1,10 +1,9 @@ -import com.dokar.quickjs.disableUnsupportedPlatformTasks - plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidLibrary) alias(libs.plugins.mavenPublish) alias(libs.plugins.serialization) + id("com.dokar.quickjs.disable-unsupported-platform-tasks") } kotlin { @@ -61,8 +60,6 @@ android { } } -disableUnsupportedPlatformTasks() - afterEvaluate { // Disable Android tests tasks.matching { it.name == "testDebugUnitTest" }.configureEach { diff --git a/quickjs-converter-moshi/build.gradle.kts b/quickjs-converter-moshi/build.gradle.kts index 02bb24c..44fb473 100644 --- a/quickjs-converter-moshi/build.gradle.kts +++ b/quickjs-converter-moshi/build.gradle.kts @@ -1,10 +1,9 @@ -import com.dokar.quickjs.disableUnsupportedPlatformTasks - plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidLibrary) alias(libs.plugins.mavenPublish) alias(libs.plugins.ksp) + id("com.dokar.quickjs.disable-unsupported-platform-tasks") } kotlin { @@ -51,8 +50,6 @@ dependencies { add("kspJvmTest", libs.moshi.kotlin.codegen) } -disableUnsupportedPlatformTasks() - afterEvaluate { // Disable Android tests tasks.matching { it.name == "testDebugUnitTest" }.configureEach { diff --git a/quickjs/build.gradle.kts b/quickjs/build.gradle.kts index b29b077..4b53272 100644 --- a/quickjs/build.gradle.kts +++ b/quickjs/build.gradle.kts @@ -1,12 +1,12 @@ /// Based on https://github.com/cashapp/zipline/blob/trunk/zipline/build.gradle.kts -import com.dokar.quickjs.applyQuickJsNativeBuildTasks -import com.dokar.quickjs.disableUnsupportedPlatformTasks import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidLibrary) alias(libs.plugins.mavenPublish) + id("com.dokar.quickjs.native-build") + id("com.dokar.quickjs.disable-unsupported-platform-tasks") } kotlin { @@ -140,10 +140,6 @@ android { } } -applyQuickJsNativeBuildTasks(cmakeFile) - -disableUnsupportedPlatformTasks() - afterEvaluate { // Disable Android tests tasks.matching { it.name == "testDebugUnitTest" }.configureEach { diff --git a/samples/repl/build.gradle.kts b/samples/repl/build.gradle.kts index f619085..b0e88e8 100644 --- a/samples/repl/build.gradle.kts +++ b/samples/repl/build.gradle.kts @@ -1,10 +1,10 @@ @file:OptIn(org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCacheApi::class) -import com.dokar.quickjs.disableUnsupportedPlatformTasks import org.jetbrains.kotlin.gradle.plugin.mpp.DisableCacheInKotlinVersion plugins { alias(libs.plugins.kotlinMultiplatform) + id("com.dokar.quickjs.disable-unsupported-platform-tasks") } kotlin { @@ -57,5 +57,3 @@ java { // application { // mainClass.set("ReplMainKt") // } - -disableUnsupportedPlatformTasks() diff --git a/settings.gradle.kts b/settings.gradle.kts index ccdae48..749da65 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,6 @@ pluginManagement { + includeBuild("build-logic") + repositories { google { content {