Skip to content

Commit b997b6a

Browse files
committed
Move Target::llvm_target field to MaybeLazy<str>
1 parent 1ac16e3 commit b997b6a

24 files changed

+182
-115
lines changed

compiler/rustc_target/src/spec/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1881,7 +1881,7 @@ impl TargetWarnings {
18811881
#[derive(PartialEq, Clone, Debug)]
18821882
pub struct Target {
18831883
/// Target triple to pass to LLVM.
1884-
pub llvm_target: StaticCow<str>,
1884+
pub llvm_target: MaybeLazy<str>,
18851885
/// Metadata about a target, for example the description or tier.
18861886
/// Used for generating target documentation.
18871887
pub metadata: TargetMetadata,
@@ -2736,7 +2736,7 @@ impl Target {
27362736
};
27372737

27382738
let mut base = Target {
2739-
llvm_target: get_req_field("llvm-target")?.into(),
2739+
llvm_target: MaybeLazy::owned(get_req_field("llvm-target")?),
27402740
metadata: Default::default(),
27412741
pointer_width: get_req_field("target-pointer-width")?
27422742
.parse::<u32>()

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
use crate::spec::base::apple::{macos_llvm_target, opts, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, SanitizerSet, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
6-
let mut base = opts("macos", arch, TargetAbi::Normal);
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "macos";
7+
const ABI: TargetAbi = TargetAbi::Normal;
8+
9+
let mut base = opts(OS, ARCH, ABI);
710
base.cpu = "apple-m1".into();
811
base.max_atomic_width = Some(128);
912

@@ -14,7 +17,7 @@ pub fn target() -> Target {
1417
// Clang automatically chooses a more specific target based on
1518
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
1619
// correctly, we do too.
17-
llvm_target: macos_llvm_target(arch).into(),
20+
llvm_target: MaybeLazy::lazy(|| macos_llvm_target(ARCH)),
1821
metadata: crate::spec::TargetMetadata {
1922
description: None,
2023
tier: None,
@@ -23,7 +26,7 @@ pub fn target() -> Target {
2326
},
2427
pointer_width: 64,
2528
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
26-
arch: arch.target_arch(),
29+
arch: ARCH.target_arch(),
2730
options: TargetOptions {
2831
mcount: "\u{1}mcount".into(),
2932
frame_pointer: FramePointer::NonLeaf,

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
use crate::spec::base::apple::{ios_llvm_target, opts, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, SanitizerSet, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
6-
let mut base = opts("ios", arch, TargetAbi::Normal);
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "ios";
7+
const ABI: TargetAbi = TargetAbi::Normal;
8+
9+
let mut base = opts(OS, ARCH, ABI);
710
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
811

912
Target {
1013
// Clang automatically chooses a more specific target based on
1114
// IPHONEOS_DEPLOYMENT_TARGET.
1215
// This is required for the target to pick the right
1316
// MACH-O commands, so we do too.
14-
llvm_target: ios_llvm_target(arch).into(),
17+
llvm_target: MaybeLazy::lazy(|| ios_llvm_target(ARCH)),
1518
metadata: crate::spec::TargetMetadata {
1619
description: None,
1720
tier: None,
@@ -20,7 +23,7 @@ pub fn target() -> Target {
2023
},
2124
pointer_width: 64,
2225
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
23-
arch: arch.target_arch(),
26+
arch: ARCH.target_arch(),
2427
options: TargetOptions {
2528
features: "+neon,+fp-armv8,+apple-a7".into(),
2629
max_atomic_width: Some(128),

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
use crate::spec::base::apple::{mac_catalyst_llvm_target, opts, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, SanitizerSet, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
6-
let mut base = opts("ios", arch, TargetAbi::MacCatalyst);
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "ios";
7+
const ABI: TargetAbi = TargetAbi::MacCatalyst;
8+
9+
let mut base = opts(OS, ARCH, ABI);
710
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::LEAK | SanitizerSet::THREAD;
811

912
Target {
10-
llvm_target: mac_catalyst_llvm_target(arch).into(),
13+
llvm_target: MaybeLazy::lazy(|| mac_catalyst_llvm_target(ARCH)),
1114
metadata: crate::spec::TargetMetadata {
1215
description: None,
1316
tier: None,
@@ -16,7 +19,7 @@ pub fn target() -> Target {
1619
},
1720
pointer_width: 64,
1821
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
19-
arch: arch.target_arch(),
22+
arch: ARCH.target_arch(),
2023
options: TargetOptions {
2124
features: "+neon,+fp-armv8,+apple-a12".into(),
2225
max_atomic_width: Some(128),

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
use crate::spec::base::apple::{ios_sim_llvm_target, opts, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, SanitizerSet, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
6-
let mut base = opts("ios", arch, TargetAbi::Simulator);
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "ios";
7+
const ABI: TargetAbi = TargetAbi::Simulator;
8+
9+
let mut base = opts(OS, ARCH, ABI);
710
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
811

912
Target {
1013
// Clang automatically chooses a more specific target based on
1114
// IPHONEOS_DEPLOYMENT_TARGET.
1215
// This is required for the simulator target to pick the right
1316
// MACH-O commands, so we do too.
14-
llvm_target: ios_sim_llvm_target(arch).into(),
17+
llvm_target: MaybeLazy::lazy(|| ios_sim_llvm_target(ARCH)),
1518
metadata: crate::spec::TargetMetadata {
1619
description: None,
1720
tier: None,
@@ -20,7 +23,7 @@ pub fn target() -> Target {
2023
},
2124
pointer_width: 64,
2225
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
23-
arch: arch.target_arch(),
26+
arch: ARCH.target_arch(),
2427
options: TargetOptions {
2528
features: "+neon,+fp-armv8,+apple-a7".into(),
2629
max_atomic_width: Some(128),
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use crate::spec::base::apple::{opts, tvos_llvm_target, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "tvos";
7+
const ABI: TargetAbi = TargetAbi::Normal;
8+
69
Target {
7-
llvm_target: tvos_llvm_target(arch).into(),
10+
llvm_target: MaybeLazy::lazy(|| tvos_llvm_target(ARCH)),
811
metadata: crate::spec::TargetMetadata {
912
description: None,
1013
tier: None,
@@ -13,12 +16,12 @@ pub fn target() -> Target {
1316
},
1417
pointer_width: 64,
1518
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
16-
arch: arch.target_arch(),
19+
arch: ARCH.target_arch(),
1720
options: TargetOptions {
1821
features: "+neon,+fp-armv8,+apple-a7".into(),
1922
max_atomic_width: Some(128),
2023
frame_pointer: FramePointer::NonLeaf,
21-
..opts("tvos", arch, TargetAbi::Normal)
24+
..opts(OS, ARCH, ABI)
2225
},
2326
}
2427
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use crate::spec::base::apple::{opts, tvos_sim_llvm_target, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "tvos";
7+
const ABI: TargetAbi = TargetAbi::Normal;
8+
69
Target {
7-
llvm_target: tvos_sim_llvm_target(arch).into(),
10+
llvm_target: MaybeLazy::lazy(|| tvos_sim_llvm_target(ARCH)),
811
metadata: crate::spec::TargetMetadata {
912
description: None,
1013
tier: None,
@@ -13,12 +16,12 @@ pub fn target() -> Target {
1316
},
1417
pointer_width: 64,
1518
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
16-
arch: arch.target_arch(),
19+
arch: ARCH.target_arch(),
1720
options: TargetOptions {
1821
features: "+neon,+fp-armv8,+apple-a7".into(),
1922
max_atomic_width: Some(128),
2023
frame_pointer: FramePointer::NonLeaf,
21-
..opts("tvos", arch, TargetAbi::Simulator)
24+
..opts(OS, ARCH, ABI)
2225
},
2326
}
2427
}

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
use crate::spec::base::apple::{opts, visionos_llvm_target, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, SanitizerSet, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
6-
let mut base = opts("visionos", arch, TargetAbi::Normal);
5+
const OS: &str = "visionos";
6+
const ABI: TargetAbi = TargetAbi::Normal;
7+
const ARCH: Arch = Arch::Arm64;
8+
9+
let mut base = opts(OS, ARCH, ABI);
710
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
811

912
Target {
10-
llvm_target: visionos_llvm_target(arch).into(),
13+
llvm_target: MaybeLazy::lazy(|| visionos_llvm_target(ARCH)),
1114
metadata: crate::spec::TargetMetadata {
1215
description: Some("ARM64 Apple visionOS".into()),
1316
tier: Some(3),
@@ -16,7 +19,7 @@ pub fn target() -> Target {
1619
},
1720
pointer_width: 64,
1821
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
19-
arch: arch.target_arch(),
22+
arch: ARCH.target_arch(),
2023
options: TargetOptions {
2124
features: "+neon,+fp-armv8,+apple-a16".into(),
2225
max_atomic_width: Some(128),

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
use crate::spec::base::apple::{opts, visionos_sim_llvm_target, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, SanitizerSet, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
6-
let mut base = opts("visionos", arch, TargetAbi::Simulator);
5+
const OS: &str = "visionos";
6+
const ABI: TargetAbi = TargetAbi::Simulator;
7+
const ARCH: Arch = Arch::Arm64;
8+
9+
let mut base = opts(OS, ARCH, ABI);
710
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
811

912
Target {
10-
llvm_target: visionos_sim_llvm_target(arch).into(),
13+
llvm_target: MaybeLazy::lazy(|| visionos_sim_llvm_target(ARCH)),
1114
metadata: crate::spec::TargetMetadata {
1215
description: Some("ARM64 Apple visionOS simulator".into()),
1316
tier: Some(3),
@@ -16,7 +19,7 @@ pub fn target() -> Target {
1619
},
1720
pointer_width: 64,
1821
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
19-
arch: arch.target_arch(),
22+
arch: ARCH.target_arch(),
2023
options: TargetOptions {
2124
features: "+neon,+fp-armv8,+apple-a16".into(),
2225
max_atomic_width: Some(128),

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ use crate::spec::base::apple::{opts, Arch, TargetAbi};
22
use crate::spec::{Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let base = opts("watchos", Arch::Arm64, TargetAbi::Normal);
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "watchos";
7+
const ABI: TargetAbi = TargetAbi::Normal;
8+
9+
let base = opts(OS, ARCH, ABI);
610
Target {
711
llvm_target: "aarch64-apple-watchos".into(),
812
metadata: crate::spec::TargetMetadata {
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
use crate::spec::base::apple::{opts, watchos_sim_llvm_target, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64;
5+
const ARCH: Arch = Arch::Arm64;
6+
const OS: &'static str = "watchos";
7+
const ABI: TargetAbi = TargetAbi::Simulator;
8+
69
Target {
710
// Clang automatically chooses a more specific target based on
811
// WATCHOS_DEPLOYMENT_TARGET.
912
// This is required for the simulator target to pick the right
1013
// MACH-O commands, so we do too.
11-
llvm_target: watchos_sim_llvm_target(arch).into(),
14+
llvm_target: MaybeLazy::lazy(|| watchos_sim_llvm_target(ARCH)),
1215
metadata: crate::spec::TargetMetadata {
1316
description: None,
1417
tier: None,
@@ -17,12 +20,12 @@ pub fn target() -> Target {
1720
},
1821
pointer_width: 64,
1922
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
20-
arch: arch.target_arch(),
23+
arch: ARCH.target_arch(),
2124
options: TargetOptions {
2225
features: "+neon,+fp-armv8,+apple-a7".into(),
2326
max_atomic_width: Some(128),
2427
frame_pointer: FramePointer::NonLeaf,
25-
..opts("watchos", arch, TargetAbi::Simulator)
28+
..opts(OS, ARCH, ABI)
2629
},
2730
}
2831
}

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

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
use crate::spec::base::apple::{opts, watchos_llvm_target, Arch, TargetAbi};
2-
use crate::spec::{Target, TargetOptions};
2+
use crate::spec::{MaybeLazy, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64_32;
6-
let base = opts("watchos", arch, TargetAbi::Normal);
5+
const OS: &str = "watchos";
6+
const ARCH: Arch = Arch::Arm64_32;
7+
const ABI: TargetAbi = TargetAbi::Normal;
8+
9+
let base = opts(OS, ARCH, ABI);
10+
711
Target {
8-
llvm_target: watchos_llvm_target(arch).into(),
12+
llvm_target: MaybeLazy::lazy(|| watchos_llvm_target(ARCH)),
913
metadata: crate::spec::TargetMetadata {
1014
description: None,
1115
tier: None,

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
use crate::spec::base::apple::{macos_llvm_target, opts, Arch, TargetAbi};
2-
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
2+
use crate::spec::{FramePointer, MaybeLazy, SanitizerSet, Target, TargetOptions};
33

44
pub fn target() -> Target {
5-
let arch = Arch::Arm64e;
6-
let mut base = opts("macos", arch, TargetAbi::Normal);
5+
const ARCH: Arch = Arch::Arm64e;
6+
const OS: &'static str = "macos";
7+
const ABI: TargetAbi = TargetAbi::Normal;
8+
9+
let mut base = opts(OS, ARCH, ABI);
710
base.cpu = "apple-m1".into();
811
base.max_atomic_width = Some(128);
912

@@ -14,7 +17,7 @@ pub fn target() -> Target {
1417
// Clang automatically chooses a more specific target based on
1518
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
1619
// correctly, we do too.
17-
llvm_target: macos_llvm_target(arch).into(),
20+
llvm_target: MaybeLazy::lazy(|| macos_llvm_target(ARCH)),
1821
metadata: crate::spec::TargetMetadata {
1922
description: None,
2023
tier: None,
@@ -23,7 +26,7 @@ pub fn target() -> Target {
2326
},
2427
pointer_width: 64,
2528
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128-Fn32".into(),
26-
arch: arch.target_arch(),
29+
arch: ARCH.target_arch(),
2730
options: TargetOptions {
2831
mcount: "\u{1}mcount".into(),
2932
frame_pointer: FramePointer::NonLeaf,

0 commit comments

Comments
 (0)