Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e337837
feat: mobile support initial
ivanmiletic Oct 18, 2025
1cf9814
fix: ios sim - lipo
ivanmiletic Oct 18, 2025
e28b3cc
fix: android libs
ivanmiletic Oct 18, 2025
b76eea9
fix: android
ivanmiletic Oct 18, 2025
a1d1e77
fix: workflow
ivanmiletic Oct 18, 2025
a871118
fix: linux metadata
ivanmiletic Oct 18, 2025
bc94170
fix: ios release test
ivanmiletic Oct 29, 2025
77bc7d3
fix: ios release
ivanmiletic Oct 29, 2025
e698570
fix: paths
ivanmiletic Oct 29, 2025
5323b92
fix: adding files and folders to git
ivanmiletic Oct 29, 2025
711b15b
fix: folder
ivanmiletic Oct 29, 2025
46520ae
fix: ios bindings
ivanmiletic Oct 30, 2025
49ca17e
test android
bcrevar-gorules Nov 5, 2025
942c9d5
test android
bcrevar-gorules Nov 5, 2025
98b6dfa
test android
bcrevar-gorules Nov 5, 2025
fc111cc
test android
bcrevar-gorules Nov 6, 2025
e2b5a2d
test android
bcrevar-gorules Nov 6, 2025
438ee77
test android
bcrevar-gorules Nov 7, 2025
9b0d344
features bindgen
bcrevar-gorules Nov 7, 2025
e3844e1
features bindgen
bcrevar-gorules Nov 7, 2025
7ed74a1
aar package
bcrevar-gorules Nov 10, 2025
a9c1895
aar package
bcrevar-gorules Nov 10, 2025
4145c33
aar package
bcrevar-gorules Nov 10, 2025
be99eb8
aar package
bcrevar-gorules Nov 10, 2025
ed8d203
aar publishing
bcrevar-gorules Nov 13, 2025
67ad748
aar publishing
bcrevar-gorules Nov 13, 2025
7361f15
aar publishing
bcrevar-gorules Nov 13, 2025
54bf4ae
aar publishing
bcrevar-gorules Nov 13, 2025
c3ac9e6
aar publishing
bcrevar-gorules Nov 13, 2025
81c6a34
aar publishing
bcrevar-gorules Nov 13, 2025
e1ffda5
aar publishing
bcrevar-gorules Nov 17, 2025
bdc4810
aar publishing
bcrevar-gorules Nov 17, 2025
745f840
aar publishing
bcrevar-gorules Nov 17, 2025
1d0f86c
touch
bcrevar-gorules Nov 17, 2025
c58cc3b
Merge branch 'master' into feat/mobile-support
bcrevar-gorules Nov 17, 2025
efb0e64
all architectures
bcrevar-gorules Nov 17, 2025
bf566cb
all architectures
bcrevar-gorules Nov 17, 2025
90f9c63
all architectures
bcrevar-gorules Nov 17, 2025
f1ae6e6
all architectures
bcrevar-gorules Nov 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
439 changes: 438 additions & 1 deletion .github/workflows/uniffi.yaml

Large diffs are not rendered by default.

9 changes: 6 additions & 3 deletions bindings/uniffi/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
[package]
name = "zen-uniffi"
version = "0.4.1"
version = "0.4.3"
edition = "2024"
license = "MIT"
publish = false

[lib]
crate-type = ["cdylib"]
crate-type = ["cdylib", "staticlib"]

[[bin]]
name = "uniffi-bindgen"
Expand All @@ -22,4 +22,7 @@ async-trait = "0.1"
tokio = "1.46"

[build-dependencies]
uniffi = { version = "0.29", features = ["build"] }
uniffi = { version = "0.29", features = ["build"] }

[features]
bindgen = ["zen-engine/bindgen"]
69 changes: 61 additions & 8 deletions bindings/uniffi/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@ sourceSets {
compileClasspath += sourceSets["main"].compileClasspath
runtimeClasspath += sourceSets["main"].runtimeClasspath
}

val kotlinAndroid by creating {
kotlin {
srcDirs("lib/kotlin", "build/generated/kotlin_android")
}

compileClasspath += sourceSets["main"].compileClasspath
runtimeClasspath += sourceSets["main"].runtimeClasspath
}
}


Expand Down Expand Up @@ -82,6 +91,12 @@ tasks {
from(sourceSets["kotlin"].kotlin)
}

val generateKotlinAndroidSourcesJar by creating(Jar::class) {
archiveBaseName.set("zen_engine_kotlin_android")
archiveClassifier.set("sources")
from(sourceSets["kotlinAndroid"].kotlin)
}

