[PATCH] D124887: [lld/mac] Support writing zippered dylibs and bundles

Nico Weber via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 3 15:38:24 PDT 2022


thakis created this revision.
thakis added a reviewer: lld-macho.
Herald added subscribers: rupprecht, kristof.beyls.
Herald added a reviewer: jhenderson.
Herald added a reviewer: MaskRay.
Herald added projects: lld-macho, All.
thakis requested review of this revision.
Herald added a subscriber: StephenFan.
Herald added a project: LLVM.

With -platform_version flags for two distinct platforms,
this writes a LC_BUILD_VERSION header for each.

The motivation is that this is needed for self-hosting with lld as linker
after D124059 <https://reviews.llvm.org/D124059>.

To create a zippered output at the clang driver level, pass

  -target arm64-apple-macos -darwin-target-variant arm64-apple-ios-macabi

to create a zippered dylib.

(In Xcode's clang, `-darwin-target-variant` is spelled just `-target-variant`.)

(If you pass `-target arm64-apple-ios-macabi -target-variant arm64-apple-macos`
instead, ld64 crashes!)

This results in two -platform_version flags being passed to the linker.

ld64 also verifies that the iOS SDK version is at least 13.1. We don't do that
yet. But ld64 also does that for other platforms and we don't. So we need to
do that at some point, but not in this patch.

Only dylib and bundle outputs can be zippered.

I verified that a Catalyst app linked against a dylib created with

  clang -shared foo.cc -o libfoo.dylib \
        -target arm64-apple-macos \
        -target-variant arm64-apple-ios-macabi \
        -Wl,-install_name, at rpath/libfoo.dylib \
        -fuse-ld=$PWD/out/gn/bin/ld64.lld

runs successfully. (The app calls a function `f()` in libfoo.dylib
that returns a const char* "foo", and NSLog(@"%s")s it.)

While here, change `llvm-otool -l` output for LC_BUILD_VERSION to only
print the platform textually if `-v` is also passed, to match `otool`
behavior (needed in the test for this).


https://reviews.llvm.org/D124887

Files:
  lld/MachO/Config.h
  lld/MachO/Driver.cpp
  lld/MachO/Writer.cpp
  lld/test/MachO/platform-version.s
  lld/test/MachO/zippered.yaml
  llvm/tools/llvm-objdump/MachODump.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D124887.426851.patch
Type: text/x-patch
Size: 11174 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220503/94e348c1/attachment.bin>


More information about the llvm-commits mailing list