From e27290e529315012c4f69f22893fab4ff2e665c5 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Thu, 22 Feb 2024 03:06:25 +0100 Subject: [PATCH 1/3] Add `/System/iOSSupport` to the library search path on Mac Catalyst --- compiler/rustc_codegen_ssa/src/back/link.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index ac278de02af2e..38960a4734c0b 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -2997,6 +2997,16 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) { } _ => unreachable!(), } + + if llvm_target.contains("macabi") { + // Mac Catalyst uses the macOS SDK, but to link to iOS-specific + // frameworks, we must have the support library stubs in the library + // search path. + + // The flags are called `-L` and `-F` both in Clang, ld64 and ldd. + cmd.arg(format!("-L{sdk_root}/System/iOSSupport/usr/lib")); + cmd.arg(format!("-F{sdk_root}/System/iOSSupport/System/Library/Frameworks")); + } } fn get_apple_sdk_root(sdk_name: &str) -> Result> { From 18d24349c68f35b5381712e5e6cbb5b808442e5d Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Wed, 10 Apr 2024 17:43:40 +0200 Subject: [PATCH 2/3] Add Apple platforms to compiletest KNOWN_DIRECTIVE_NAMES --- src/tools/compiletest/src/header.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index ec944cb7fb47e..b158fa9acbc05 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -790,15 +790,18 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[ "ignore-thumb", "ignore-thumbv8m.base-none-eabi", "ignore-thumbv8m.main-none-eabi", + "ignore-tvos", "ignore-unix", "ignore-unknown", "ignore-uwp", + "ignore-visionos", "ignore-vxworks", "ignore-wasi", "ignore-wasm", "ignore-wasm32", "ignore-wasm32-bare", "ignore-wasm64", + "ignore-watchos", "ignore-windows", "ignore-windows-gnu", "ignore-x32", @@ -856,6 +859,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[ "only-cdb", "only-gnu", "only-i686-pc-windows-msvc", + "only-ios", "only-linux", "only-loongarch64", "only-loongarch64-unknown-linux-gnu", @@ -871,10 +875,13 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[ "only-sparc64", "only-stable", "only-thumb", + "only-tvos", "only-unix", + "only-visionos", "only-wasm32", "only-wasm32-bare", "only-wasm32-wasip1", + "only-watchos", "only-windows", "only-x86", "only-x86_64", From ff3f0a34673a22d439864e5d72038f252d6595e5 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Thu, 22 Feb 2024 04:01:34 +0100 Subject: [PATCH 3/3] Add test for linking to UIKit --- tests/ui/linkage-attr/uikit-framework.rs | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tests/ui/linkage-attr/uikit-framework.rs diff --git a/tests/ui/linkage-attr/uikit-framework.rs b/tests/ui/linkage-attr/uikit-framework.rs new file mode 100644 index 0000000000000..fca0332384a2e --- /dev/null +++ b/tests/ui/linkage-attr/uikit-framework.rs @@ -0,0 +1,25 @@ +//! Check that linking to UIKit on platforms where that is available works. +//@ revisions: ios tvos watchos visionos +//@ [ios]only-ios +//@ [tvos]only-tvos +//@ [watchos]only-watchos +//@ [visionos]only-visionos +//@ build-pass + +use std::ffi::{c_char, c_int, c_void}; + +#[link(name = "UIKit", kind = "framework")] +extern "C" { + pub fn UIApplicationMain( + argc: c_int, + argv: *const c_char, + principalClassName: *const c_void, + delegateClassName: *const c_void, + ) -> c_int; +} + +pub fn main() { + unsafe { + UIApplicationMain(0, core::ptr::null(), core::ptr::null(), core::ptr::null()); + } +}