diff options
| author | Tyler Mandry <tmandry@gmail.com> | 2019-11-26 17:56:11 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-26 17:56:11 -0600 |
| commit | 7ef70054224162c8809cac8aa4eb34a2efc5594d (patch) | |
| tree | 21c7e591395dfd372f103322c10cabd493678856 | |
| parent | 9e2802b57bbf83d28afd114321daa609f023b33c (diff) | |
| parent | 55ce5c09ff501d14ef2cce4498267372450a60d1 (diff) | |
Rollup merge of #66713 - hermitcore:hermit, r=alexcrichton
introduce a target to build the kernel of the unikernel HermitCore We are developing the unikernel HermitCore, where the kernel is written in Rust and is already supported by the Rust Standard Library. To compile the kernel with the new build flag "-Z build-std", we introduce a new target, which avoids the usage of SSE & AVX within the kernel.
| -rw-r--r-- | src/librustc_target/spec/hermit_kernel_base.rs | 27 | ||||
| -rw-r--r-- | src/librustc_target/spec/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs | 25 |
3 files changed, 54 insertions, 0 deletions
diff --git a/src/librustc_target/spec/hermit_kernel_base.rs b/src/librustc_target/spec/hermit_kernel_base.rs new file mode 100644 index 00000000000..ad1027c7bc7 --- /dev/null +++ b/src/librustc_target/spec/hermit_kernel_base.rs @@ -0,0 +1,27 @@ +use crate::spec::{LldFlavor, LinkArgs, LinkerFlavor, PanicStrategy, TargetOptions}; +use std::default::Default; + +pub fn opts() -> TargetOptions { + let mut pre_link_args = LinkArgs::new(); + pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![ + "--build-id".to_string(), + "--hash-style=gnu".to_string(), + "--Bstatic".to_string(), + ]); + + TargetOptions { + disable_redzone: true, + linker: Some("rust-lld".to_owned()), + executables: true, + has_elf_tls: true, + linker_is_gnu: true, + pre_link_args, + no_default_libraries: true, + panic_strategy: PanicStrategy::Abort, + position_independent_executables: true, + relocation_model: "static".to_string(), + target_family: None, + tls_model: "initial-exec".to_string(), + .. Default::default() + } +} diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs index 1a7cb943de7..29076254584 100644 --- a/src/librustc_target/spec/mod.rs +++ b/src/librustc_target/spec/mod.rs @@ -54,6 +54,7 @@ mod dragonfly_base; mod freebsd_base; mod haiku_base; mod hermit_base; +mod hermit_kernel_base; mod linux_base; mod linux_kernel_base; mod linux_musl_base; @@ -481,6 +482,7 @@ supported_targets! { ("aarch64-unknown-hermit", aarch64_unknown_hermit), ("x86_64-unknown-hermit", x86_64_unknown_hermit), + ("x86_64-unknown-hermit-kernel", x86_64_unknown_hermit_kernel), ("riscv32i-unknown-none-elf", riscv32i_unknown_none_elf), ("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf), diff --git a/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs b/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs new file mode 100644 index 00000000000..ebaada8f4f8 --- /dev/null +++ b/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs @@ -0,0 +1,25 @@ +use crate::spec::{LldFlavor, LinkerFlavor, Target, TargetResult}; + +pub fn target() -> TargetResult { + let mut base = super::hermit_kernel_base::opts(); + base.cpu = "x86-64".to_string(); + base.max_atomic_width = Some(64); + base.features = + "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float" + .to_string(); + base.stack_probes = true; + + Ok(Target { + llvm_target: "x86_64-unknown-hermit".to_string(), + target_endian: "little".to_string(), + target_pointer_width: "64".to_string(), + target_c_int_width: "32".to_string(), + data_layout: "e-m:e-i64:64-f80:128-n8:16:32:64-S128".to_string(), + arch: "x86_64".to_string(), + target_os: "hermit".to_string(), + target_env: String::new(), + target_vendor: "unknown".to_string(), + linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), + options: base, + }) +} |
