Skip to content

Commit

Permalink
Auto merge of rust-lang#132497 - matthiaskrgr:rollup-gaskcn0, r=matth…
Browse files Browse the repository at this point in the history
…iaskrgr

Rollup of 11 pull requests

Successful merges:

 - rust-lang#131037 (Move versioned Apple LLVM targets from `rustc_target` to `rustc_codegen_ssa`)
 - rust-lang#132170 (Add a Few Codegen Tests)
 - rust-lang#132333 (rust_analyzer_helix.toml: add library/ manifest)
 - rust-lang#132398 (Add a couple of intra-doc links to str)
 - rust-lang#132411 (CI: switch dist-x86_64-musl to free runner)
 - rust-lang#132453 (Also treat `impl` definition parent as transparent regarding modules)
 - rust-lang#132457 (Remove needless #![feature(asm_experimental_arch)] from loongarch64 inline assembly test)
 - rust-lang#132465 (refactor(config): remove FIXME statement in comment of `omit-git-hash`)
 - rust-lang#132466 (Account for late-bound depth when capturing all opaque lifetimes.)
 - rust-lang#132471 (Add a bunch of mailmap entries)
 - rust-lang#132488 (Remove or fix some more `FIXME(async_closure)`)

r? `@ghost`
`@rustbot` modify labels: rollup
  • Loading branch information
