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:
erjuan
2024-11-12 10:56:58 +08:00
parent 088d8cf032
commit e3172020d2
6 changed files with 59 additions and 9 deletions
+1 -1
View File
@@ -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()
},
}
+1
View File
@@ -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
View File
@@ -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"])
}