ziglang / fetch-them-macos-headers

A utility for fetching minimal macOS libc headers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

fetch-them-macos-headers

This is a small utility repo that can be used to fetch and generate deduplicated macOS libc headers. The intention for this utility is to use it to update the libc headers shipped with Zig, and used when cross-compiling to macOS (see this article for an amazing description of the zig cc C compiler frontend).

Howto

  1. Build
$ zig build
  1. (Optional) Add additional libc headers to src/headers.c.

  2. Fetch headers into libc/include/. The fetch command will automatically fetch for both x86_64 and aarch64 architectures by default.

    3.1. Fetch from the system-wide, latest SDK.

    $ ./zig-out/bin/fetch_them_macos_headers fetch
    

    3.2. (Optional) Fetch from a custom SDK by explicitly specifying sysroot path.

    $ ./zig-out/bin/fetch_them_macos_headers fetch --sysroot <path>
    

    See Getting older SDKs for a guide of how to install additional SDKs for older versions of macOS.

  3. Generate deduplicated headers dirs in <destination> path

./zig-out/bin/fetch_them_macos_headers generate <destination>
  1. (Optional) Copy the contents of <destination> into Zig's lib/libc/include/, and analyze the changes with git status.

Getting older SDKs

Thanks to Rasmus Andersson's amazing work on llvmbox it is now possible to download additional, older SDKs on your main Mac, extract them without having to install them, and use the extracted SDKs with fetch_them_macos_headers.

How does it work?

  1. Navigate to Apple's developer portal and pick Command Line Tools installers of interest.
  2. Mount all of them.
  3. Run unpack_sdks.sh script.
$ ./unpack_sdks.sh .

Note that you need pbzx in your PATH which you can get via brew install pbzx or build from source.

  1. You can now pass use the extracted SDKs with fetch_them_macos_headers which you will find in ./apple-clts unless you used a different argument to unpack_sdks.sh.

About

A utility for fetching minimal macOS libc headers

License:MIT License


Languages

Language:C 87.3%Language:C++ 10.7%Language:Objective-C 1.9%Language:Zig 0.1%Language:Shell 0.0%