Skip to content

Commit bb4d1b1

Browse files
committed
Add target_env = "macabi" and target_env = "sim"
1 parent f5c5102 commit bb4d1b1

33 files changed

+111
-81
lines changed

compiler/rustc_codegen_ssa/src/back/apple.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod tests;
1717

1818
/// The canonical name of the desired SDK for a given target.
1919
pub(super) fn sdk_name(target: &Target) -> &'static str {
20-
match (&*target.os, &*target.abi) {
20+
match (&*target.os, &*target.env) {
2121
("macos", "") => "MacOSX",
2222
("ios", "") => "iPhoneOS",
2323
("ios", "sim") => "iPhoneSimulator",
@@ -34,7 +34,7 @@ pub(super) fn sdk_name(target: &Target) -> &'static str {
3434
}
3535

3636
pub(super) fn macho_platform(target: &Target) -> u32 {
37-
match (&*target.os, &*target.abi) {
37+
match (&*target.os, &*target.env) {
3838
("macos", _) => object::macho::PLATFORM_MACOS,
3939
("ios", "macabi") => object::macho::PLATFORM_MACCATALYST,
4040
("ios", "sim") => object::macho::PLATFORM_IOSSIMULATOR,

compiler/rustc_codegen_ssa/src/back/link.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -3040,7 +3040,7 @@ pub(crate) fn are_upstream_rust_objects_already_included(sess: &Session) -> bool
30403040
/// We need to communicate five things to the linker on Apple/Darwin targets:
30413041
/// - The architecture.
30423042
/// - The operating system (and that it's an Apple platform).
3043-
/// - The environment / ABI.
3043+
/// - The environment.
30443044
/// - The deployment target.
30453045
/// - The SDK version.
30463046
fn add_apple_link_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
@@ -3054,7 +3054,7 @@ fn add_apple_link_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavo
30543054
// `sess.target.arch` (`target_arch`) is not detailed enough.
30553055
let llvm_arch = sess.target.llvm_target.split_once('-').expect("LLVM target must have arch").0;
30563056
let target_os = &*sess.target.os;
3057-
let target_abi = &*sess.target.abi;
3057+
let target_env = &*sess.target.env;
30583058

30593059
// The architecture name to forward to the linker.
30603060
//
@@ -3105,14 +3105,14 @@ fn add_apple_link_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavo
31053105
// > - visionos-simulator
31063106
// > - xros-simulator
31073107
// > - driverkit
3108-
let platform_name = match (target_os, target_abi) {
3108+
let platform_name = match (target_os, target_env) {
31093109
(os, "") => os,
31103110
("ios", "macabi") => "mac-catalyst",
31113111
("ios", "sim") => "ios-simulator",
31123112
("tvos", "sim") => "tvos-simulator",
31133113
("watchos", "sim") => "watchos-simulator",
31143114
("visionos", "sim") => "visionos-simulator",
3115-
_ => bug!("invalid OS/ABI combination for Apple target: {target_os}, {target_abi}"),
3115+
_ => bug!("invalid OS/env combination for Apple target: {target_os}, {target_env}"),
31163116
};
31173117

31183118
let min_version = sess.apple_deployment_target().fmt_full().to_string();

compiler/rustc_metadata/src/native_libs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ pub fn walk_native_lib_search_dirs<R>(
8181
// Mac Catalyst uses the macOS SDK, but to link to iOS-specific frameworks
8282
// we must have the support library stubs in the library search path (#121430).
8383
if let Some(sdk_root) = apple_sdk_root
84-
&& sess.target.llvm_target.contains("macabi")
84+
&& sess.target.env == "macabi"
8585
{
8686
f(&sdk_root.join("System/iOSSupport/usr/lib"), false)?;
8787
f(&sdk_root.join("System/iOSSupport/System/Library/Frameworks"), true)?;

compiler/rustc_target/src/spec/base/apple/mod.rs

+25-18
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ impl Arch {
5151
})
5252
}
5353

54-
fn target_cpu(self, abi: TargetAbi) -> &'static str {
54+
fn target_cpu(self, env: TargetEnv) -> &'static str {
5555
match self {
5656
Armv7k => "cortex-a8",
5757
Armv7s => "swift", // iOS 10 is only supported on iPhone 5 or higher.
58-
Arm64 => match abi {
59-
TargetAbi::Normal => "apple-a7",
60-
TargetAbi::Simulator => "apple-a12",
61-
TargetAbi::MacCatalyst => "apple-a12",
58+
Arm64 => match env {
59+
TargetEnv::Normal => "apple-a7",
60+
TargetEnv::Simulator => "apple-a12",
61+
TargetEnv::MacCatalyst => "apple-a12",
6262
},
6363
Arm64e => "apple-a12",
6464
Arm64_32 => "apple-s4",
@@ -83,14 +83,14 @@ impl Arch {
8383
}
8484

8585
#[derive(Copy, Clone, PartialEq)]
86-
pub(crate) enum TargetAbi {
86+
pub(crate) enum TargetEnv {
8787
Normal,
8888
Simulator,
8989
MacCatalyst,
9090
}
9191

92-
impl TargetAbi {
93-
fn target_abi(self) -> &'static str {
92+
impl TargetEnv {
93+
fn target_env(self) -> &'static str {
9494
match self {
9595
Self::Normal => "",
9696
Self::MacCatalyst => "macabi",
@@ -104,13 +104,20 @@ impl TargetAbi {
104104
pub(crate) fn base(
105105
os: &'static str,
106106
arch: Arch,
107-
abi: TargetAbi,
107+
env: TargetEnv,
108108
) -> (TargetOptions, StaticCow<str>, StaticCow<str>) {
109109
let mut opts = TargetOptions {
110-
abi: abi.target_abi().into(),
111110
llvm_floatabi: Some(FloatAbi::Hard),
112111
os: os.into(),
113-
cpu: arch.target_cpu(abi).into(),
112+
env: env.target_env().into(),
113+
// NOTE: We originally set `cfg(target_abi = "macabi")` / `cfg(target_abi = "sim")`,
114+
// before it was discovered that those are actually environments:
115+
// https://github.com/rust-lang/rust/issues/133331
116+
//
117+
// But let's continue setting them for backwards compatibility.
118+
// FIXME(madsmtm): Warn about using these in the future.
119+
abi: env.target_env().into(),
120+
cpu: arch.target_cpu(env).into(),
114121
link_env_remove: link_env_remove(os),
115122
vendor: "apple".into(),
116123
linker_flavor: LinkerFlavor::Darwin(Cc::Yes, Lld::No),
@@ -162,14 +169,14 @@ pub(crate) fn base(
162169
// All Apple x86-32 targets have SSE2.
163170
opts.rustc_abi = Some(RustcAbi::X86Sse2);
164171
}
165-
(opts, unversioned_llvm_target(os, arch, abi), arch.target_arch())
172+
(opts, unversioned_llvm_target(os, arch, env), arch.target_arch())
166173
}
167174

168175
/// Generate part of the LLVM target triple.
169176
///
170177
/// See `rustc_codegen_ssa::back::versioned_llvm_target` for the full triple passed to LLVM and
171178
/// Clang.
172-
fn unversioned_llvm_target(os: &str, arch: Arch, abi: TargetAbi) -> StaticCow<str> {
179+
fn unversioned_llvm_target(os: &str, arch: Arch, env: TargetEnv) -> StaticCow<str> {
173180
let arch = arch.target_name();
174181
// Convert to the "canonical" OS name used by LLVM:
175182
// https://github.com/llvm/llvm-project/blob/llvmorg-18.1.8/llvm/lib/TargetParser/Triple.cpp#L236-L282
@@ -181,10 +188,10 @@ fn unversioned_llvm_target(os: &str, arch: Arch, abi: TargetAbi) -> StaticCow<st
181188
"visionos" => "xros",
182189
_ => unreachable!("tried to get LLVM target OS for non-Apple platform"),
183190
};
184-
let environment = match abi {
185-
TargetAbi::Normal => "",
186-
TargetAbi::MacCatalyst => "-macabi",
187-
TargetAbi::Simulator => "-simulator",
191+
let environment = match env {
192+
TargetEnv::Normal => "",
193+
TargetEnv::MacCatalyst => "-macabi",
194+
TargetEnv::Simulator => "-simulator",
188195
};
189196
format!("{arch}-apple-{os}{environment}").into()
190197
}
@@ -303,7 +310,7 @@ impl OSVersion {
303310
/// This matches what LLVM does, see in part:
304311
/// <https://github.com/llvm/llvm-project/blob/llvmorg-18.1.8/llvm/lib/TargetParser/Triple.cpp#L1900-L1932>
305312
pub fn minimum_deployment_target(target: &Target) -> Self {
306-
let (major, minor, patch) = match (&*target.os, &*target.arch, &*target.abi) {
313+
let (major, minor, patch) = match (&*target.os, &*target.arch, &*target.env) {
307314
("macos", "aarch64", _) => (11, 0, 0),
308315
("ios", "aarch64", "macabi") => (14, 0, 0),
309316
("ios", "aarch64", "sim") => (14, 0, 0),

compiler/rustc_target/src/spec/base/apple/tests.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::spec::targets::{
66
};
77

88
#[test]
9-
fn simulator_targets_set_abi() {
9+
fn simulator_targets_set_env() {
1010
let all_sim_targets = [
1111
x86_64_apple_ios::target(),
1212
x86_64_apple_tvos::target(),
@@ -18,7 +18,9 @@ fn simulator_targets_set_abi() {
1818
];
1919

2020
for target in &all_sim_targets {
21-
assert_eq!(target.abi, "sim")
21+
assert_eq!(target.env, "sim");
22+
// Ensure backwards compat
23+
assert_eq!(target.abi, "sim");
2224
}
2325
}
2426

compiler/rustc_target/src/spec/targets/aarch64_apple_darwin.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("macos", Arch::Arm64, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("macos", Arch::Arm64, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_ios.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_ios_macabi.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetAbi::MacCatalyst);
5+
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetEnv::MacCatalyst);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_ios_sim.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetAbi::Simulator);
5+
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetEnv::Simulator);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_tvos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_tvos_sim.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64, TargetAbi::Simulator);
5+
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64, TargetEnv::Simulator);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_visionos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("visionos", Arch::Arm64, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("visionos", Arch::Arm64, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_visionos_sim.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("visionos", Arch::Arm64, TargetAbi::Simulator);
5+
let (opts, llvm_target, arch) = base("visionos", Arch::Arm64, TargetEnv::Simulator);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_watchos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("watchos", Arch::Arm64, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("watchos", Arch::Arm64, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/aarch64_apple_watchos_sim.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("watchos", Arch::Arm64, TargetAbi::Simulator);
5+
let (opts, llvm_target, arch) = base("watchos", Arch::Arm64, TargetEnv::Simulator);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/arm64_32_apple_watchos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("watchos", Arch::Arm64_32, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("watchos", Arch::Arm64_32, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/arm64e_apple_darwin.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("macos", Arch::Arm64e, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("macos", Arch::Arm64e, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/arm64e_apple_ios.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("ios", Arch::Arm64e, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("ios", Arch::Arm64e, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/arm64e_apple_tvos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64e, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64e, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/armv7k_apple_watchos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("watchos", Arch::Armv7k, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("watchos", Arch::Armv7k, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/armv7s_apple_ios.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("ios", Arch::Armv7s, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("ios", Arch::Armv7s, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/i386_apple_ios.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
55
// i386-apple-ios is a simulator target, even though it isn't declared
66
// that way in the target name like the other ones...
7-
let (opts, llvm_target, arch) = base("ios", Arch::I386, TargetAbi::Simulator);
7+
let (opts, llvm_target, arch) = base("ios", Arch::I386, TargetEnv::Simulator);
88
Target {
99
llvm_target,
1010
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/i686_apple_darwin.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("macos", Arch::I686, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("macos", Arch::I686, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

compiler/rustc_target/src/spec/targets/x86_64_apple_darwin.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::spec::base::apple::{Arch, TargetAbi, base};
1+
use crate::spec::base::apple::{Arch, TargetEnv, base};
22
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
33

44
pub(crate) fn target() -> Target {
5-
let (opts, llvm_target, arch) = base("macos", Arch::X86_64, TargetAbi::Normal);
5+
let (opts, llvm_target, arch) = base("macos", Arch::X86_64, TargetEnv::Normal);
66
Target {
77
llvm_target,
88
metadata: TargetMetadata {

0 commit comments

Comments
 (0)