[cfe-dev] GN build roundtable summary; adding GN build files to the repo

Nico Weber via cfe-dev cfe-dev at lists.llvm.org
Wed Oct 31 11:18:47 PDT 2018


Hi,

first things first: If you're happy with cmake, you can stop reading now.
Nobody is proposing that LLVM moves off cmake, and nobody is proposing
anything that's causing people using cmake more work.

At the LLVM conference, I gave a lightning talk [1] about using GN [2] to
build LLVM and clang. cmake is great for many use cases, but in my opinion
local day-to-day development isn't one of them. So I wrote GN build files
for LLVM and clang, enough to make `ninja check-llvm check-clang check-lld`
build everything needed for these three test suites and that all tests
pass. This works on Linux, Mac, Win hosts targeting X86, ARM, AArch64. You
can see them at [3].

I had been worried that it would be a lot of work to keep the build files
up to date, but I've been using this for all my LLVM/clang/lld development
the last 8 months, and it turned out to not be a big problem -- LLVM's
build files don't change very often, and GN build files are a pleasure to
work with in my opinion.

I gave the lightning talk just to talk about my personal workflow, but
there was a lot of interest. We had a roundtable on the next day, and about
20 people said they'd be interested in using this for their development
too. The main request was that the .gn files are checked in upstream, so
that we can collaborate on keeping them working. Two to three orgs even
said they'd be interested in moving their buildbots to GN.

As mentioned at the top, the intention here is not to replace cmake, only
to offer an opt-in alternative for people who are interested in it. Keeping
the GN build going would be the responsibility of people using it, not of
the general LLVM community. If this fails to find use and bitrots, we can
easily remove it again.

Are there any concerns with checking in GN files? I've put some initial
docs for the GN build at https://reviews.llvm.org/D53944 ; it describes
what the GN build is and is not, what its advantages are (speed and easier
configurability), and some points about the philosophy behind the LLVM GN
build.

If folks are generally ok with GN files living in-tree, I'll start sending
patches for gradually adding gn files through the regular review process.

If having a BUILD.gn file in every directory being confusing is a concern,
GN has the concept of a "secondary tree" so that all GN files could be
below llvm/gn/tree/{llvm,clang,lld,...}.

Cheers,
Nico

1: https://llvm.org/devmtg/2018-10/talk-abstracts.html#lt2
2: https://gn.googlesource.com/gn , https://is.gd/gn_intro
3:
https://github.com/llvm-project/llvm-project-20170507/compare/master...nico:gn
, click "Files Changed" to see the GN files.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20181031/b33a7e9c/attachment.html>


More information about the cfe-dev mailing list