Skip to content

Commit

Permalink
build: move native build to subproject
Browse files Browse the repository at this point in the history
  • Loading branch information
silenium-dev committed Jul 26, 2024
1 parent 23e3c1d commit d813fe9
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 83 deletions.
95 changes: 12 additions & 83 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -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`
Expand All @@ -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<Exec>("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<Jar>("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<Zip>("zipBuild") {
from(compileNative!!.get().outputs.files) {
include("bin/**/*")
include("include/**/*")
include("lib/**/*")
include("share/**/*")
}
}
} else null

kotlin {
compilerOptions {
Expand All @@ -100,23 +34,7 @@ java {
withSourcesJar()
}

publishing {
publications {
if (deployNative) {
create<MavenPublication>("native${platform.capitalized}") {
artifact(nativesJar)
artifact(zipBuild)
artifactId = "ffmpeg-natives-${platform}"
}
}
if (deployKotlin) {
create<MavenPublication>("kotlin") {
from(components["java"])
artifactId = "ffmpeg-natives"
}
}
}

allprojects {
repositories {
maven(System.getenv("REPOSILITE_URL") ?: "https://reposilite.silenium.dev/snapshots") {
name = "reposilite"
Expand All @@ -129,3 +47,14 @@ publishing {
}
}
}

publishing {
publications {
if (deployKotlin) {
create<MavenPublication>("kotlin") {
from(components["java"])
artifactId = "ffmpeg-natives"
}
}
}
}
87 changes: 87 additions & 0 deletions ffmpeg/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -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<Exec>("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<Jar>("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<Zip>("zipBuild") {
from(compileNative!!.get().outputs.files) {
include("bin/**/*")
include("include/**/*")
include("lib/**/*")
include("share/**/*")
}
}
} else null

publishing {
publications {
if (deployNative) {
create<MavenPublication>("native${platform.capitalized}") {
artifact(nativesJar)
artifact(zipBuild)
artifactId = "ffmpeg-natives-${platform}"
}
}
}
}
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
rootProject.name = "ffmpeg-static"
include(":ffmpeg")

0 comments on commit d813fe9

Please sign in to comment.