Hello All,

Last week I re-landed a change to split off parts of chrome.gyp into .gypi's
in the same directory.
I had done something similar a couple weeks back, but took it out because
concern was raised about merge conflicts in m4.
I put it back in because I got the all clear on m4.
The goal is to reduce contention on chrome.gyp which has gotten quite large
- 7000+ lines.

The current division is:
chrome_tests.gypi - 1793 (all tests)
chrome_browser.gyp - 2384 ('browser' target)
chrome.gyp - 2873 - (everything else)

The reason for using .gypi's rather than normal .gyp files is that the xcode
generator emits one xcodeproj per .gyp file.
Finer granularity would mean xcode users would get an overly myopic view of
the total project.
To avoid this, I've just pulled out larger targets into neighboring gypi's,
but they are still effectively a part of chrome.gyp. Targets behave the same
in an ancillary gypi file as they would if they were in the 'targets' list
in the main gyp file.

In a related theme, gregoryd is in the process of trying to produce 64-bit
builds of base, app, and a few other targets for use in nacl's 64-bit shim.
Without going into too much detail, in order to work correctly, even as a
part of a 32-bit build of chrome, a 64-bit shim which depends on base, app,
etc. needs to be built along side on windows. The best solution we've been
able to come up with is to use 'target_conditions' inside a gyp file to
allow a 'base' and 'base_nacl_win64' to share common files and settings. And
then use a facility in the msvs gyp generator to have some targets within a
32-bit sln configuration actually be 64-bit . This unfortunately somewhat
obscures which parts of the .gyp are relevant to which target. To make the
relationship more clear, we've come up with the idea of breaking out the
'magical' targets into separate .gypi files. You can see this in action in
the current state of base.gyp and base.gypi.

We've considered a number of alternatives: duplicate the contents of each
target for x64, enhance gyp to support target 'inheritance', wrap the whole
thing up in a python script to build things multiple different ways. The
advantage of the current approach is that nothing changes from the point of
view of someone building in the IDE.

Some concern has been raised as to the readability of the resulting gyp
files. We'd like to find something that meets everyones needs, so please let
me know if you've got ideas on how to do this more cleanly.

-BradN

-- 
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev

Reply via email to