Skip to content

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

Closed
freakboy3742 wants to merge 1 commit into
python:mainfrom
freakboy3742:iOS-preprocessor
Closed

gh-114099: Add preprocessor declarations to support compilation on iOS#115023
freakboy3742 wants to merge 1 commit into
python:mainfrom
freakboy3742:iOS-preprocessor

Conversation

@freakboy3742

@freakboy3742freakboy3742 commented Feb 5, 2024

Copy link
Copy Markdown
Contributor

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.

Comment threadModules/pwdmodule.c
if (uid == 501) {
struct passwd mp;
mp.pw_name = "mobile";
mp.pw_passwd = "/smx7MYTQIi2M";

@mhsmithmhsmithFeb 5, 2024

Copy link
Copy Markdown
Member

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 threadModules/posixmodule.c
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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 threadModules/timemodule.c
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
Copy Markdown
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
Copy Markdown
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.

@freakboy3742
freakboy3742 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