rustc_target/spec/targets/
thumbv7neon_linux_androideabi.rs

1use crate::spec::{
2    Abi, Arch, Cc, FloatAbi, LinkerFlavor, Lld, Target, TargetMetadata, TargetOptions, base,
3};
4
5// This target if is for the Android v7a ABI in thumb mode with
6// NEON unconditionally enabled and, therefore, with 32 FPU registers
7// enabled as well. See section A2.6.2 on page A2-56 in
8// https://web.archive.org/web/20210307234416/https://static.docs.arm.com/ddi0406/cd/DDI0406C_d_armv7ar_arm.pdf
9
10// See https://developer.android.com/ndk/guides/abis.html#v7a
11// for target ABI requirements.
12
13pub(crate) fn target() -> Target {
14    let mut base = base::android::opts();
15    base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-march=armv7-a"]);
16    Target {
17        llvm_target: "armv7-none-linux-android".into(),
18        metadata: TargetMetadata {
19            description: Some("Thumb2-mode ARMv7-A Android with NEON".into()),
20            tier: Some(2),
21            host_tools: Some(false),
22            std: Some(true),
23        },
24        pointer_width: 32,
25        data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
26        arch: Arch::Arm,
27        options: TargetOptions {
28            abi: Abi::Eabi,
29            llvm_floatabi: Some(FloatAbi::Soft),
30            features: "+v7,+thumb-mode,+thumb2,+vfp3,+neon".into(),
31            max_atomic_width: Some(64),
32            ..base
33        },
34    }
35}