From f5ac6f08d1c50438058308f328e3982b29f65309 Mon Sep 17 00:00:00 2001 From: monzer Date: Sun, 22 Dec 2024 18:46:19 +0200 Subject: [PATCH 1/3] added arm 32bit support --- apk/src/utils.rs | 8 +++++--- xbuild/src/devices/imd.rs | 3 +++ xbuild/src/lib.rs | 18 +++++++++++++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/apk/src/utils.rs b/apk/src/utils.rs index 592d049c..1c1e2a3d 100644 --- a/apk/src/utils.rs +++ b/apk/src/utils.rs @@ -4,9 +4,10 @@ use anyhow::{Context, Result}; #[repr(u8)] pub enum Target { ArmV7a = 1, - Arm64V8a = 2, - X86 = 3, - X86_64 = 4, + Armeabi = 2, + Arm64V8a = 3, + X86 = 4, + X86_64 = 5, } impl Target { @@ -14,6 +15,7 @@ impl Target { pub fn android_abi(self) -> &'static str { match self { Self::Arm64V8a => "arm64-v8a", + Self::Armeabi => "armeabi", Self::ArmV7a => "armeabi-v7a", Self::X86 => "x86", Self::X86_64 => "x86_64", diff --git a/xbuild/src/devices/imd.rs b/xbuild/src/devices/imd.rs index 9e2dee74..4b8d07ce 100644 --- a/xbuild/src/devices/imd.rs +++ b/xbuild/src/devices/imd.rs @@ -127,6 +127,9 @@ impl IMobileDevice { pub fn arch(&self, device: &str) -> Result { match self.getkey(device, "CPUArchitecture")?.as_str() { "arm64" | "arm64e" => Ok(Arch::Arm64), + "armv7" => Ok(Arch::Armv7), + "arm" => Ok(Arch::Arm), + "x86_64" => Ok(Arch::X64), arch => anyhow::bail!("unsupported arch {}", arch), } } diff --git a/xbuild/src/lib.rs b/xbuild/src/lib.rs index 34e501a1..8d569c53 100644 --- a/xbuild/src/lib.rs +++ b/xbuild/src/lib.rs @@ -92,7 +92,8 @@ impl std::str::FromStr for Platform { #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum Arch { - //Arm, + Armv7, + Arm, Arm64, X64, //X86, @@ -113,7 +114,8 @@ impl Arch { impl std::fmt::Display for Arch { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { - //Self::Arm => write!(f, "arm"), + Self::Armv7 => write!(f, "armv7"), + Self::Arm => write!(f, "arm"), Self::Arm64 => write!(f, "arm64"), Self::X64 => write!(f, "x64"), //Self::X86 => write!(f, "x86"), @@ -126,7 +128,8 @@ impl std::str::FromStr for Arch { fn from_str(arch: &str) -> Result { Ok(match arch { - //"arm" => Self::Arm, + "arm" => Self::Arm, + "armv7" => Self::Armv7, "arm64" => Self::Arm64, "x64" => Self::X64, //"x86" => Self::X86, @@ -281,6 +284,8 @@ impl CompileTarget { pub fn android_abi(self) -> apk::Target { assert_eq!(self.platform(), Platform::Android); match self.arch() { + Arch::Armv7 => apk::Target::ArmV7a, + Arch::Arm => apk::Target::Armeabi, Arch::Arm64 => apk::Target::Arm64V8a, Arch::X64 => apk::Target::X86_64, } @@ -291,7 +296,8 @@ impl CompileTarget { assert_eq!(self.platform(), Platform::Android); match self.arch() { Arch::Arm64 => "aarch64-linux-android", - //Arch::Arm => "arm-linux-androideabi", + Arch::Arm => "arm-linux-androideabi", + Arch::Armv7 => "armv7-linux-androideabi", //Arch::X86 => "i686-linux-android", Arch::X64 => "x86_64-linux-android", } @@ -300,6 +306,8 @@ impl CompileTarget { pub fn rust_triple(self) -> Result<&'static str> { Ok(match (self.arch, self.platform) { (Arch::Arm64, Platform::Android) => "aarch64-linux-android", + (Arch::Armv7, Platform::Android) => "armv7-linux-androideabi", + (Arch::Arm, Platform::Android) => "arm-linux-androideabi", (Arch::Arm64, Platform::Ios) => "aarch64-apple-ios", (Arch::Arm64, Platform::Linux) => "aarch64-unknown-linux-gnu", (Arch::Arm64, Platform::Macos) => "aarch64-apple-darwin", @@ -381,7 +389,7 @@ pub struct BuildTargetArgs { #[clap(long, conflicts_with = "device")] platform: Option, /// Build artifacts for target arch. Can be one of - /// `arm64` or `x64`. + /// `arm`, `armv7` `arm64` or `x64`. #[clap(long, requires = "platform")] arch: Option, /// Build artifacts for target device. To find the device From 158f097633402cfcf615ce26a00f91701974d7d2 Mon Sep 17 00:00:00 2001 From: monzer Date: Mon, 23 Dec 2024 16:46:34 +0200 Subject: [PATCH 2/3] ci test: android arm and armv7 --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7651701f..5c825250 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,6 +52,10 @@ jobs: arch: x64 - platform: android arch: arm64 + - platform: android + arch: arm + - platform: android + arch: armv7 - platform: ios arch: arm64 From 250b1287e744f68b863678c1ef7249f1e08101b1 Mon Sep 17 00:00:00 2001 From: monzeromer Date: Mon, 23 Jun 2025 16:29:24 +0200 Subject: [PATCH 3/3] redo arm 32 support --- .github/workflows/ci.yml | 6 ++++++ apk/src/utils.rs | 4 ++++ xbuild/src/devices/adb.rs | 7 +++++-- xbuild/src/lib.rs | 20 +++++++++++++++----- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9fb6b73e..ba4b39b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,6 +56,12 @@ jobs: arch: arm - platform: android arch: armv7 + - platform: android + arch: armv6 + - platform: android + arch: armv8a32 + - platform: android + arch: x86 - platform: ios arch: arm64 diff --git a/apk/src/utils.rs b/apk/src/utils.rs index 20f58cc8..f44efab9 100644 --- a/apk/src/utils.rs +++ b/apk/src/utils.rs @@ -8,6 +8,8 @@ pub enum Target { Arm64V8a = 3, X86 = 4, X86_64 = 5, + ArmV6a = 6, // ARM 32-bit (ARMv6-A) + ArmV8a32 = 7, // ARM 32-bit (ARMv8-A) } impl Target { @@ -19,6 +21,8 @@ impl Target { Self::ArmV7a => "armeabi-v7a", Self::X86 => "x86", Self::X86_64 => "x86_64", + Self::ArmV6a => "armeabi-v6a", + Self::ArmV8a32 => "armv8a", } } } diff --git a/xbuild/src/devices/adb.rs b/xbuild/src/devices/adb.rs index 356612e1..565d8580 100644 --- a/xbuild/src/devices/adb.rs +++ b/xbuild/src/devices/adb.rs @@ -375,9 +375,12 @@ impl Adb { pub fn arch(&self, device: &str) -> Result { let arch = match self.getprop(device, "ro.product.cpu.abi")?.as_str() { "arm64-v8a" => Arch::Arm64, - //"armeabi-v7a" => Arch::Arm, + "armeabi-v7a" => Arch::Armv7, + "armeabi-v6a" => Arch::Armv6, + "armv8a" => Arch::Armv8a32, + "armeabi" => Arch::Arm, "x86_64" => Arch::X64, - //"x86" => Arch::X86, + "x86" => Arch::X86, abi => anyhow::bail!("unrecognized abi {}", abi), }; Ok(arch) diff --git a/xbuild/src/lib.rs b/xbuild/src/lib.rs index f226feda..d508c68c 100644 --- a/xbuild/src/lib.rs +++ b/xbuild/src/lib.rs @@ -76,9 +76,11 @@ impl std::fmt::Display for Platform { pub enum Arch { Armv7, Arm, + Armv6, // ARM 32-bit (ARMv6) + Armv8a32, // ARM 32-bit (ARMv8-A) Arm64, X64, - //X86, + X86, // Intel 32-bit } impl Arch { @@ -209,8 +211,11 @@ impl CompileTarget { match self.arch() { Arch::Armv7 => apk::Target::ArmV7a, Arch::Arm => apk::Target::Armeabi, + Arch::Armv6 => apk::Target::ArmV6a, + Arch::Armv8a32 => apk::Target::ArmV8a32, Arch::Arm64 => apk::Target::Arm64V8a, Arch::X64 => apk::Target::X86_64, + Arch::X86 => apk::Target::X86, } } @@ -220,21 +225,26 @@ impl CompileTarget { match self.arch() { Arch::Arm64 => "aarch64-linux-android", Arch::Arm => "arm-linux-androideabi", - Arch::Armv7 => "armv7-linux-androideabi", - //Arch::X86 => "i686-linux-android", + Arch::Armv7 => "armv7a-linux-androideabi", + Arch::Armv6 => "armv6a-linux-androideabi", + Arch::Armv8a32 => "armv8a-linux-androideabi", Arch::X64 => "x86_64-linux-android", + Arch::X86 => "i686-linux-android", } } pub fn rust_triple(self) -> Result<&'static str> { - Ok(match (self.arch, self.platform) { + Ok(match (self.arch(), self.platform) { (Arch::Arm64, Platform::Android) => "aarch64-linux-android", (Arch::Armv7, Platform::Android) => "armv7-linux-androideabi", (Arch::Arm, Platform::Android) => "arm-linux-androideabi", + (Arch::Armv6, Platform::Android) => "armv6-linux-androideabi", + (Arch::Armv8a32, Platform::Android) => "armv8a-linux-androideabi", + (Arch::X64, Platform::Android) => "x86_64-linux-android", + (Arch::X86, Platform::Android) => "i686-linux-android", (Arch::Arm64, Platform::Ios) => "aarch64-apple-ios", (Arch::Arm64, Platform::Linux) => "aarch64-unknown-linux-gnu", (Arch::Arm64, Platform::Macos) => "aarch64-apple-darwin", - (Arch::X64, Platform::Android) => "x86_64-linux-android", (Arch::X64, Platform::Linux) => "x86_64-unknown-linux-gnu", (Arch::X64, Platform::Macos) => "x86_64-apple-darwin", (Arch::X64, Platform::Windows) => "x86_64-pc-windows-msvc",