Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-114099: Add preprocessor declarations to support compilation on iOS #115023

Closed
wants to merge 1 commit into from

Conversation

freakboy3742
Copy link
Contributor

@freakboy3742 freakboy3742 commented Feb 5, 2024

Part of the PEP 730 work to add iOS support.

Adds preprocessor declarations to C code to support compilation of the standard library on iOS/tvOS/watchOS.

These changes involve:

  • Explicitly disabling methods that are detected by configure, but raise a compilation or runtime error if actually used.
  • Allowing for the required .dylib extension on iOS dynamic libraries
  • Setting the marshalling stack depth
  • Providing a simulated response for the "user" on an iOS simulator
  • Providing a PLATFORM_TRIPLET based on compiler behavior

The preprocessor symbols used to identify Apple platforms are all provided by the TargetConditionals.h header, and form a heirarchy:

  • TARGET_OS_IPHONE - Generated code will run on a variant of iOS (firmware, devices, simulator)
    • TARGET_OS_IOS - Generated code will run on iOS
      • TARGET_OS_MACCATALYST- Generated code will run on macOS
    • TARGET_OS_TV - Generated code will run on tvOS
    • TARGET_OS_WATCH - Generated code will run on watchOS
  • TARGET_OS_SIMULATOR - Generated code will run on an iOS, tvOS, watchOS, or visionOS simulator

Of particular note: TARGET_OS_IPHONE is any "iPhone like" device - including iOS, tvOS, watchOS, and visionOS. TARGET_OS_IOS is iOS only.

if (uid == 501) {
struct passwd mp;
mp.pw_name = "mobile";
mp.pw_passwd = "/smx7MYTQIi2M";
Copy link
Member

@mhsmith mhsmith Feb 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see it's easy enough to Google, but there should still be a comment explaining what this value is and where it comes from.

Comment on lines +381 to +384
// iOS/tvOS/watchOS *define* some POSIX methods,
// but raise a compiler error if they are used.
#if TARGET_OS_IPHONE
# undef HAVE_GETGROUPS
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's a compiler error, as opposed to a runtime error, then autoconf should be able to detect the problem. The comment should explain why that wasn't sufficient.

Comment on lines +19 to +21
// tvOS and watchOS don't provide a number of important POSIX functions.
#if TARGET_OS_TV || TARGET_OS_WATCH
# undef HAVE_SIGALTSTACK
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as above.

Comment on lines +47 to +50
// iOS/tvOS/watchOS *define* some POSIX methods,
// but raise a compiler error if they are used.
#if TARGET_OS_IPHONE
# undef HAVE_GETENTROPY
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as above.

Comment on lines +66 to +68
// iOS/tvOS/watchOS *define* clock_settime, but it can't be used
#if TARGET_OS_IPHONE
# undef HAVE_CLOCK_SETTIME
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as above.

@freakboy3742
Copy link
Contributor Author

Prompted by @mhsmith's review, I've dug deeper into how/why configure was incorrectly identifying these functions, and I I've got a cleaner approach for most of this patch. Closing on that basis.

@freakboy3742 freakboy3742 deleted the iOS-preprocessor branch February 6, 2024 00:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants