Skip to content

Commit

Permalink
- remove make_android.sh
Browse files Browse the repository at this point in the history
- build tutasdk object file in generateBinding task

note: not tested on ci/jenkins
  • Loading branch information
tuta-sudipg committed Jan 31, 2025
1 parent e39bf8b commit f85e52a
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 79 deletions.
12 changes: 6 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ publish = false
[workspace]
resolver = "2" # todo: can use resolver 3 after 1.84.0+
members = [
"tuta-sdk/rust/sdk",
"packages/node-mimimi",
# uniffi-bindgen is a seperate crate as uniffi-bindgen does not have a cli yet:
# https://github.com/mozilla/uniffi-rs/blob/fbe146f/docs/manual/src/tutorial/foreign_language_bindings.md#creating-the-bindgen-binary
# note: not to be confused with `bindgen` binary which is from: https://github.com/rust-lang/rust-bindgen
"tuta-sdk/rust/uniffi-bindgen",
"tuta-sdk/rust/sdk",
"packages/node-mimimi",
# uniffi-bindgen is a seperate crate as uniffi-bindgen does not have a cli yet:
# https://github.com/mozilla/uniffi-rs/blob/fbe146f/docs/manual/src/tutorial/foreign_language_bindings.md#creating-the-bindgen-binary
# note: not to be confused with `bindgen` binary which is from: https://github.com/rust-lang/rust-bindgen
"tuta-sdk/rust/uniffi-bindgen",
]

# in most cases, we don't want to build everything.
Expand Down
103 changes: 64 additions & 39 deletions tuta-sdk/android/sdk/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,31 @@ plugins {
id("org.jetbrains.kotlin.android")
}

dependencies {
implementation("net.java.dev.jna:jna:5.14.0@aar")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
implementation("androidx.annotation:annotation:1.8.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
}

val tutanota3Root = layout.projectDirectory
.dir("..") // tutanota-3/tuta-sdk/android
.dir("..") // tutanota-3/tuta-sdk/
.dir("..") // tutanota-3
val rustSdkCratePath = tutanota3Root.dir("tuta-sdk").dir("rust").dir("sdk")
val sdkUniffiConfigFile = tutanota3Root.dir("tuta-sdk").dir("rust").dir("sdk").file("uniffi.toml")

cargo {
module = rustSdkCratePath.toString()
libname = "tutasdk"
prebuiltToolchains = true
pythonCommand = "python3"
targets = getABITargets()
profile = getActiveBuildType()
}

fun getActiveBuildType(): String {
var buildType = "debug"
val taskNames = gradle.parent?.startParameter?.taskNames
Expand All @@ -31,15 +56,21 @@ fun getABITargets(): List<String> {
listOf(abi)
}

fun getJNILibsDirs(): List<String> {
val abiTargets = getABITargets()
return abiTargets.map {
when (it) {
"arm" -> "armeabi-v7a"
"arm64" -> "arm64-v8a"
"x86_64" -> "x86_64"
else -> "arm64-v8a"
}
fun abiTargetToJniTarget(abiTarget: String): String {
return when (abiTarget) {
"arm" -> "armeabi-v7a"
"arm64" -> "arm64-v8a"
"x86_64" -> "x86_64"
else -> throw RuntimeException("unknown abi target: $abiTarget")
}
}

fun jniTargetToRustTargetName(jniTargetName: String): String {
return when (jniTargetName) {
"arm64-v8a" -> "aarch64-linux-android"
"armeabi-v7a" -> "armv7-linux-androideabi"
"x86_64" -> "x86_64-linux-android"
else -> throw RuntimeException("unknwon jni name $jniTargetName")
}
}

Expand Down Expand Up @@ -85,49 +116,43 @@ android {
ndkVersion = "26.1.10909125"
}

dependencies {
implementation("net.java.dev.jna:jna:5.14.0@aar")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
implementation("androidx.annotation:annotation:1.8.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
}

cargo {
extraCargoBuildArguments = listOf("--package", "tuta-sdk")
module = "../../rust"
libname = "tutasdk"
prebuiltToolchains = true
pythonCommand = "python3"
targets = getABITargets()
profile = getActiveBuildType()
}

tasks.register("generateBinding") {
dependsOn("cargoBuild")
getJNILibsDirs().forEach { dir ->

if (!sdkUniffiConfigFile.asFile.exists()) throw RuntimeException("I would expect uniffi.toml for rust-sdk")


getABITargets().forEach { abiTargetName ->
val jniTargetName = abiTargetToJniTarget(abiTargetName)
val rustTargetName = jniTargetToRustTargetName(jniTargetName)

val tutasdkSharedObjectPath =
tutanota3Root.dir("target").dir(rustTargetName).dir(getActiveBuildType()).file("libtutasdk.so")
val kotlinHeaderTargetDir = file("${layout.buildDirectory.asFile.get()}/generated-sources/tuta-sdk")

doLast {
exec {
this.executable("mkdir")
this.args("-p", "${layout.buildDirectory.asFile.get()}/rustJniLibs/android/${dir}")
workingDir = tutanota3Root.asFile
executable = "cargo"
args = listOf("build", "--lib", "--package", "tuta-sdk")
}

exec {
this.workingDir("../../rust")
this.executable("cargo")
this.args(
workingDir = tutanota3Root.asFile
executable = "cargo"
args = listOf(
"run",
"--package",
"uniffi-bindgen",
"--bin",
"uniffi-bindgen",
"generate",
"--library",
"${layout.buildDirectory.asFile.get()}/rustJniLibs/android/${dir}/libtutasdk.so",
"--language",
"kotlin",
"--out-dir",
"${layout.buildDirectory.asFile.get()}/generated-sources/tuta-sdk"
kotlinHeaderTargetDir.toString(),
"--library",
tutasdkSharedObjectPath.toString(),
"--config",
sdkUniffiConfigFile.toString(),
)
}
}
Expand Down
4 changes: 0 additions & 4 deletions tuta-sdk/rust/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,6 @@ export ANDROID_NDK_HOME=/opt/android-sdk-linux/ndk/26.1.10909125
# add NDK toolchain to path
export PATH=${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/
# build the sdk for android
cd tuta-sdk/rust
./make_android.sh
# setup the sdk project
- open tutanota-3/tutasdk/android in Android Studio
- Ctrl + A -> Project Structure -> Modules -> SDK -> select the NDK
Expand Down
30 changes: 0 additions & 30 deletions tuta-sdk/rust/make_android.sh

This file was deleted.

0 comments on commit f85e52a

Please sign in to comment.