Added support for Linux aarch64 when building the rust part

This commit is contained in:
Abdelilah El Aissaoui 2023-09-21 21:20:33 +02:00
parent aa80638742
commit 9c2cb8ead4
No known key found for this signature in database
GPG key ID: 7587FC860F594869
2 changed files with 27 additions and 8 deletions

View file

@ -3,6 +3,7 @@ import org.jetbrains.compose.compose
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val javaLanguageVersion = JavaLanguageVersion.of(17) val javaLanguageVersion = JavaLanguageVersion.of(17)
val linuxArmTarget = "aarch64-unknown-linux-gnu"
plugins { plugins {
// Kotlin version must match compose version // Kotlin version must match compose version
@ -21,6 +22,9 @@ val rustGeneratedSource = "${buildDir}/generated/source/uniffi/main/com/jetpackd
group = "com.jetpackduba" group = "com.jetpackduba"
version = projectVersion version = projectVersion
val isLinuxAarch64 = (properties.getOrDefault("isLinuxAarch64", "false") as String).toBoolean()
sourceSets.getByName("main") { sourceSets.getByName("main") {
kotlin.sourceSets.main.get().kotlin.srcDir(rustGeneratedSource) kotlin.sourceSets.main.get().kotlin.srcDir(rustGeneratedSource)
} }
@ -35,11 +39,11 @@ repositories {
dependencies { dependencies {
val jgit = "6.7.0.202309050840-r" val jgit = "6.7.0.202309050840-r"
println("isLinuxAarch64=$isLinuxAarch64")
implementation(compose.desktop.currentOs) if (currentOs() == OS.LINUX && isLinuxAarch64) {
when (currentOs()) { implementation(compose.desktop.linux_arm64)
OS.LINUX -> implementation(compose.desktop.linux_arm64) // Include arm for linux builds } else {
else -> {} implementation(compose.desktop.currentOs)
} }
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
@ -215,17 +219,30 @@ fun generateKotlinFromUdl() {
fun buildRust() { fun buildRust() {
exec { exec {
println("Build rs called") println("Build rs called")
workingDir = File(project.projectDir, "rs") val params = mutableListOf(
commandLine = listOf(
"cargo", "build", "--release", "--features=uniffi/cli", "cargo", "build", "--release", "--features=uniffi/cli",
) )
if (currentOs() == OS.LINUX && isLinuxAarch64) {
params.add("--target=$linuxArmTarget")
}
workingDir = File(project.projectDir, "rs")
commandLine = params
} }
} }
fun copyRustBuild() { fun copyRustBuild() {
val outputDir = "${buildDir}/classes/kotlin/main" val outputDir = "${buildDir}/classes/kotlin/main"
println("Copy rs build called") println("Copy rs build called")
val workingDir = File(project.projectDir, "rs/target/release")
val workingDirPath = if (currentOs() == OS.LINUX && isLinuxAarch64) {
"rs/target/$linuxArmTarget/release"
} else {
"rs/target/release"
}
val workingDir = File(project.projectDir, workingDirPath)
val directory = File(outputDir) val directory = File(outputDir)
directory.mkdirs() directory.mkdirs()

2
rs/.cargo/config.toml Normal file
View file

@ -0,0 +1,2 @@
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"