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

Petr Hosek via llvm-dev llvm-dev at lists.llvm.org
Wed Oct 31 18:21:42 PDT 2018


On Wed, Oct 31, 2018 at 5:53 PM Zachary Turner <zturner at google.com> wrote:
>
>
>
> On Wed, Oct 31, 2018 at 5:22 PM Vedant Kumar <vsk at apple.com> wrote:
>>
>> Hi all,
>>
>> On Oct 31, 2018, at 11:18 AM, Nico Weber via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>>
>> 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.
>>
>>
>> I think it's very valuable that we have one shared build system. If you'd like to check in GN files, my strong preference would be to accompany that with a plan to phase cmake out.
>>
>> I really don't mean to be flippant here -- I'm in awe of the work you've already done to set up GN files, and I know transitioning away from cmake would be a massive amount of work. Hear me out :)
>>
>> My perspective comes from having worked on lldb for a while. lldb has two build systems (xcodebuild & cmake). I suppose opinions differ on whether that works well. Speaking for myself, having two build systems has been a massive source of frustration. I regularly see commits which break one of the two systems because of course they do. No one wants to test their commit a second time against a build system they don't really use. Replicating complex bits of build system logic also is a chore -- I've CC'd Stefan who might be able to say more about that.
>>
>> My concern is that introducing gn files into llvm will cause a bit of a fracture. If the policy is that cmake users don't have to worry about breaking the gn build, I think gn users would be less inclined to fix the cmake build. If most developers decide to switch to gn, that would leave cmake adopters with a higher (possibly unmanageable) maintenance burden. It's also confusing for new users, as they already have a lot of different ways of checking out and building.
>>
>> I know your plan is to have the maintenance burden of gn files placed on gn users, and that you haven't experienced an unmanageable number of breaks over the past 8 months. In lldb (a lower volume project), I actually do think the constant build breaks are hard to manage. And I'm just not sure the temptation to only update gn files could be resisted, as "works in my build system" tends to shut down conversations. I'm worried the same thing would happen in llvm.
>>
>> best,
>> vedant
>
>
> Personally I am also skeptical of the value of having 2 different build systems, for many of the same reasons you have elborated here.  One thing I actually find might be worth exploring is the quality of the IDE-generated projects by gn, especially the Xcode projects.  Having a build system (whether it be CMake or gn or something else is irrelevant) that can generate high quality Xcode IDE projects is -- to my understanding -- a pre-requisite for getting LLDB off of the hand-maintained Xcode project.
>
> Would you be willing to try out gn's generated Xcode project (I'm told this is supported, but I haven't tried it since I don't have a Mac) either with LLVM or LLDB (if the current build files support LLDB) and do a usability comparison of the generated projects?
>
> This is the one killer feature that would be a strong win over CMake that we currently have no clear path to ever making headway on.

If you clone Nico's experiment from
https://github.com/nico/llvm-project-20170507/tree/gn, you can try the
following:

gn gen --ide=vs out/vs
gn gen --ide=xcode out/xcode

I'd really like to hear your feedback on the quality of the projects
that GN generates.


More information about the llvm-dev mailing list