Add support for powerpc-unknown-freebsd
This commit is contained in:
parent
f913a4fe90
commit
763bc13ccc
4 changed files with 38 additions and 0 deletions
|
@ -802,6 +802,7 @@ supported_targets! {
|
||||||
("armv6-unknown-freebsd", armv6_unknown_freebsd),
|
("armv6-unknown-freebsd", armv6_unknown_freebsd),
|
||||||
("armv7-unknown-freebsd", armv7_unknown_freebsd),
|
("armv7-unknown-freebsd", armv7_unknown_freebsd),
|
||||||
("i686-unknown-freebsd", i686_unknown_freebsd),
|
("i686-unknown-freebsd", i686_unknown_freebsd),
|
||||||
|
("powerpc-unknown-freebsd", powerpc_unknown_freebsd),
|
||||||
("powerpc64-unknown-freebsd", powerpc64_unknown_freebsd),
|
("powerpc64-unknown-freebsd", powerpc64_unknown_freebsd),
|
||||||
("powerpc64le-unknown-freebsd", powerpc64le_unknown_freebsd),
|
("powerpc64le-unknown-freebsd", powerpc64le_unknown_freebsd),
|
||||||
("x86_64-unknown-freebsd", x86_64_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();
|
let idx = target.triple.find('-').unwrap();
|
||||||
|
|
||||||
format!("riscv{}{}", &target.triple[5..7], &target.triple[idx..])
|
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 {
|
} else {
|
||||||
target.to_string()
|
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
|
// https://llvm.org/docs/HowToCrossCompileLLVM.html
|
||||||
if target != builder.config.build {
|
if target != builder.config.build {
|
||||||
builder.ensure(Llvm { target: builder.config.build });
|
builder.ensure(Llvm { target: builder.config.build });
|
||||||
|
|
|
@ -249,6 +249,7 @@ target | std | host | notes
|
||||||
`powerpc-wrs-vxworks` | ? | |
|
`powerpc-wrs-vxworks` | ? | |
|
||||||
`powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
|
`powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
|
||||||
`powerpc64le-unknown-freebsd` | | | PPC64LE FreeBSD
|
`powerpc64le-unknown-freebsd` | | | PPC64LE FreeBSD
|
||||||
|
`powerpc-unknown-freebsd` | | | PowerPC FreeBSD
|
||||||
`powerpc64-unknown-linux-musl` | ? | |
|
`powerpc64-unknown-linux-musl` | ? | |
|
||||||
`powerpc64-wrs-vxworks` | ? | |
|
`powerpc64-wrs-vxworks` | ? | |
|
||||||
`powerpc64le-unknown-linux-musl` | ? | |
|
`powerpc64le-unknown-linux-musl` | ? | |
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue