diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e2370a46..9fb6b73e 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 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