Skip to content

Commit

Permalink
add android library (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
ygdrasil-io authored Sep 8, 2024
1 parent ff5b862 commit 995f8ef
Show file tree
Hide file tree
Showing 11 changed files with 611 additions and 19 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 22
java-version: 17
cache: 'gradle'

# Initializes the CodeQL tools for scanning.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 22
java-version: 17
cache: 'gradle'
- name: Build and publish with Gradle
run: |
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/snapshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 22
java-version: 17
- name: Build and publish with Gradle
# Each step must be separate, so native libraries are taken into account.
run: |
gradle wrapper
./gradlew fetch-native-dependencies
./gradlew assemble publish --info
./gradlew assemble
./gradlew build
./gradlew publish --info
env:
SNAPSHOT: "true"
VERSION: ${{ github.event.inputs.version }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 22
java-version: 17
cache: 'gradle'
- name: Cache Gradle packages
uses: actions/cache@v4
Expand Down
1 change: 1 addition & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ dependencies {
implementation(libs.download)
implementation(libs.kotlin.multiplatform)
implementation(libs.jreleaser.plugin)
implementation(libs.android.library)

implementation(libs.gson)
implementation(libs.zip4j)
Expand Down
6 changes: 4 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,19 @@ kotlin = "2.0.20"
wgpu = "v22.1.0.2"
download = "5.6.0"
jreleaser = "1.13.1"

agp = "8.5.2"
jna = "5.14.0"

[libraries]
download = { module = "de.undercouch.download:de.undercouch.download.gradle.plugin", version.ref = "download" }
kotlin-multiplatform = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
jreleaser-plugin = { module = "org.jreleaser:org.jreleaser.gradle.plugin", version.ref = "jreleaser" }

commons-io = { module = "commons-io:commons-io", version = "2.16.1" }
gson = { module = "com.google.code.gson:gson", version = "2.11.0" }
okhttp = { module = "com.squareup.okhttp3:okhttp", version = "4.12.0" }
zip4j = { module = "net.lingala.zip4j:zip4j", version = "2.11.5" }
android-library = { module = "com.android.library:com.android.library.gradle.plugin", version.ref = "agp" }
jna = { module = "net.java.dev.jna:jna", version.ref = "jna" }

[plugins]
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
98 changes: 94 additions & 4 deletions wgpu4k-native/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
id(libs.plugins.kotlin.multiplatform.get().pluginId)
id("publish")
id("com.android.library")
}

val buildNativeResourcesDirectory = project.file("build").resolve("native")

kotlin {

val androidNativeTargets = listOf(
androidNativeArm64(),
androidNativeX64()
)

val nativeTargets = listOf(
iosX64(),
iosArm64(),
Expand All @@ -17,10 +24,17 @@ kotlin {
macosX64(),
linuxArm64(),
linuxX64(),
mingwX64(),
androidNativeArm64(),
androidNativeX64()
)
mingwX64()
) + androidNativeTargets

androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget = JvmTarget.JVM_17
}

publishLibraryVariants("release", "debug")
}

nativeTargets.forEach { target ->
val main by target.compilations.getting {
Expand All @@ -30,10 +44,47 @@ kotlin {
}
}

androidNativeTargets.forEach { target ->
target.binaries {
sharedLib {
baseName = "wgpu4k"
}
}
}

@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
allWarningsAsErrors = true
}

sourceSets {
androidMain {
dependencies {
val jna = libs.jna.get()
implementation("${jna.module.group}:${jna.module.name}:${jna.versionConstraint}:@aar")
}
}
}
}

android {
namespace = "io.ygdrasil.nativeWgpu4k"
compileSdk = 35

defaultConfig {
minSdk = 28
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}

sourceSets {
getByName("main") {
jniLibs.srcDirs(jniBasePath().absolutePath)
}
}

}

configureDownloadTasks {
Expand Down Expand Up @@ -81,3 +132,42 @@ configureDownloadTasks {
extract("libwgpu_native.a", buildNativeResourcesDirectory.resolve("ios-aarch64").resolve("libWGPU.a"))
}
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

tasks.create("copyJniLibraries") {
dependsOn("androidNativeArm64Binaries")
dependsOn("androidNativeX64Binaries")
doFirst {
copyJniLibraries()
}
}

tasks.findByName("assemble")?.dependsOn("copyJniLibraries")

fun copyJniLibraries() {
val libraryFullName = "libwgpu4k.so"
filesToCopy().forEach { (source, target) ->
target.mkdirs()
target.resolve(libraryFullName)
.also { fileTarget ->
source.resolve(libraryFullName).copyTo(fileTarget, overwrite = true)
}
}
}

fun nativeBasePath() = project.projectDir.resolve("build").resolve("bin")
fun jniBasePath() = nativeBasePath().resolve("libs")

fun filesToCopy() = listOf(
nativeBasePath().resolve("androidNativeArm64").resolve("releaseShared")
to jniBasePath().resolve("arm64-v8a"),
nativeBasePath().resolve("androidNativeX64").resolve("releaseShared")
to jniBasePath().resolve("x86_64")
)


Loading

0 comments on commit 995f8ef

Please sign in to comment.