bors committed Nov 2, 2024
2 parents b5f4883 + 30497b0 commit 588a420
Show file tree
Hide file tree
Showing 34 changed files with 480 additions and 200 deletions.
22 changes: 20 additions & 2 deletions .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ Alexis Beingessner <[email protected]>
Alfie John <[email protected]> Alfie John <[email protected]>
Alona Enraght-Moony <[email protected]> <[email protected]>
Alona Enraght-Moony <[email protected]> <[email protected]>
Alona Enraght-Moony <[email protected]> <[email protected]>
Amanda Stjerna <[email protected]> <[email protected]>
Amanda Stjerna <[email protected]> <[email protected]>
Amos Onn <[email protected]>
Expand Down Expand Up @@ -75,6 +76,7 @@ Benjamin Jackman <[email protected]>
Benoît Cortier <[email protected]>
Bheesham Persaud <[email protected]> Bheesham Persaud <[email protected]>
bjorn3 <[email protected]> <[email protected]>
bjorn3 <[email protected]> <[email protected]>
Björn Steinbrink <[email protected]> <[email protected]>
blake2-ppc <[email protected]> <blake2-ppc>
blyxyas <[email protected]> Alejandra González <[email protected]>
Expand Down Expand Up @@ -172,6 +174,7 @@ Dzmitry Malyshau <[email protected]>
E. Dunham <[email protected]> edunham <[email protected]>
Ed Barnard <[email protected]>
Eduard-Mihai Burtescu <[email protected]>
Eduard-Mihai Burtescu <[email protected]> <[email protected]>
Eduardo Bautista <[email protected]> <=>
Eduardo Bautista <[email protected]> <[email protected]>
Eduardo Broto <[email protected]>
Expand All @@ -186,6 +189,7 @@ Erick Tryzelaar <[email protected]> <[email protected]>
Erik Desjardins <[email protected]>
Erik Jensen <[email protected]>
Erin Power <[email protected]>
Erin Power <[email protected]> <[email protected]>
Erin Power <[email protected]> <[email protected]>
Erin Power <[email protected]> <[email protected]>
Esteban Küber <[email protected]>
Expand All @@ -198,6 +202,7 @@ F001 <[email protected]>
Fabian Kössel <[email protected]>
Falco Hirschenberger <[email protected]> <[email protected]>
Felix S. Klock II <[email protected]> Felix S Klock II <[email protected]>
Felix S. Klock II <[email protected]> <[email protected]>
Félix Saparelli <[email protected]>
Flaper Fesp <[email protected]>
Florian Berger <[email protected]>
Expand Down Expand Up @@ -245,7 +250,7 @@ Irina Popa <[email protected]>
Ivan Ivaschenko <[email protected]>
ivan tkachenko <[email protected]>
J. J. Weber <[email protected]>
Jack Huey <[email protected]>
Jack Huey <[email protected]> <[email protected]>
Jacob <[email protected]>
Jacob Greenfield <[email protected]>
Jacob Pratt <[email protected]> <[email protected]>
Expand Down Expand Up @@ -292,6 +297,7 @@ John Clements <[email protected]> <[email protected]>
John Hodge <[email protected]> John Hodge <[email protected]>
John Hörnvall <[email protected]>
John Kåre Alsaker <[email protected]>
John Kåre Alsaker <[email protected]> <[email protected]>
John Talling <[email protected]>
John Van Enk <[email protected]>
Jonas Tepe <[email protected]>
Expand Down Expand Up @@ -368,6 +374,7 @@ Lukas Lueg <[email protected]>
Luke Metz <[email protected]>
Luqman Aden <[email protected]> <[email protected]>
Luqman Aden <[email protected]> <[email protected]>
Luqman Aden <[email protected]> <[email protected]>
Lzu Tao <[email protected]>
Maik Klein <[email protected]>
Malo Jaffré <[email protected]>
Expand Down Expand Up @@ -409,6 +416,7 @@ mental <[email protected]>
mibac138 <[email protected]>
Michael Williams <[email protected]>
Michael Woerister <michaelwoerister@posteo> <michaelwoerister@gmail>
Michael Woerister <michaelwoerister@posteo> <[email protected]>
Michael Woerister <michaelwoerister@posteo> <[email protected]>
Michael Woerister <michaelwoerister@posteo> <[email protected]>
Michael Zhang <[email protected]>
Expand All @@ -422,6 +430,7 @@ Ms2ger <[email protected]> <[email protected]>
msizanoen1 <[email protected]>
Mukilan Thiagarajan <[email protected]>
Nadrieril Feneanar <[email protected]>
Nadrieril Feneanar <[email protected]> <[email protected]>
NAKASHIMA, Makoto <[email protected]> <[email protected]>
NAKASHIMA, Makoto <[email protected]> <[email protected]>
Nathan Ringo <[email protected]>
Expand All @@ -442,6 +451,8 @@ Niclas Schwarzlose <[email protected]>
Nicolas Abram <[email protected]>
Nicole Mazzuca <[email protected]>
Noratrieb <[email protected]> <[email protected]>
Noratrieb <[email protected]> <[email protected]>
Noratrieb <[email protected]> <[email protected]>
Nif Ward <[email protected]>
Nika Layzell <[email protected]> <[email protected]>
NODA Kai <[email protected]>
Expand All @@ -460,6 +471,7 @@ Oliver Scherer <[email protected]> <[email protected]>
Oliver Scherer <[email protected]> <[email protected]>
Oliver Scherer <[email protected]> <[email protected]>
Oliver Scherer <[email protected]> <[email protected]>
Oliver Scherer <[email protected]> <[email protected]>
Oliver Scherer <[email protected]>
Onur Özkan <[email protected]> <[email protected]>
Onur Özkan <[email protected]>
Expand Down Expand Up @@ -496,6 +508,7 @@ Raphaël Huchet <[email protected]>
rChaser53 <[email protected]>
Rémy Rakic <[email protected]>
Rémy Rakic <[email protected]> <[email protected]>
Rémy Rakic <[email protected]> <[email protected]>
Renato Riccieri Santos Zannon <[email protected]>
Richard Diamond <[email protected]> <[email protected]>
Ricky Hosfelt <[email protected]>
Expand Down Expand Up @@ -525,6 +538,7 @@ Samuel Tardieu <[email protected]>
Santiago Pastorino <[email protected]>
Santiago Pastorino <[email protected]> <[email protected]>
Scott McMurray <[email protected]>
Scott McMurray <[email protected]> <[email protected]>
Scott Olson <[email protected]> Scott Olson <[email protected]>
Sean Gillespie <[email protected]> swgillespie <[email protected]>
Seiichi Uchida <[email protected]>
Expand All @@ -536,6 +550,7 @@ Shyam Sundar B <[email protected]>
Simon Barber-Dueck <[email protected]> Simon BD <simon@server>
Simon Sapin <[email protected]> <[email protected]>
Simonas Kazlauskas <[email protected]> Simonas Kazlauskas <[email protected]>
Simonas Kazlauskas <[email protected]> <[email protected]>
Siva Prasad <[email protected]>
Smittyvb <[email protected]>
Srinivas Reddy Thatiparthy <[email protected]>
Expand All @@ -556,6 +571,8 @@ Tatsuyuki Ishi <[email protected]>
Tau Gärtli <[email protected]> <[email protected]>
Tero Hänninen <[email protected]> Tero Hänninen <[email protected]>
The8472 <[email protected]>
The8472 <[email protected]> <[email protected]>
The8472 <[email protected]> <[email protected]>
Theo Belaire <[email protected]> Theo Belaire <[email protected]>
Theodore Luo Wang <[email protected]>
Thiago Pontes <[email protected]> thiagopnts <[email protected]>
Expand Down Expand Up @@ -593,7 +610,8 @@ Waffle Lapkin <[email protected]>
Wesley Wiser <[email protected]> <[email protected]>
whitequark <[email protected]>
William Ting <[email protected]> <[email protected]>
Wim Looman <[email protected]>
Wim Looman <[email protected]> <[email protected]>
Wim Looman <[email protected]> <[email protected]>
Without Boats <[email protected]>
Without Boats <[email protected]> <[email protected]>
Xinye Tao <[email protected]>
Expand Down
5 changes: 4 additions & 1 deletion compiler/rustc_codegen_cranelift/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ use std::sync::Arc;
use cranelift_codegen::isa::TargetIsa;
use cranelift_codegen::settings::{self, Configurable};
use rustc_codegen_ssa::CodegenResults;
use rustc_codegen_ssa::back::versioned_llvm_target;
use rustc_codegen_ssa::traits::CodegenBackend;
use rustc_data_structures::profiling::SelfProfilerRef;
use rustc_errors::ErrorGuaranteed;
Expand Down Expand Up @@ -260,7 +261,9 @@ impl CodegenBackend for CraneliftCodegenBackend {
}

