mirror of
https://github.com/openharmony/third_party_rust_rust.git
synced 2026-07-18 17:34:40 -04:00
support ohos targets and provide asan library
support ohos targets and provide asan library Signed-off-by: fengting <fengting11@huawei.com>
This commit is contained in:
@@ -26,7 +26,7 @@ const OPTIONAL_COMPONENTS: &[&str] = &[
|
||||
];
|
||||
|
||||
const REQUIRED_COMPONENTS: &[&str] =
|
||||
&["ipo", "bitreader", "bitwriter", "linker", "asmparser", "lto", "coverage", "instrumentation"];
|
||||
&["ipo", "bitreader", "bitwriter", "linker", "asmparser", "lto", "coverage", "instrumentation", "parts"];
|
||||
|
||||
fn detect_llvm_link() -> (&'static str, &'static str) {
|
||||
// Force the link mode we want, preferring static by default, but
|
||||
|
||||
@@ -10,7 +10,7 @@ pub fn target() -> Target {
|
||||
|
||||
Target {
|
||||
// LLVM 15 doesn't support OpenHarmony yet, use a linux target instead.
|
||||
llvm_target: "aarch64-unknown-linux-musl".into(),
|
||||
llvm_target: "aarch64-linux-ohos".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(),
|
||||
@@ -22,8 +22,6 @@ pub fn target() -> Target {
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
| SanitizerSet::LEAK
|
||||
| SanitizerSet::MEMORY
|
||||
| SanitizerSet::MEMTAG
|
||||
| SanitizerSet::THREAD
|
||||
| SanitizerSet::HWADDRESS,
|
||||
..base
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use crate::spec::{Target, TargetOptions};
|
||||
use super::SanitizerSet;
|
||||
|
||||
// This target is for OpenHarmony on ARMv7 Linux with thumb-mode, but no NEON or
|
||||
// hardfloat.
|
||||
@@ -8,7 +9,7 @@ pub fn target() -> Target {
|
||||
// target.
|
||||
Target {
|
||||
// LLVM 15 doesn't support OpenHarmony yet, use a linux target instead.
|
||||
llvm_target: "armv7-unknown-linux-gnueabi".into(),
|
||||
llvm_target: "arm-linux-ohos".into(),
|
||||
pointer_width: 32,
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: "arm".into(),
|
||||
@@ -22,6 +23,8 @@ pub fn target() -> Target {
|
||||
mcount: "\u{1}mcount".into(),
|
||||
force_emulated_tls: true,
|
||||
has_thread_local: false,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::LEAK,
|
||||
..super::linux_musl_base::opts()
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1493,6 +1493,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>]>
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
use crate::spec::{Cc, LinkerFlavor, Lld, SanitizerSet, StackProbeType, Target};
|
||||
|
||||
pub fn target() -> Target {
|
||||
let mut base = super::linux_musl_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::THREAD;
|
||||
|
||||
base.env = "ohos".into();
|
||||
base.crt_static_default = false;
|
||||
base.force_emulated_tls = true;
|
||||
base.has_thread_local = false;
|
||||
|
||||
Target {
|
||||
// LLVM 15 doesn't support OpenHarmony yet, use a linux target instead.
|
||||
llvm_target: "x86_64-linux-ohos".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,
|
||||
}
|
||||
}
|
||||
+22
-4
@@ -679,7 +679,11 @@ fn configure_cmake(
|
||||
}
|
||||
}
|
||||
if builder.config.llvm_clang_cl.is_some() {
|
||||
cflags.push(&format!(" --target={}", target));
|
||||
if target.contains("armv7-unknown-linux-ohos") {
|
||||
cflags.push(&format!(" --target={}", "arm-linux-ohos"));
|
||||
} else {
|
||||
cflags.push(&format!(" --target={}", target));
|
||||
}
|
||||
}
|
||||
for flag in extra_compiler_flags {
|
||||
cflags.push(&format!(" {}", flag));
|
||||
@@ -691,7 +695,11 @@ fn configure_cmake(
|
||||
cxxflags.push(s);
|
||||
}
|
||||
if builder.config.llvm_clang_cl.is_some() {
|
||||
cxxflags.push(&format!(" --target={}", target));
|
||||
if target.contains("armv7-unknown-linux-ohos") {
|
||||
cxxflags.push(&format!(" --target={}", "arm-linux-ohos"));
|
||||
} else {
|
||||
cxxflags.push(&format!(" --target={}", target));
|
||||
}
|
||||
}
|
||||
for flag in extra_compiler_flags {
|
||||
cxxflags.push(&format!(" {}", flag));
|
||||
@@ -946,7 +954,11 @@ impl Step for Sanitizers {
|
||||
|
||||
let mut cfg = cmake::Config::new(&compiler_rt_dir);
|
||||
cfg.profile("Release");
|
||||
cfg.define("CMAKE_C_COMPILER_TARGET", self.target.triple);
|
||||
if self.target.triple == "armv7-unknown-linux-ohos" {
|
||||
cfg.define("CMAKE_C_COMPILER_TARGET", "arm-linux-ohos");
|
||||
} else {
|
||||
cfg.define("CMAKE_C_COMPILER_TARGET", self.target.triple);
|
||||
}
|
||||
cfg.define("COMPILER_RT_BUILD_BUILTINS", "OFF");
|
||||
cfg.define("COMPILER_RT_BUILD_CRT", "OFF");
|
||||
cfg.define("COMPILER_RT_BUILD_LIBFUZZER", "OFF");
|
||||
@@ -1033,7 +1045,10 @@ fn supported_sanitizers(
|
||||
common_libs("linux", "aarch64", &["asan", "lsan", "msan", "tsan", "hwasan"])
|
||||
}
|
||||
"aarch64-unknown-linux-ohos" => {
|
||||
common_libs("linux", "aarch64", &["asan", "lsan", "msan", "tsan", "hwasan"])
|
||||
common_libs("linux", "aarch64", &["asan", "lsan", "tsan", "hwasan"])
|
||||
}
|
||||
"armv7-unknown-linux-ohos" => {
|
||||
common_libs("linux", "arm", &["asan", "lsan"])
|
||||
}
|
||||
"x86_64-apple-darwin" => darwin_libs("osx", &["asan", "lsan", "tsan"]),
|
||||
"x86_64-unknown-fuchsia" => common_libs("fuchsia", "x86_64", &["asan"]),
|
||||
@@ -1050,6 +1065,9 @@ fn supported_sanitizers(
|
||||
"x86_64-unknown-linux-musl" => {
|
||||
common_libs("linux", "x86_64", &["asan", "lsan", "msan", "tsan"])
|
||||
}
|
||||
"x86_64-unknown-linux-ohos" => {
|
||||
common_libs("linux", "x86_64", &["asan", "lsan", "tsan"])
|
||||
}
|
||||
"s390x-unknown-linux-gnu" => {
|
||||
common_libs("linux", "s390x", &["asan", "lsan", "msan", "tsan"])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user