From d813fe9499499b3117f36b9295ab8a9e3db04571 Mon Sep 17 00:00:00 2001 From: Silas Della Contrada Date: Fri, 26 Jul 2024 18:36:22 +0200 Subject: [PATCH] build: move native build to subproject --- build.gradle.kts | 95 ++++++----------------------------------- ffmpeg/build.gradle.kts | 87 +++++++++++++++++++++++++++++++++++++ settings.gradle.kts | 1 + 3 files changed, 100 insertions(+), 83 deletions(-) create mode 100644 ffmpeg/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts index e53a95a..422b0d9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,18 +1,6 @@ -import dev.silenium.libs.jni.NativePlatform import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion -buildscript { - repositories { - maven("https://reposilite.silenium.dev/releases") { - name = "silenium-releases" - } - } - dependencies { - classpath(libs.jni.utils) - } -} - plugins { alias(libs.plugins.kotlin) `maven-publish` @@ -33,60 +21,6 @@ dependencies { } val deployKotlin = (findProperty("deploy.kotlin") as String?)?.toBoolean() ?: true -val deployNative = (findProperty("deploy.native") as String?)?.toBoolean() ?: true -val withGPL: Boolean = findProperty("ffmpeg.gpl").toString().toBoolean() -val platformExtension = "-gpl".takeIf { withGPL }.orEmpty() -val platform = NativePlatform.platform(platformExtension) - -val compileNative = if(deployNative) { - tasks.register("compileNative") { - enabled = deployNative - commandLine( - "bash", - layout.projectDirectory.file("cppbuild.sh").asFile.absolutePath, - "-extension", platform.extension, - "-platform", platform.osArch, - "install", "ffmpeg", - ) - workingDir(layout.projectDirectory.asFile) - - inputs.property("platform", platform) - inputs.files(layout.projectDirectory.files("cppbuild.sh")) - inputs.files(layout.projectDirectory.files("detect-platform.sh")) - inputs.files(layout.projectDirectory.files("ffmpeg/cppbuild.sh")) - inputs.files(layout.projectDirectory.files("ffmpeg/*.patch")) - inputs.files(layout.projectDirectory.files("ffmpeg/*.diff")) - outputs.dir(layout.projectDirectory.dir("ffmpeg/cppbuild/${platform}")) - outputs.cacheIf { true } - } -} else null - -val nativesJar = if (deployNative) { - tasks.register("nativesJar") { - val platform = NativePlatform.platform(platformExtension) - - from(compileNative!!.get().outputs.files) { - include("lib/*.so") - include("lib/*.dll") - include("lib/*.dylib") - eachFile { - path = "natives/$platform/$name" - } - into("natives/$platform/") - } - } -} else null - -val zipBuild = if (deployNative) { - tasks.register("zipBuild") { - from(compileNative!!.get().outputs.files) { - include("bin/**/*") - include("include/**/*") - include("lib/**/*") - include("share/**/*") - } - } -} else null kotlin { compilerOptions { @@ -100,23 +34,7 @@ java { withSourcesJar() } -publishing { - publications { - if (deployNative) { - create("native${platform.capitalized}") { - artifact(nativesJar) - artifact(zipBuild) - artifactId = "ffmpeg-natives-${platform}" - } - } - if (deployKotlin) { - create("kotlin") { - from(components["java"]) - artifactId = "ffmpeg-natives" - } - } - } - +allprojects { repositories { maven(System.getenv("REPOSILITE_URL") ?: "https://reposilite.silenium.dev/snapshots") { name = "reposilite" @@ -129,3 +47,14 @@ publishing { } } } + +publishing { + publications { + if (deployKotlin) { + create("kotlin") { + from(components["java"]) + artifactId = "ffmpeg-natives" + } + } + } +} diff --git a/ffmpeg/build.gradle.kts b/ffmpeg/build.gradle.kts new file mode 100644 index 0000000..f15add5 --- /dev/null +++ b/ffmpeg/build.gradle.kts @@ -0,0 +1,87 @@ +import dev.silenium.libs.jni.NativePlatform + +buildscript { + repositories { + maven("https://reposilite.silenium.dev/releases") { + name = "silenium-releases" + } + } + dependencies { + classpath(libs.jni.utils) + } +} + +plugins { + base + `maven-publish` +} + +group = "dev.silenium.libs.ffmpeg" +version = findProperty("deploy.version") as String? ?: "0.0.0-SNAPSHOT" + +val deployNative = (findProperty("deploy.native") as String?)?.toBoolean() ?: true + +val withGPL: Boolean = findProperty("ffmpeg.gpl").toString().toBoolean() +val platformExtension = "-gpl".takeIf { withGPL }.orEmpty() +val platform = NativePlatform.platform(platformExtension) + +val compileNative = if(deployNative) { + tasks.register("compileNative") { + enabled = deployNative + commandLine( + "bash", + rootProject.layout.projectDirectory.file("cppbuild.sh").asFile.absolutePath, + "-extension", platform.extension, + "-platform", platform.osArch, + "install", "ffmpeg", + ) + workingDir(rootProject.layout.projectDirectory.asFile) + + inputs.property("platform", platform) + inputs.files(rootProject.layout.projectDirectory.files("cppbuild.sh")) + inputs.files(layout.projectDirectory.files("cppbuild.sh")) + inputs.files(layout.projectDirectory.files("*.patch")) + inputs.files(layout.projectDirectory.files("*.diff")) + outputs.dir(layout.projectDirectory.dir("cppbuild/${platform}")) + outputs.cacheIf { true } + } +} else null + +val nativesJar = if (deployNative) { + tasks.register("nativesJar") { + val platform = NativePlatform.platform(platformExtension) + + from(compileNative!!.get().outputs.files) { + include("lib/*.so") + include("lib/*.dll") + include("lib/*.dylib") + eachFile { + path = "natives/$platform/$name" + } + into("natives/$platform/") + } + } +} else null + +val zipBuild = if (deployNative) { + tasks.register("zipBuild") { + from(compileNative!!.get().outputs.files) { + include("bin/**/*") + include("include/**/*") + include("lib/**/*") + include("share/**/*") + } + } +} else null + +publishing { + publications { + if (deployNative) { + create("native${platform.capitalized}") { + artifact(nativesJar) + artifact(zipBuild) + artifactId = "ffmpeg-natives-${platform}" + } + } + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 6b7d2c9..fa4934f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1,2 @@ rootProject.name = "ffmpeg-static" +include(":ffmpeg")