[webkit-dev] Build system update

Mark Rowe mrowe at apple.com
Wed Mar 23 11:38:02 PDT 2011


On 2011-03-23, at 03:33, Adam Barth wrote:

> On Wed, Mar 23, 2011 at 12:22 AM, Mark Rowe <mrowe at apple.com> wrote:
>> On 2011-03-22, at 23:50, Adam Barth wrote:
>>> On Tue, Mar 22, 2011 at 8:14 PM, Mark Rowe <mrowe at apple.com> wrote:
> 
>>>> Product names for targets are redundantly declared in the Xcode project when they're already defined in the .xcconfig files.
>>> 
>>> My plan for this issue is to remove the product names from the
>>> xcconfig files once they're not needed by the generated xcodeproj
>>> files.
>> 
>> That seems backwards.  JavaScriptCore.xcconfig defines how to create JavaScriptCore.framework.  The name of the framework (e.g., PRODUCT_NAME) is an important part of that, much like the install path, Info.plist file, etc.  I don't see how we benefit from that information being spread around.
> 
> The information about how to create JavaScriptCore.framework is
> already spread around to a certain extent.  For example,
> JavaScriptCore.xcconfig does not contain the list of files that need
> to be built or information about the dependencies.  I'm having a hard
> time seeing what the practical difference is between specifying the
> product name in the xcodeproj file or the xcconfig file.

What's the argument for changing where it is specified?  Is it simply because gyp doesn't know better?

>>>>> One area that I could use some help from one or more Apple folks is
>>>>> making sure that this build system integrates properly with Apple's
>>>>> internal build system.  Based on my (incomplete!) understanding of
>>>>> Apple's internal build system, there are at least two options:
>>>>> 
>>>>> 1) Apple's internal build system consumes Source in its entirety and
>>>>> builds a master WebKit.xcodeproj (or a Makefile), which abstracts
>>>>> further details about the build, such as how subsequent xcodeproj are
>>>>> created or how many libraries WebKit is factored into (e.g., letting
>>>>> us extract WTF from JavaScriptCore).
>>>> 
>>>> Making that particular change is completely unrelated to GYP.
>>> 
>>> My understanding is that it would solve the Apple internal build
>>> system integration issue because the Apple internal build system would
>>> transfer control to the master WebKit.xcodeproj, which could then
>>> invoke GYP to generate the remaining xcodeproj files.
>> 
>> I'm not particularly keen on a solution that involves manually invoking xcodebuild to build projects.  It becomes very complicated to ensure that the correct settings, including any overridden settings, make it down to the nested invocations of xcodebuild.
> 
> I'm not sure I've correctly communicated how I envision this approach
> working.  If approach (2) doesn't work out for whatever reason, I can
> build a mockup of how this would work, which will be more concrete.

You'll need to provide more detail then because I cannot see how this would work in a manner that doesn't cause the problems I have noted.

>>>>> 2) For each submission to Apple's internal build system, we create a
>>>>> branch, generate xcodeproj files, and check them into the branch.
>>>>> Apple's internal build system can then "svn export" the branch and see
>>>>> xcodeproj files, as today.
>>>> 
>>>> While this is certainly technically feasible, it would add a huge amount of overhead to the process of performing a submission.
>>> 
>>> How often do you submit WebKit to the Apple internal build system?  If
>>> that's sensitive information, I'm just looking for an order of
>>> magnitude (e.g., every revision, every hour, every day, every week).
>>> As a reference, the Chromium project creates one branch per day for
>>> daily builds.
>> 
>> I don't see how the frequency is relevant.
> 
> The relevancy arises from the observation that the overhead is
> proportional to the frequency.  If we only submit WebKit to Apple's
> internal build system once a week, then this approach won't cause too
> much branch proliferation.  If, on the other hand, we're submitting
> every revision, then we're talking about doubling or tripling the
> revision burn rate, which might not be desirable.

The rate at which we use SVN revisions or the number of branches isn't of particular concern to me.  The simple fact is that your proposal turns a single, trivial operation (create a tag) in to a sequence of more complicated operations (create a branch, check it out, run a script to generate a bunch of files, test that it builds, commit the new files, create a tag).  What used to be a single command-line operation that took a second to run is now a series of operations that takes 5+ minutes to complete.

>>> In any case, I'm glad we've found a technically feasible solution.
>> 
>> We've had at least one technically feasible solution from day zip: check in the generated project files.
> 
> From my perspective, approach (2) is more desirable than checking in
> generated project files because approach (2) encapsulates
> Apple-internal build process to Apple folks, more specifically to the
> Apple folks who interact with the Apple-internal build system.
> Checking in generated project files, on the other hand, imposes a
> maintenance burden on all WebKit contributors.

The maintenance burden you mention is minuscule in comparison to the existing requirement of updating umpteen different build systems, including the impossible-to-hand-edit Xcode project files.  This is particularly true when we're still going to be updating umpteen minus one build systems for the foreseeable future.  If the Xcode project files were the only remaining project files then I'd certainly take this argument more seriously.


One issue that's been touched on but not stated explicitly is what the workflow will be for the average developer that wants to build WebKit.  Currently to update and build I do something like the following:
git svn rebase (or svn up)
make debug

Presumably people that use this workflow would need to add an extra step between those two commands to generate project files?

- Mark



More information about the webkit-dev mailing list