fix: resolve race condition in nsld.sh with parallel linker invocations#356
Open
NathanWalker wants to merge 1 commit intomainfrom
Open
fix: resolve race condition in nsld.sh with parallel linker invocations#356NathanWalker wants to merge 1 commit intomainfrom
NathanWalker wants to merge 1 commit intomainfrom
Conversation
Xcode can invoke nsld.sh concurrently for different architectures during incremental builds. All invocations shared a single Swift-Modules directory, causing EINVAL errors on APFS when one process deletes the directory while another is writing module.modulemap. Use per-architecture directories (Swift-Modules-$TARGET_ARCH) so parallel invocations no longer collide. Export the arch-specific path into HEADER_SEARCH_PATHS so the metadata generator can still locate the modulemap.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Invalid argumentbuild failures on incremental iOS buildscaused by parallel linker invocations racing on a shared
Swift-Modules/directoryMODULES_DIRfromSwift-ModulestoSwift-Modules-$TARGET_ARCHso eacharchitecture gets its own isolated temp directory
HEADER_SEARCH_PATHSso the metadata generatorstill finds the
module.modulemapContext
nsld.shis configured as bothLDandLDPLUSPLUSinnativescript-build.xcconfig.During incremental builds, Xcode may invoke the linker for multiple architectures in
parallel. The script's flow is: delete
Swift-Modules/> create it > writemodule.modulemap> run metadata generator > deleteSwift-Modules/> invoke clang.With a shared directory, a second invocation can
rm -rfthe directory between anotherinvocation's
mkdir -pandprintf > module.modulemap, producing an APFSEINVAL.This most often (randomly) surfaced on non-fresh builds when Xcode parallelizes more aggressively.