fn target_triple(sess: &Session) -> target_lexicon::Triple {
match sess.target.llvm_target.parse() {
// FIXME(madsmtm): Use `sess.target.llvm_target` once target-lexicon supports unversioned macOS.
// See <https://github.com/bytecodealliance/target-lexicon/pull/113>
match versioned_llvm_target(sess).parse() {
Ok(triple) => triple,
Err(err) => sess.dcx().fatal(format!("target not recognized: {}", err)),
}
Expand Down
3 changes: 2 additions & 1 deletion compiler/rustc_codegen_llvm/src/back/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use llvm::{
LLVMRustLLVMHasZlibCompressionForDebugSymbols, LLVMRustLLVMHasZstdCompressionForDebugSymbols,
};
use rustc_codegen_ssa::back::link::ensure_removed;
use rustc_codegen_ssa::back::versioned_llvm_target;
use rustc_codegen_ssa::back::write::{
BitcodeSection, CodegenContext, EmitObj, ModuleConfig, TargetMachineFactoryConfig,
TargetMachineFactoryFn,
Expand Down Expand Up @@ -211,7 +212,7 @@ pub(crate) fn target_machine_factory(
singlethread = false;
}

let triple = SmallCStr::new(&sess.target.llvm_target);
let triple = SmallCStr::new(&versioned_llvm_target(sess));
let cpu = SmallCStr::new(llvm_util::target_cpu(sess));
let features = CString::new(target_features.join(",")).unwrap();
let abi = SmallCStr::new(&sess.target.llvm_abiname);
Expand Down
3 changes: 2 additions & 1 deletion compiler/rustc_codegen_llvm/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::cell::{Cell, RefCell};
use std::ffi::{CStr, c_uint};
use std::str;

use rustc_codegen_ssa::back::versioned_llvm_target;
use rustc_codegen_ssa::base::{wants_msvc_seh, wants_wasm_eh};
use rustc_codegen_ssa::errors as ssa_errors;
use rustc_codegen_ssa::traits::*;
Expand Down Expand Up @@ -182,7 +183,7 @@ pub(crate) unsafe fn create_module<'ll>(
llvm::LLVMSetDataLayout(llmod, data_layout.as_ptr());
}

let llvm_target = SmallCStr::new(&sess.target.llvm_target);
let llvm_target = SmallCStr::new(&versioned_llvm_target(sess));
unsafe {
llvm::LLVMRustSetNormalizedTarget(llmod, llvm_target.as_ptr());
}
Expand Down
6 changes: 6 additions & 0 deletions compiler/rustc_codegen_ssa/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ codegen_ssa_L4Bender_exporting_symbols_unimplemented = exporting symbols not imp
codegen_ssa_add_native_library = failed to add native library {$library_path}: {$error}
codegen_ssa_apple_deployment_target_invalid =
failed to parse deployment target specified in {$env_var}: {$error}
codegen_ssa_apple_deployment_target_too_low =
deployment target in {$env_var} was set to {$version}, but the minimum supported by `rustc` is {$os_min}
codegen_ssa_apple_sdk_error_sdk_path = failed to get {$sdk_name} SDK path: {$error}
codegen_ssa_archive_build_failure = failed to build archive at `{$path}`: {$error}
Expand Down
171 changes: 171 additions & 0 deletions compiler/rustc_codegen_ssa/src/back/apple.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
use std::env;
use std::fmt::{Display, from_fn};
use std::num::ParseIntError;

use rustc_session::Session;
use rustc_target::spec::Target;

use crate::errors::AppleDeploymentTarget;

#[cfg(test)]
mod tests;

pub(super) fn macho_platform(target: &Target) -> u32 {
match (&*target.os, &*target.abi) {
("macos", _) => object::macho::PLATFORM_MACOS,
("ios", "macabi") => object::macho::PLATFORM_MACCATALYST,
("ios", "sim") => object::macho::PLATFORM_IOSSIMULATOR,
("ios", _) => object::macho::PLATFORM_IOS,
("watchos", "sim") => object::macho::PLATFORM_WATCHOSSIMULATOR,
("watchos", _) => object::macho::PLATFORM_WATCHOS,
("tvos", "sim") => object::macho::PLATFORM_TVOSSIMULATOR,
("tvos", _) => object::macho::PLATFORM_TVOS,
("visionos", "sim") => object::macho::PLATFORM_XROSSIMULATOR,
("visionos", _) => object::macho::PLATFORM_XROS,
_ => unreachable!("tried to get Mach-O platform for non-Apple target"),
}
}

/// Deployment target or SDK version.
///
/// The size of the numbers in here are limited by Mach-O's `LC_BUILD_VERSION`.
type OSVersion = (u16, u8, u8);

/// Parse an OS version triple (SDK version or deployment target).
fn parse_version(version: &str) -> Result<OSVersion, ParseIntError> {
if let Some((major, minor)) = version.split_once('.') {
let major = major.parse()?;
if let Some((minor, patch)) = minor.split_once('.') {
Ok((major, minor.parse()?, patch.parse()?))
} else {
Ok((major, minor.parse()?, 0))
}
} else {
Ok((version.parse()?, 0, 0))
}
}

pub fn pretty_version(version: OSVersion) -> impl Display {
let (major, minor, patch) = version;
from_fn(move |f| {
write!(f, "{major}.{minor}")?;
if patch != 0 {
write!(f, ".{patch}")?;
}
Ok(())
})
}

/// Minimum operating system versions currently supported by `rustc`.
fn os_minimum_deployment_target(os: &str) -> OSVersion {
// When bumping a version in here, remember to update the platform-support docs too.
//
// NOTE: The defaults may change in future `rustc` versions, so if you are looking for the
// default deployment target, prefer:
// ```
// $ rustc --print deployment-target
// ```
match os {
"macos" => (10, 12, 0),
"ios" => (10, 0, 0),
"tvos" => (10, 0, 0),
"watchos" => (5, 0, 0),
"visionos" => (1, 0, 0),
_ => unreachable!("tried to get deployment target for non-Apple platform"),
}
}

/// The deployment target for the given target.
///
/// This is similar to `os_minimum_deployment_target`, except that on certain targets it makes sense
/// to raise the minimum OS version.
///
/// This matches what LLVM does, see in part:
/// <https://github.com/llvm/llvm-project/blob/llvmorg-18.1.8/llvm/lib/TargetParser/Triple.cpp#L1900-L1932>
fn minimum_deployment_target(target: &Target) -> OSVersion {
match (&*target.os, &*target.arch, &*target.abi) {
("macos", "aarch64", _) => (11, 0, 0),
("ios", "aarch64", "macabi") => (14, 0, 0),
("ios", "aarch64", "sim") => (14, 0, 0),
("ios", _, _) if target.llvm_target.starts_with("arm64e") => (14, 0, 0),
// Mac Catalyst defaults to 13.1 in Clang.
("ios", _, "macabi") => (13, 1, 0),
("tvos", "aarch64", "sim") => (14, 0, 0),
("watchos", "aarch64", "sim") => (7, 0, 0),
(os, _, _) => os_minimum_deployment_target(os),
}
}

/// Name of the environment variable used to fetch the deployment target on the given OS.
fn deployment_target_env_var(os: &str) -> &'static str {
match os {
"macos" => "MACOSX_DEPLOYMENT_TARGET",
"ios" => "IPHONEOS_DEPLOYMENT_TARGET",
"watchos" => "WATCHOS_DEPLOYMENT_TARGET",
"tvos" => "TVOS_DEPLOYMENT_TARGET",
"visionos" => "XROS_DEPLOYMENT_TARGET",
_ => unreachable!("tried to get deployment target env var for non-Apple platform"),
}
}

/// Get the deployment target based on the standard environment variables, or fall back to the
/// minimum version supported by `rustc`.
pub fn deployment_target(sess: &Session) -> OSVersion {
let min = minimum_deployment_target(&sess.target);
let env_var = deployment_target_env_var(&sess.target.os);

if let Ok(deployment_target) = env::var(env_var) {
match parse_version(&deployment_target) {
Ok(version) => {
let os_min = os_minimum_deployment_target(&sess.target.os);
// It is common that the deployment target is set a bit too low, for example on
// macOS Aarch64 to also target older x86_64. So we only want to warn when variable
// is lower than the minimum OS supported by rustc, not when the variable is lower
// than the minimum for a specific target.
if version < os_min {
sess.dcx().emit_warn(AppleDeploymentTarget::TooLow {
env_var,
version: pretty_version(version).to_string(),
os_min: pretty_version(os_min).to_string(),
});
}

// Raise the deployment target to the minimum supported.
version.max(min)
}
Err(error) => {
sess.dcx().emit_err(AppleDeploymentTarget::Invalid { env_var, error });
min
}
}
} else {
// If no deployment target variable is set, default to the minimum found above.
min
}
}

pub(super) fn add_version_to_llvm_target(
llvm_target: &str,
deployment_target: OSVersion,
) -> String {
let mut components = llvm_target.split("-");
let arch = components.next().expect("apple target should have arch");
let vendor = components.next().expect("apple target should have vendor");
let os = components.next().expect("apple target should have os");
let environment = components.next();
assert_eq!(components.next(), None, "too many LLVM triple components");

let (major, minor, patch) = deployment_target;

assert!(
!os.contains(|c: char| c.is_ascii_digit()),
"LLVM target must not already be versioned"
);

if let Some(env) = environment {
// Insert version into OS, before environment
format!("{arch}-{vendor}-{os}{major}.{minor}.{patch}-{env}")
} else {
format!("{arch}-{vendor}-{os}{major}.{minor}.{patch}")
}
}
Loading

0 comments on commit 588a420

Please sign in to comment.