Change:
Hi, I've got a new computer and Rust is not working here :( The machine is MacBook Pro with Apple M1 MAX. I'm using . I'm running the following command: And I got a linker error:
label O-macos O-arm
Caused by . As a workaround use
It works, thank you!!
Looks like a… Duplicate of

Discussion:
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::THREAD; base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-arch".to_string(), "arm64".to_string()]); <ins> base.link_env.extend(super::apple_base::macos_link_env("arm64")); </ins> base.link_env_remove.extend(super::apple_base::macos_link_env_remove()); // Clang automatically chooses a more specific target based on // MACOSX_DEPLOYMENT_TARGET.  To enable cross-language LTO to work // correctly, we do too. <del> let arch = "aarch64"; let llvm_target = super::apple_base::macos_llvm_target(&arch); </del> <ins> let llvm_target = super::apple_base::macos_llvm_target("arm64"); </ins> Target { llvm_target, pointer_width: 64, data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".to_string(), <del> arch: arch.to_string(), </del> <ins> arch: "aarch64".to_string(), </ins> options: TargetOptions { mcount: "u{1}mcount".to_string(), frame_pointer: FramePointer::NonLeaf,

// warnings about the usage of ELF TLS. // // Here we detect what version is being requested, defaulting to 10.7. ELF <del> // TLS is flagged as enabled if it looks to be supported. let version = macos_deployment_target(); </del> <ins> // TLS is flagged as enabled if it looks to be supported. The architecture // only matters for default deployment target which is 11.0 for ARM64 and // 10.7 for everything else. let has_elf_tls = macos_deployment_target("x86_64") >= (10, 7); </ins> TargetOptions { os: os.to_string(),

has_rpath: true, dll_suffix: ".dylib".to_string(), archive_format: "darwin".to_string(), <del> has_elf_tls: version >= (10, 7), </del> <ins> has_elf_tls, </ins> abi_return_struct_as_int: true, emit_debug_gdb_scripts: false, eh_frame_header: false,

.and_then(|(a, b)| a.parse::<u32>().and_then(|a| b.parse::<u32>().map(|b| (a, b))).ok()) } <del> fn macos_deployment_target() -> (u32, u32) { deployment_target("MACOSX_DEPLOYMENT_TARGET").unwrap_or((10, 7)) </del> <ins> fn macos_default_deployment_target(arch: &str) -> (u32, u32) { if arch == "arm64" { (11, 0) } else { (10, 7) } } fn macos_deployment_target(arch: &str) -> (u32, u32) { deployment_target("MACOSX_DEPLOYMENT_TARGET") .unwrap_or_else(|| macos_default_deployment_target(arch)) </ins> } pub fn macos_llvm_target(arch: &str) -> String { <del> let (major, minor) = macos_deployment_target(); </del> <ins> let (major, minor) = macos_deployment_target(arch); </ins> format!("{}-apple-macosx{}.{}.0", arch, major, minor) } <ins> pub fn macos_link_env(arch: &str) -> Vec<(String, String)> { // Use the default deployment target for linking just as with the LLVM target if not // specified via MACOSX_DEPLOYMENT_TARGET, otherwise the system linker would use its // default which varies with Xcode version. if env::var("MACOSX_DEPLOYMENT_TARGET").is_err() { let default = macos_default_deployment_target(arch); vec![("MACOSX_DEPLOYMENT_TARGET".to_string(), format!("{}.{}", default.0, default.1))] } else { vec![] } } </ins> pub fn macos_link_env_remove() -> Vec<String> { let mut env_remove = Vec::with_capacity(2); // Remove the `SDKROOT` environment variable if it's clearly set for the wrong platform, which

base.cpu = "yonah".to_string(); base.max_atomic_width = Some(64); base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m32".to_string()]); <ins> base.link_env.extend(super::apple_base::macos_link_env("i686")); </ins> base.link_env_remove.extend(super::apple_base::macos_link_env_remove()); // don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved base.stack_probes = StackProbeType::Call;

LinkerFlavor::Gcc, vec!["-m64".to_string(), "-arch".to_string(), "x86_64".to_string()], ); <ins> base.link_env.extend(super::apple_base::macos_link_env("x86_64")); </ins> base.link_env_remove.extend(super::apple_base::macos_link_env_remove()); // don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved base.stack_probes = StackProbeType::Call;