Skip to content

Conversation

@freakboy3742
Copy link
Contributor

@freakboy3742freakboy3742 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){
structpasswdmp;
mp.pw_name="mobile";
mp.pw_passwd="/smx7MYTQIi2M";
Copy link
Member

@mhsmithmhsmithFeb 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.
#ifTARGET_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.
#ifTARGET_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.
#ifTARGET_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
#ifTARGET_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
ContributorAuthor

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.

@freakboy3742freakboy3742 deleted the iOS-preprocessor branch February 6, 2024 00:26
Sign up for freeto 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.

2 participants

@freakboy3742@mhsmith