mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-26 06:35:27 +00:00
add aarch64-unknown-teeos target
Signed-off-by: 袁浩 <yuanhao34@huawei.com>
This commit is contained in:
parent
5b1dc9de77
commit
72dd53c8e5
16
compiler/rustc_target/src/spec/aarch64_unknown_teeos.rs
Normal file
16
compiler/rustc_target/src/spec/aarch64_unknown_teeos.rs
Normal file
@ -0,0 +1,16 @@
|
||||
use crate::spec::Target;
|
||||
|
||||
pub fn target() -> Target {
|
||||
let mut base = super::teeos_base::opts();
|
||||
base.features = "+strict-align,+neon,+fp-armv8".into();
|
||||
base.max_atomic_width = Some(128);
|
||||
base.linker = Some("aarch64-linux-gnu-ld".into());
|
||||
|
||||
Target {
|
||||
llvm_target: "aarch64-unknown-none".into(),
|
||||
pointer_width: 64,
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: base,
|
||||
}
|
||||
}
|
@ -83,6 +83,7 @@ mod openbsd_base;
|
||||
mod redox_base;
|
||||
mod solaris_base;
|
||||
mod solid_base;
|
||||
mod teeos_base;
|
||||
mod thumb_base;
|
||||
mod uefi_msvc_base;
|
||||
mod unikraft_linux_musl_base;
|
||||
@ -1492,6 +1493,8 @@ supported_targets! {
|
||||
|
||||
("x86_64-unknown-none", x86_64_unknown_none),
|
||||
|
||||
("aarch64-unknown-teeos", aarch64_unknown_teeos),
|
||||
|
||||
("mips64-openwrt-linux-musl", mips64_openwrt_linux_musl),
|
||||
|
||||
("aarch64-unknown-nto-qnx710", aarch64_unknown_nto_qnx_710),
|
||||
|
29
compiler/rustc_target/src/spec/teeos_base.rs
Normal file
29
compiler/rustc_target/src/spec/teeos_base.rs
Normal file
@ -0,0 +1,29 @@
|
||||
use super::{Cc, LinkerFlavor, Lld, PanicStrategy};
|
||||
use crate::spec::{RelroLevel, TargetOptions};
|
||||
|
||||
pub fn opts() -> TargetOptions {
|
||||
let lld_args = &["-zmax-page-size=4096", "-znow", "-ztext", "--execute-only"];
|
||||
let cc_args = &["-Wl,-zmax-page-size=4096", "-Wl,-znow", "-Wl,-ztext", "-mexecute-only"];
|
||||
|
||||
let mut pre_link_args = TargetOptions::link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), lld_args);
|
||||
super::add_link_args(&mut pre_link_args, LinkerFlavor::Gnu(Cc::Yes, Lld::No), cc_args);
|
||||
|
||||
TargetOptions {
|
||||
os: "teeos".into(),
|
||||
vendor: "unknown".into(),
|
||||
dynamic_linking: true,
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
||||
// rpath hardcodes -Wl, so it can't be used together with ld.lld.
|
||||
// C TAs also don't support rpath, so this is fine.
|
||||
has_rpath: false,
|
||||
// Note: Setting has_thread_local to true causes an error when
|
||||
// loading / dyn-linking the TA
|
||||
has_thread_local: false,
|
||||
position_independent_executables: true,
|
||||
relro_level: RelroLevel::Full,
|
||||
crt_static_respected: true,
|
||||
pre_link_args,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
@ -134,7 +134,7 @@ const EXTRA_CHECK_CFGS: &[(Option<Mode>, &'static str, Option<&[&'static str]>)]
|
||||
// #[cfg(bootstrap)]
|
||||
(Some(Mode::Std), "target_vendor", Some(&["unikraft"])),
|
||||
(Some(Mode::Std), "target_env", Some(&["libnx"])),
|
||||
// (Some(Mode::Std), "target_os", Some(&[])),
|
||||
(Some(Mode::Std), "target_os", Some(&["teeos"])),
|
||||
// #[cfg(bootstrap)] mips32r6, mips64r6
|
||||
(
|
||||
Some(Mode::Std),
|
||||
|
@ -28,6 +28,7 @@
|
||||
- [armv7-unknown-linux-uclibceabihf](platform-support/armv7-unknown-linux-uclibceabihf.md)
|
||||
- [\*-android and \*-androideabi](platform-support/android.md)
|
||||
- [\*-linux-ohos](platform-support/openharmony.md)
|
||||
- [aarch64-unknown-teeos](platform-support/aarch64-unknown-teeos.md)
|
||||
- [\*-esp-espidf](platform-support/esp-idf.md)
|
||||
- [\*-unknown-fuchsia](platform-support/fuchsia.md)
|
||||
- [\*-kmc-solid_\*](platform-support/kmc-solid.md)
|
||||
|
@ -221,6 +221,7 @@ target | std | host | notes
|
||||
[`aarch64-nintendo-switch-freestanding`](platform-support/aarch64-nintendo-switch-freestanding.md) | * | | ARM64 Nintendo Switch, Horizon
|
||||
[`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ |
|
||||
[`aarch64-unknown-linux-ohos`](platform-support/openharmony.md) | ✓ | | ARM64 OpenHarmony |
|
||||
[`aarch64-unknown-teeos`](platform-support/aarch64-unknown-teeos.md) | ? | | ARM64 TEEOS |
|
||||
[`aarch64-unknown-nto-qnx710`](platform-support/nto-qnx.md) | ✓ | | ARM64 QNX Neutrino 7.1 RTOS |
|
||||
`aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
|
||||
[`aarch64-unknown-hermit`](platform-support/hermit.md) | ✓ | | ARM64 Hermit
|
||||
|
100
src/doc/rustc/src/platform-support/aarch64-unknown-teeos.md
Normal file
100
src/doc/rustc/src/platform-support/aarch64-unknown-teeos.md
Normal file
@ -0,0 +1,100 @@
|
||||
# `aarch64-unknown-teeos`
|
||||
|
||||
**Tier: 3**
|
||||
|
||||
Target for the TEEOS operating system.
|
||||
|
||||
TEEOS is a mini os run in TrustZone, for trusted/security apps. The kernel of TEEOS is HongMeng/ChCore micro kernel. The libc for TEEOS is a part of musl.
|
||||
It's very small that there is no RwLock, no network, no stdin, and no file system for apps in TEEOS.
|
||||
|
||||
Some abbreviation:
|
||||
| Abbreviation | The full text | Description |
|
||||
| ---- | ---- | ---- |
|
||||
| TEE | Trusted Execution Environment | ARM TrustZone devide the system into two worlds/modes -- the secure world/mode and the normal world/mode. TEE is in the secure world/mode. |
|
||||
| REE | Rich Execution Environment | The normal world. for example, Linux for Android phone is in REE side. |
|
||||
| TA | Trusted Application | The app run in TEE side system. |
|
||||
| CA | Client Application | The progress run in REE side system. |
|
||||
|
||||
TEEOS is open source in progress. [MORE about](https://gitee.com/opentrustee-group)
|
||||
|
||||
## Target maintainers
|
||||
|
||||
- Petrochenkov Vadim
|
||||
- Sword-Destiny
|
||||
|
||||
## Setup
|
||||
We use OpenHarmony SDK for TEEOS.
|
||||
|
||||
The OpenHarmony SDK doesn't currently support Rust compilation directly, so
|
||||
some setup is required.
|
||||
|
||||
First, you must obtain the OpenHarmony SDK from [this page](https://gitee.com/openharmony/docs/tree/master/en/release-notes).
|
||||
Select the version of OpenHarmony you are developing for and download the "Public SDK package for the standard system".
|
||||
|
||||
Create the following shell scripts that wrap Clang from the OpenHarmony SDK:
|
||||
|
||||
`aarch64-unknown-teeos-clang.sh`
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
exec /path/to/ohos-sdk/linux/native/llvm/bin/clang \
|
||||
--target aarch64-linux-gnu \
|
||||
"$@"
|
||||
```
|
||||
|
||||
`aarch64-unknown-teeos-clang++.sh`
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
exec /path/to/ohos-sdk/linux/native/llvm/bin/clang++ \
|
||||
--target aarch64-linux-gnu \
|
||||
"$@"
|
||||
```
|
||||
|
||||
## Building the target
|
||||
|
||||
To build a rust toolchain, create a `config.toml` with the following contents:
|
||||
|
||||
```toml
|
||||
profile = "compiler"
|
||||
changelog-seen = 2
|
||||
|
||||
[build]
|
||||
sanitizers = true
|
||||
profiler = true
|
||||
target = ["x86_64-unknown-linux-gnu", "aarch64-unknown-teeos"]
|
||||
submodules = false
|
||||
compiler-docs = false
|
||||
extended = true
|
||||
|
||||
[install]
|
||||
bindir = "bin"
|
||||
libdir = "lib"
|
||||
|
||||
[target.aarch64-unknown-teeos]
|
||||
cc = "/path/to/scripts/aarch64-unknown-teeos-clang.sh"
|
||||
cxx = "/path/to/scripts/aarch64-unknown-teeos-clang.sh"
|
||||
linker = "/path/to/scripts/aarch64-unknown-teeos-clang.sh"
|
||||
ar = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ar"
|
||||
ranlib = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ranlib"
|
||||
llvm-config = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-config"
|
||||
```
|
||||
|
||||
## Building Rust programs
|
||||
|
||||
Rust does not yet ship pre-compiled artifacts for this target. To compile for
|
||||
this target, you will either need to build Rust with the target enabled (see
|
||||
"Building the target" above), or build your own copy of `core` by using
|
||||
`build-std` or similar.
|
||||
|
||||
You will need to configure the linker to use in `~/.cargo/config`:
|
||||
```toml
|
||||
[target.aarch64-unknown-teeos]
|
||||
linker = "/path/to/aarch64-unknown-teeos-clang.sh"
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Running the Rust testsuite is not possible now.
|
||||
|
||||
More information about how to test CA/TA. [See here](https://gitee.com/openharmony-sig/tee_tee_dev_kit/tree/master/docs)
|
@ -6,7 +6,7 @@ LL | #[cfg(target_os = "linuz")]
|
||||
| |
|
||||
| help: there is a expected value with a similar name: `"linux"`
|
||||
|
|
||||
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `ericos`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
|
||||
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `ericos`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `teeos`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
|
||||
= note: `#[warn(unexpected_cfgs)]` on by default
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
@ -6,7 +6,7 @@ LL | #[cfg(target_os = "linuz")]
|
||||
| |
|
||||
| help: there is a expected value with a similar name: `"linux"`
|
||||
|
|
||||
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
|
||||
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `teeos`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
|
||||
= note: `#[warn(unexpected_cfgs)]` on by default
|
||||
|
||||
warning: unexpected `cfg` condition value
|
||||
|
Loading…
Reference in New Issue
Block a user