[webkit-dev] Build File Maintenance (was Re: Please welcome GYP to the our dysfunctional build family)
Kevin Ollivier
kevino at theolliviers.com
Sat Jul 11 10:28:08 PDT 2009
Hi Jeremy,
On Jul 10, 2009, at 6:54 PM, Jeremy Orlow wrote:
> On Fri, Jul 10, 2009 at 6:26 PM, Kevin Ollivier <kevino at theolliviers.com
> > wrote:
> Hi Jeremy,
>
> On Jul 10, 2009, at 3:03 PM, Jeremy Orlow wrote:
>
> [snip]
>
>> Your argument makes sense if WebKit is only built for one platform/
>> build-system. Unfortunately it's not. So the question is whether
>> it's easier to maintain lots of different build files or whether
>> it's easier to maintain one file that's perhaps a bit more abstract
>> + the tool that interprets it.
>>
>> I agree that working directly in the project file for your platform
>> is easier IF you're only developing for one platform. But once you
>> start maintaining more than one project file, I think GYP is a big
>> win.
>>
>> While we hope that others will update our GYPI file when they add/
>> remove files, our build depends on it...so we'll definitely be
>> keeping it in sync. So I think the question then becomes whether
>> it's easier for you to maintain your new build format, or whether
>> it's easier to make it a target for GYP. I honestly don't know
>> what the answer is, but I think it's worth taking a closer look at
>> GYP.
>
> Actually, the big question in regards to having GYP reduce overall
> project maintenance is whether or not the other ports will adopt
> GYP. If the answer is yes, then it would be more compelling for wx
> to do so as well, assuming of course that someone implements a waf
> backend so that we can. :-) If the answer is no, though, then GYP is
> not reducing the amount of project maintenance work for any port
> other than Chromium, in which case there will still be 6 build
> systems (still 5 even if wx were to switch) and the problem I
> originally posed in this thread will still be an issue. In that
> case, the only way to really reduce the maintenance work of adding /
> removing files would again be to adopt a script like the one I
> suggested earlier.
>
> You're right. The burden of updating the GYPI file is less than the
> others, but it's still another file you need to change. But note
> that the maintainers of each project/platform/etc define which files
> to exclude. This is different from the other build systems where
> the person updating the file needs to decide whether it should go
> into the build or whether it should only be built with certain flags.
>
> Speaking of which, with waf / Python I've actually almost completely
> automated the generation of the list of include dirs for my build
> projects based on the source files, so that I'm not maintaining them
> by hand anymore except for a few exceptions. And thinking about it,
> I bet I can even mostly automate the list of source files too, by
> having it grab all the .cpp files in the common dirs and special
> subdirs like curl and wx, then having some include / exclude filters
> to deal with a few special cases. :-) The question will be the
> performance hit, but at least with the includes it's not even
> noticeable, and I could always look into caching and changing only
> when you do an svn up or svn add/remove.
>
> I suggest you take a look at GYP. Much of what you're talking about
> it already does.
Of course, GYP (and Bakefile, too) supports a wildcard file matching
and exclusion mechanism, but that's not really as flexible as what I'm
talking about. I'm talking about something that calculates and then
traverses a list of subdirectories where even the set of
subdirectories traversed are conditional upon variable values set
earlier in the build. It's certainly possible what I'm asking for
could be made to work, but in the end if I did get it going I'm pretty
sure that I would be very unhappy with the syntax because, quite
simply, a data format is not really designed to support recursion,
looping and the like. It's, well, designed for storing data, which is
why even conditionals are expressed in GYP using nested lists and
property=value syntax.
So the bottom line for me is not really that I couldn't figure out a
way to use GYP, as after all I've been using something like it for
years, rather that when I need more flexibility and more control, the
way to get that using a format like Bakefile or GYP does not feel
natural or intuitive; it's more like trying to squeeze a square peg
into a round hole. Even the question of "where should the change go" -
extend GYP, throw it somewhere in build-webkit, write a build command
that spits its output to GYP, etc. can become a difficult question. As
for waf, the only question is whether the change should go in the
common portion of the build system, or in a project-specific part, and
refactoring as needs change is simple and straightforward, meaning I'm
more likely to just do it rather than settle for 'good enough' just
because refactoring would require extending the project generator
tool, etc.
GYP's primary goal is to generate IDE project files, because that's
what apparently many ports want. Since IDE projects have many of the
same limitations, the GYP approach makes sense and is a nice fit for
that use case. If IDE projects aren't the desired output, though, then
the question of whether GYP is the best choice is no longer so clear
cut.
> That's the sort of flexibility and ability to quickly experiment and
> automate that scripts offer, and I suspect I will really miss that
> if I switch back to something like Bakefile / GYP.
>
> Of course you're going to be able to experiment easier with
> something you wrote yourself.
I didn't write waf myself. All I'm writing are build scripts. It's
just that instead of GYP data files I'm writing Python code and data
objects which I can manipulate using any of Python's built-in
capabilities, meaning I can feel pretty comfortable that it will scale
with my needs. I can even profile and find (and fix) bottlenecks in my
build system and try to squeeze even more speed out of it if I want. :-)
> That said, the generator for scons is only 780 lines of code
> including a couple hundred of templates...so it doesn't seem like
> it'd be _that_ hard to figure it out.
While it's probably not an major project, I think it's fair to say
neither of us really knows how much work would be involved, and I
couldn't really start real-world tests with wxWebKit until the GYP
build system is completely landed in WebKit trunk anyway. In the
meantime, wxWebKit has not been able to build for a couple weeks now
in SVN, thanks to my current project generator tool, and I should be
able to have waf support pretty much completed this weekend, so I'd
really like to resolve that problem ASAP. The longer term issue of
what the wx port will finally settle on can be determined later.
Regards,
Kevin
> I'm not necessarily saying you guys should be using GYP, but I
> really think you should take a closer look at it.
>
> J
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20090711/3e617e75/attachment.html>
More information about the webkit-dev
mailing list