bazelbuild / bazelbuild/rules_apple

Duplicate symbols from apple_static_xcframework

Open
#2,430 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Starlark
Stars
593
Forks
334
Avg merge
16h 48m
Merged PRs (30d)
9

Description

Hi ✋

I am trying to build a static xcframework for external distribution.

I have the following dependency tree:

```
apple_static_xcframework (FooSDK) ->
swift_library (Foo) ->
apple_static_framework_import (Zip - prebuilt static Swift library) ->
apple_static_framework_import (Minizip - prebuilt static C library)
```

I am facing an issue that symbols from Zip and Minizip are duplicated in the final binary of the product xcframework.

I can see in the build logs that both Zip and Minizip are passed twice in the libtool invocation:

```
SUBCOMMAND: # //:FooSDK [action 'Linking FooSDK-arm64-apple-ios13.0-fl.a', configuration: 3b270167ad09e1b14e1cecd3ecac79b255a5a5eb6162dc1c3e64c83ef54484da, execution platform: @local_config_platform//:host]
(cd /private/var/tmp/_bazel_vakhid.betrakhmadov/1ef088b48d7b9d0d70d1dfde8f0aabef/execroot/__main__ && \
exec env - \
APPLE_SDK_PLATFORM=iPhoneOS \
APPLE_SDK_VERSION_OVERRIDE=17.2 \
PATH=<...>
XCODE_VERSION_OVERRIDE=15.2.0.15C500b \
ZERO_AR_DATE=1 \
external/local_config_cc/libtool \
-D \
-no_warning_for_no_symbols \
-static \
-arch_only arm64 \
-syslibroot __BAZEL_XCODE_SDKROOT__ \
-o bazel-out/darwin_arm64-fastbuild/bin/FooSDK-arm64-apple-ios13.0-fl.a \
bazel-out/ios-arm64-min13.0-applebin_ios-ios_arm64-fastbuild-ST-5a3d504b05e8/bin/libFoo.a \
Minizip.xcframework/ios-arm64/Minizip.framework/Minizip \
Zip.xcframework/ios-arm64/Zip.framework/Zip \
Minizip.xcframework/ios-arm64/Minizip.framework/Minizip \
Zip.xcframework/ios-arm64/Zip.framework/Zip)
# Configuration: 3b270167ad09e1b14e1cecd3ecac79b255a5a5eb6162dc1c3e64c83ef54484da
# Execution platform: @local_config_platform//:host
INFO: From Linking FooSDK-arm64-apple-ios13.0-fl.a:
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'Minizip-dummy.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(Minizip-dummy.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(Minizip-dummy.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'Minizip_vers.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(Minizip_vers.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(Minizip_vers.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'QuickZip.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(QuickZip.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(QuickZip.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'Zip-dummy.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(Zip-dummy.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(Zip-dummy.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'Zip.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(Zip.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(Zip.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'ZipUtilities.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(ZipUtilities.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(ZipUtilities.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'Zip_vers.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(Zip_vers.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Zip_1fe1076498a57ae78089c33f29f146d5.o(Zip_vers.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'ioapi.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(ioapi.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(ioapi.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'unzip.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(unzip.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(unzip.o)'
/Applications/Xcode-15.2.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: warning renaming duplicate member name 'zip.o' from '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(zip.o)' and '/var/folders/vg/008npg05001_zj7sn4p3m08h0000gq/T//libtool.USDk3Nmf/Minizip_975577f5767cce772c4b949d8b4cef2f.o(zip.o)'
```

I am also able to validate that symbols are indeed duplicated by running `nm` on the final binary.

I have prepared a minimum repro example matching the dependency tree described above: [repro_example.zip](https://github.com/bazelbuild/rules_apple/files/14625807/repro_example.zip)

You can run `bazelisk build :FooSDK` and check build logs and the final binary to also validate the issue.

I also found an old issue - https://github.com/bazelbuild/bazel/issues/11223 - and an old PR - https://github.com/bazelbuild/bazel/pull/11225 - in bazel repo that seem to be closely related.

I've tried to debug, but so far i was not able to pin point the problem and find a solution.

Could you please take a look at this 🙏

Contributor guide

Open the contributing guide

Research direction

Download repro_example.zip and run `bazelisk build :FooSDK` first. Inspect the reported libtool invocation, where Minizip and Zip each appear twice, then use `nm` on the final binary to confirm duplicate symbols. Done means the FooSDK xcframework links without duplicated Zip or Minizip symbols.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, swift
Domain
build-system
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.