build: re-enable ThinLTO on macOS#51819
Merged
MarshallOfSound merged 4 commits intoJun 1, 2026
Merged
Conversation
Re-enable ThinLTO on macOS. Add a patch to the bundled Node.js source that anchors weak vtables and N-API entry points so they survive clang's -fwhole-program-vtables under ThinLTO. See the patch's commit message for details. Co-authored-by: Charles Kerr <charles@charleskerr.com>
The previous approach (out-of-line member definitions plus explicit template instantiations) still produces weak_odr vtables, which Mach-O ThinLTO localizes during code generation even when other LTO partitions reference them. This breaks the link of executables that link libnode (electron_natives_codecache, node_mksnapshot) with undefined vtable symbol errors. Replace that part of the node patch with explicit specializations of the affected instantiations: - StaticExternalByteResource<uint8_t, char, ExternalOneByteStringResource> - StaticExternalByteResource<uint16_t, uint16_t, ExternalStringResource> - NgRcBufPointer<Http2RcBufferPointerTraits>::External An explicit specialization is an ordinary class that can have a key function (an out-of-line destructor), so its vtable is a strong symbol that LTO must keep external. The primary templates and all user code are unchanged, and no linker or compiler optimizations are disabled. The non-template fixes (MemoryRetainerNode, JSGraphJSNode key functions) and the N-API __attribute__((used)) changes are kept as-is. Co-authored-by: Samuel Attard <sam@electronjs.org>
5 tasks
MarshallOfSound
approved these changes
Jun 1, 2026
…d-re-enable-thinlto-on-macos-1780323710572
dsanders11
approved these changes
Jun 1, 2026
jkleinsc
approved these changes
Jun 1, 2026
|
Release Notes Persisted
|
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.
Backport of #51669
See that PR for details.
Notes: Enabled ThinLTO on macOS builds.