mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 08:44:35 +00:00
Auto merge of #113061 - Amanieu:x86_64-ohos, r=compiler-errors
Add x86_64-unknown-linux-ohos target This complements the existing `aarch64-unknown-linux-ohos` and `armv7-unknown-linux-ohos` targets. This should be covered by the existing MCP (https://github.com/rust-lang/compiler-team/issues/568), but I can also create a new MCP if that is preferred.
This commit is contained in:
commit
745efcc7d9
@ -3,9 +3,7 @@ use crate::spec::{Target, TargetOptions};
|
||||
use super::SanitizerSet;
|
||||
|
||||
pub fn target() -> Target {
|
||||
let mut base = super::linux_musl_base::opts();
|
||||
base.env = "ohos".into();
|
||||
base.crt_static_default = false;
|
||||
let mut base = super::linux_ohos_base::opts();
|
||||
base.max_atomic_width = Some(128);
|
||||
|
||||
Target {
|
||||
@ -17,8 +15,6 @@ pub fn target() -> Target {
|
||||
options: TargetOptions {
|
||||
features: "+reserve-x18".into(),
|
||||
mcount: "\u{1}_mcount".into(),
|
||||
force_emulated_tls: true,
|
||||
has_thread_local: false,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
| SanitizerSet::LEAK
|
||||
|
@ -17,12 +17,8 @@ pub fn target() -> Target {
|
||||
abi: "eabi".into(),
|
||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
env: "ohos".into(),
|
||||
crt_static_default: false,
|
||||
mcount: "\u{1}mcount".into(),
|
||||
force_emulated_tls: true,
|
||||
has_thread_local: false,
|
||||
..super::linux_musl_base::opts()
|
||||
..super::linux_ohos_base::opts()
|
||||
},
|
||||
}
|
||||
}
|
||||
|
12
compiler/rustc_target/src/spec/linux_ohos_base.rs
Normal file
12
compiler/rustc_target/src/spec/linux_ohos_base.rs
Normal file
@ -0,0 +1,12 @@
|
||||
use crate::spec::TargetOptions;
|
||||
|
||||
pub fn opts() -> TargetOptions {
|
||||
let mut base = super::linux_base::opts();
|
||||
|
||||
base.env = "ohos".into();
|
||||
base.crt_static_default = false;
|
||||
base.force_emulated_tls = true;
|
||||
base.has_thread_local = false;
|
||||
|
||||
base
|
||||
}
|
@ -74,6 +74,7 @@ mod l4re_base;
|
||||
mod linux_base;
|
||||
mod linux_gnu_base;
|
||||
mod linux_musl_base;
|
||||
mod linux_ohos_base;
|
||||
mod linux_uclibc_base;
|
||||
mod msvc_base;
|
||||
mod netbsd_base;
|
||||
@ -1495,6 +1496,7 @@ supported_targets! {
|
||||
|
||||
("aarch64-unknown-linux-ohos", aarch64_unknown_linux_ohos),
|
||||
("armv7-unknown-linux-ohos", armv7_unknown_linux_ohos),
|
||||
("x86_64-unknown-linux-ohos", x86_64_unknown_linux_ohos),
|
||||
}
|
||||
|
||||
/// Cow-Vec-Str: Cow<'static, [Cow<'static, str>]>
|
||||
|
26
compiler/rustc_target/src/spec/x86_64_unknown_linux_ohos.rs
Normal file
26
compiler/rustc_target/src/spec/x86_64_unknown_linux_ohos.rs
Normal file
@ -0,0 +1,26 @@
|
||||
use crate::spec::{Cc, LinkerFlavor, Lld, SanitizerSet, StackProbeType, Target};
|
||||
|
||||
pub fn target() -> Target {
|
||||
let mut base = super::linux_ohos_base::opts();
|
||||
base.cpu = "x86-64".into();
|
||||
base.max_atomic_width = Some(64);
|
||||
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]);
|
||||
base.stack_probes = StackProbeType::X86;
|
||||
base.static_position_independent_executables = true;
|
||||
base.supported_sanitizers = SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
| SanitizerSet::LEAK
|
||||
| SanitizerSet::MEMORY
|
||||
| SanitizerSet::THREAD;
|
||||
base.supports_xray = true;
|
||||
|
||||
Target {
|
||||
// LLVM 15 doesn't support OpenHarmony yet, use a linux target instead.
|
||||
llvm_target: "x86_64-unknown-linux-musl".into(),
|
||||
pointer_width: 64,
|
||||
data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||
.into(),
|
||||
arch: "x86_64".into(),
|
||||
options: base,
|
||||
}
|
||||
}
|
@ -1056,6 +1056,9 @@ fn supported_sanitizers(
|
||||
"s390x-unknown-linux-musl" => {
|
||||
common_libs("linux", "s390x", &["asan", "lsan", "msan", "tsan"])
|
||||
}
|
||||
"x86_64-unknown-linux-ohos" => {
|
||||
common_libs("linux", "x86_64", &["asan", "lsan", "msan", "tsan"])
|
||||
}
|
||||
_ => Vec::new(),
|
||||
}
|
||||
}
|
||||
|
@ -329,6 +329,7 @@ target | std | host | notes
|
||||
`x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku
|
||||
`x86_64-unknown-hermit` | ✓ | | HermitCore
|
||||
`x86_64-unknown-l4re-uclibc` | ? | |
|
||||
[`x86_64-unknown-linux-ohos`](platform-support/openharmony.md) | ✓ | | x86_64 OpenHarmony |
|
||||
[`x86_64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 64-bit OpenBSD
|
||||
`x86_64-uwp-windows-gnu` | ✓ | |
|
||||
`x86_64-uwp-windows-msvc` | ✓ | |
|
||||
|
@ -71,6 +71,28 @@ exec /path/to/ohos-sdk/linux/native/llvm/bin/clang++ \
|
||||
"$@"
|
||||
```
|
||||
|
||||
`x86_64-unknown-linux-ohos-clang.sh`
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
exec /path/to/ohos-sdk/linux/native/llvm/bin/clang \
|
||||
-target x86_64-linux-ohos \
|
||||
--sysroot=/path/to/ohos-sdk/linux/native/sysroot \
|
||||
-D__MUSL__ \
|
||||
"$@"
|
||||
```
|
||||
|
||||
`x86_64-unknown-linux-ohos-clang++.sh`
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
exec /path/to/ohos-sdk/linux/native/llvm/bin/clang++ \
|
||||
-target x86_64-linux-ohos \
|
||||
--sysroot=/path/to/ohos-sdk/linux/native/sysroot \
|
||||
-D__MUSL__ \
|
||||
"$@"
|
||||
```
|
||||
|
||||
Future versions of the OpenHarmony SDK will avoid the need for this process.
|
||||
|
||||
## Building the target
|
||||
@ -98,6 +120,13 @@ cxx = "/path/to/armv7-unknown-linux-ohos-clang++.sh"
|
||||
ar = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ar"
|
||||
ranlib = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ranlib"
|
||||
linker = "/path/to/armv7-unknown-linux-ohos-clang.sh"
|
||||
|
||||
[target.x86_64-unknown-linux-ohos]
|
||||
cc = "/path/to/x86_64-unknown-linux-ohos-clang.sh"
|
||||
cxx = "/path/to/x86_64-unknown-linux-ohos-clang++.sh"
|
||||
ar = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ar"
|
||||
ranlib = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ranlib"
|
||||
linker = "/path/to/x86_64-unknown-linux-ohos-clang.sh"
|
||||
```
|
||||
|
||||
## Building Rust programs
|
||||
@ -116,6 +145,10 @@ linker = "/path/to/aarch64-unknown-linux-ohos-clang.sh"
|
||||
[target.armv7-unknown-linux-ohos]
|
||||
ar = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ar"
|
||||
linker = "/path/to/armv7-unknown-linux-ohos-clang.sh"
|
||||
|
||||
[target.x86_64-unknown-linux-ohos]
|
||||
ar = "/path/to/ohos-sdk/linux/native/llvm/bin/llvm-ar"
|
||||
linker = "/path/to/x86_64-unknown-linux-ohos-clang.sh"
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
Loading…
Reference in New Issue
Block a user