Add support for powerpc-unknown-freebsd
This commit is contained in:
parent
f913a4fe90
commit
763bc13ccc
@ -802,6 +802,7 @@ supported_targets! {
|
||||
("armv6-unknown-freebsd", armv6_unknown_freebsd),
|
||||
("armv7-unknown-freebsd", armv7_unknown_freebsd),
|
||||
("i686-unknown-freebsd", i686_unknown_freebsd),
|
||||
("powerpc-unknown-freebsd", powerpc_unknown_freebsd),
|
||||
("powerpc64-unknown-freebsd", powerpc64_unknown_freebsd),
|
||||
("powerpc64le-unknown-freebsd", powerpc64le_unknown_freebsd),
|
||||
("x86_64-unknown-freebsd", x86_64_unknown_freebsd),
|
||||
|
27
compiler/rustc_target/src/spec/powerpc_unknown_freebsd.rs
Normal file
27
compiler/rustc_target/src/spec/powerpc_unknown_freebsd.rs
Normal file
@ -0,0 +1,27 @@
|
||||
use crate::abi::Endian;
|
||||
use crate::spec::{LinkerFlavor, RelocModel, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
let mut base = super::freebsd_base::opts();
|
||||
base.pre_link_args.entry(LinkerFlavor::Gcc).or_default().push("-m32".to_string());
|
||||
// Extra hint to linker that we are generating secure-PLT code.
|
||||
base.pre_link_args
|
||||
.entry(LinkerFlavor::Gcc)
|
||||
.or_default()
|
||||
.push("--target=powerpc-unknown-freebsd13.0".to_string());
|
||||
base.max_atomic_width = Some(32);
|
||||
|
||||
Target {
|
||||
llvm_target: "powerpc-unknown-freebsd13.0".to_string(),
|
||||
pointer_width: 32,
|
||||
data_layout: "E-m:e-p:32:32-i64:64-n32".to_string(),
|
||||
arch: "powerpc".to_string(),
|
||||
options: TargetOptions {
|
||||
endian: Endian::Big,
|
||||
features: "+secure-plt".to_string(),
|
||||
relocation_model: RelocModel::Pic,
|
||||
mcount: "_mcount".to_string(),
|
||||
..base
|
||||
},
|
||||
}
|
||||
}
|
@ -118,6 +118,10 @@ impl Step for Llvm {
|
||||
let idx = target.triple.find('-').unwrap();
|
||||
|
||||
format!("riscv{}{}", &target.triple[5..7], &target.triple[idx..])
|
||||
} else if self.target.starts_with("powerpc") && self.target.ends_with("freebsd") {
|
||||
// FreeBSD 13 had incompatible ABI changes on all PowerPC platforms.
|
||||
// Set the version suffix to 13.0 so the correct target details are used.
|
||||
format!("{}{}", self.target, "13.0")
|
||||
} else {
|
||||
target.to_string()
|
||||
};
|
||||
@ -277,6 +281,11 @@ impl Step for Llvm {
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround for ppc32 lld limitation
|
||||
if target == "powerpc-unknown-freebsd" {
|
||||
cfg.define("CMAKE_EXE_LINKER_FLAGS", "-fuse-ld=bfd");
|
||||
}
|
||||
|
||||
// https://llvm.org/docs/HowToCrossCompileLLVM.html
|
||||
if target != builder.config.build {
|
||||
builder.ensure(Llvm { target: builder.config.build });
|
||||
|
@ -249,6 +249,7 @@ target | std | host | notes
|
||||
`powerpc-wrs-vxworks` | ? | |
|
||||
`powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
|
||||
`powerpc64le-unknown-freebsd` | | | PPC64LE FreeBSD
|
||||
`powerpc-unknown-freebsd` | | | PowerPC FreeBSD
|
||||
`powerpc64-unknown-linux-musl` | ? | |
|
||||
`powerpc64-wrs-vxworks` | ? | |
|
||||
`powerpc64le-unknown-linux-musl` | ? | |
|
||||
|
Loading…
x
Reference in New Issue
Block a user