val dokkaJavadocJava by creating(DokkaTask::class) {
outputDirectory.set(layout.buildDirectory.dir("dokka/java"))
dokkaSourceSets { named("java") }
Expand All @@ -93,6 +108,11 @@ tasks {
dokkaSourceSets { named("kotlin") }
}

val dokkaJavadocKotlinAndroid by creating(DokkaTask::class) {
outputDirectory.set(layout.buildDirectory.dir("dokka/kotlin_android"))
dokkaSourceSets { named("kotlinAndroid") }
}

val javadocJarJava by creating(Jar::class) {
dependsOn(dokkaGeneratePublicationJavadoc)
archiveBaseName.set("zen_engine")
Expand All @@ -108,6 +128,14 @@ tasks {

from(dokkaGeneratePublicationJavadoc.get())
}

val javadocJarKotlinAndroid by creating(Jar::class) {
dependsOn(dokkaGeneratePublicationJavadoc)
archiveBaseName.set("zen_engine_kotlin_android")
archiveClassifier.set("javadoc")

from(dokkaGeneratePublicationJavadoc.get())
}
}

publishing {
Expand Down Expand Up @@ -135,6 +163,23 @@ publishing {
dependency("net.java.dev.jna:jna:5.17.0")
}
}

create<MavenPublication>("mavenKotlinAndroid") {
groupId = "io.gorules"
artifactId = "zen-engine-kotlin-android"

artifact("build-android/aar/zen-engine-android-release.aar") {
extension = "aar"
}
artifact(tasks["generateKotlinAndroidSourcesJar"])
artifact(tasks["javadocJarKotlinAndroid"])

configurePom {
dependency("net.java.dev.jna:jna:5.14.0", "aar")
dependency("androidx.core:core-ktx:1.12.0")
dependency("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}
}
}
repositories {
mavenLocal()
Expand All @@ -149,7 +194,7 @@ signing {
val signingKey = Base64.getDecoder().decode(signingKeyBase64.get()).toString(Charsets.UTF_8)

useInMemoryPgpKeys(signingKey, signingPassphrase.get())
sign(publishing.publications["mavenJava"], publishing.publications["mavenKotlin"])
sign(publishing.publications["mavenJava"], publishing.publications["mavenKotlin"], publishing.publications["mavenKotlinAndroid"])
}
}

Expand Down Expand Up @@ -214,20 +259,28 @@ fun MavenPublication.configurePom(dependencyConfig: PomDependencyBuilder.() -> U
}

class PomDependencyBuilder {
private val dependencies = mutableListOf<Triple<String, String, String>>()
private val dependencies = mutableListOf<Map<String, String>>()

fun dependency(notation: String) {
fun dependency(notation: String, type: String = "jar") {
val parts = notation.split(":")
require(parts.size == 3) { "Dependency notation must be 'group:artifact:version'" }
dependencies.add(Triple(parts[0], parts[1], parts[2]))
dependencies.add(mapOf(
"groupId" to parts[0],
"artifactId" to parts[1],
"version" to parts[2],
"type" to type
))
}

fun addToXml(dependenciesNode: groovy.util.Node) {
dependencies.forEach { (groupId, artifactId, version) ->
dependencies.forEach { dep ->
val dependencyNode = dependenciesNode.appendNode("dependency")
dependencyNode.appendNode("groupId", groupId)
dependencyNode.appendNode("artifactId", artifactId)
dependencyNode.appendNode("version", version)
dependencyNode.appendNode("groupId", dep["groupId"])
dependencyNode.appendNode("artifactId", dep["artifactId"])
dependencyNode.appendNode("version", dep["version"])
if (dep["type"] != "jar") {
dependencyNode.appendNode("type", dep["type"])
}
dependencyNode.appendNode("scope", "runtime")
}
}
Expand Down
3 changes: 3 additions & 0 deletions bindings/uniffi/gradle.android/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
21 changes: 21 additions & 0 deletions bindings/uniffi/gradle.android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:8.1.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0")
}
}

allprojects {
repositories {
google()
mavenCentral()
}
}

tasks.register("clean", Delete::class) {
delete(rootProject.layout.buildDirectory)
}
4 changes: 4 additions & 0 deletions bindings/uniffi/gradle.android/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
android.useAndroidX=true
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.caching=true
2 changes: 2 additions & 0 deletions bindings/uniffi/gradle.android/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
rootProject.name = "ZenEngineAndroid"
include(":zen-engine-android")
46 changes: 46 additions & 0 deletions bindings/uniffi/gradle.android/zen-engine-android-build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
}

android {
namespace = "io.gorules.zen_engine.kotlin_android"
compileSdk = 34

defaultConfig {
minSdk = 24
targetSdk = 34
version = "0.4.0"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}

kotlinOptions {
jvmTarget = "11"
}

sourceSets {
getByName("main") {
jniLibs.srcDirs("src/main/jniLibs")
}
}
}

dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("net.java.dev.jna:jna:5.14.0@aar")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}
10 changes: 10 additions & 0 deletions bindings/uniffi/uniffi-android.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Kotlin Android
[bindings.kotlin]
package_name = "io.gorules.zen_engine.kotlin_android"
generate_immutable_records = true
android = true

[bindings.kotlin.custom_types.JsonBuffer]
imports = ["io.gorules.zen_engine.kotlin.JsonBuffer"]
into_custom = "JsonBuffer({})"
from_custom = "{}.value"
5 changes: 4 additions & 1 deletion core/engine/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,7 @@ rquickjs = { version = "0.9", features = ["macro", "loader", "rust-alloc", "futu

[[bench]]
harness = false
name = "engine"
name = "engine"

[features]
bindgen = ["rquickjs/bindgen"]
Loading