This is an archive of the discontinued LLVM Phabricator instance.

gn build: Add build files for clangd xpc framework code
ClosedPublic

Authored by thakis on Apr 2 2019, 8:01 AM.

Details

Summary

This is a bit of a larger change since this is the first (and as far as I can tell only) place where the LLVM build produces macOS framework bundles.

GN has some built-in support for this, so use that. gn help create_bundle has a terse description (but it's a bit outdated: deps must be public_deps and the conditionals in the example in the help aren't quite right on non-iOS).

We need a new 'copy_bundle_data' tool, and since we copy the clangd.xpc bundle as bundle_data into ClangdXPC.framework it needs to be able to handle directories in addition to files.

GN also insists we have a compile_xcassets tool even though it's not used. I just made that run false.

Despite GN's support for bundles, we still need to manually create the expected symlink structure in the .framework bundle. Since this code never runs on Windows, it's safe to create the symlinks before the symlink targets exist, so we can just make the bundle depend on the steps that create the symlinks. For this to work, change the symlink script to create the symlink's containing directory if it doesn't yet exist.

I locally verified that CMake and GN build create the same bundle structure. (I noticed that both builds set LC_ID_DYLIB to the pre-copy libClangdXPCLib.dylib name, but that seems to not cause any issues and it happens in the CMake build too.)

(Also add an error message to clangd-xpc-test-client for when loading the dylib fails – this was useful while locally debugging this.)

Diff Detail

Event Timeline

thakis created this revision.Apr 2 2019, 8:01 AM
Herald added a project: Restricted Project. · View Herald TranscriptApr 2 2019, 8:01 AM
thakis edited the summary of this revision. (Show Details)Apr 2 2019, 8:02 AM
thakis updated this revision to Diff 193313.Apr 2 2019, 9:30 AM

Use {{source_file_part}} in bundle_data where possible.

mbonadei accepted this revision.Apr 3 2019, 4:26 AM

Really nice work and thanks for the thread on gn-dev about create_bundle!

LGTM!

This revision is now accepted and ready to land.Apr 3 2019, 4:26 AM
This revision was automatically updated to reflect the committed changes.
Herald added a project: Restricted Project. · View Herald TranscriptApr 3 2019, 5:32 AM