diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-16 16:46:14 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-16 16:46:14 +0000 |
commit | e3730f817be9693b5ad140a002abff4cbaf674ec (patch) | |
tree | b0aa15b4099915ca23a673a11356b73db2321844 /tools/gn/setup.h | |
parent | 5fb863442b955f859bee4baf67aeeaf4fdc4b6c4 (diff) | |
download | chromium_src-e3730f817be9693b5ad140a002abff4cbaf674ec.zip chromium_src-e3730f817be9693b5ad140a002abff4cbaf674ec.tar.gz chromium_src-e3730f817be9693b5ad140a002abff4cbaf674ec.tar.bz2 |
GYP generator for GN.
This creates a GYP generator for GN. The GN build is run twice, once for debug and once for release mode. The resulting targets are paired to find the debug/release version of each one, and we write out the results as a GYP file.
Since a GN build can change anything based on the debug/release status, including changing the file list, and GYP can't there are a bunch of checks to make sure that the source files and deps don't vary between the debug and release version of the same target.
I split the Setup class apart so I can make duplicate Setup classes base on an original one (I use this to configure a release build based on the debug one). I added some copy constructors to the necessary classes so this would work.
This reads in the GYP_DEFINES and configures the GN build in the same way. The mapping between GYP_DEFINES and gl flags is hardcoded. I had to write some parsing code for the GYP_DEFINES which is unfortunate.
I added a new GN variable "gyp_file" for targets to set the GYP file that they should be written to.
I added a parameter for the Windows SDK path that matches the GYP build.
This removes the old "GYP" command.
I commented out all of the grit rules. These aren't helping anything right now and just slow down testing.
BUG=307571
R=scottmg@chromium.org
Review URL: https://codereview.chromium.org/26561005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228933 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/gn/setup.h')
-rw-r--r-- | tools/gn/setup.h | 67 |
1 files changed, 56 insertions, 11 deletions
diff --git a/tools/gn/setup.h b/tools/gn/setup.h index bd7166d..c2b3d82 100644 --- a/tools/gn/setup.h +++ b/tools/gn/setup.h @@ -23,26 +23,51 @@ class ParseNode; extern const char kDotfile_Help[]; +// Base class for code shared between Setup and DependentSetup. +class CommonSetup { + public: + virtual ~CommonSetup(); + + // When true (the default), Run() will check for unresolved dependencies and + // cycles upon completion. When false, such errors will be ignored. + void set_check_for_bad_items(bool s) { check_for_bad_items_ = s; } + + BuildSettings& build_settings() { return build_settings_; } + + protected: + CommonSetup(); + CommonSetup(const CommonSetup& other); + + // Performs the two sets of operations to run the generation before and after + // the message loop is run. + void RunPreMessageLoop(); + bool RunPostMessageLoop(); + + protected: + BuildSettings build_settings_; + + bool check_for_bad_items_; + + private: + CommonSetup& operator=(const CommonSetup& other); // Disallow. +}; + // Helper class to setup the build settings and environment for the various // commands to run. -class Setup { +class Setup : public CommonSetup { public: Setup(); - ~Setup(); + virtual ~Setup(); // Configures the build for the current command line. On success returns // true. On failure, prints the error and returns false. bool DoSetup(); - // When true (the default), Run() will check for unresolved dependencies and - // cycles upon completion. When false, such errors will be ignored. - void set_check_for_bad_items(bool s) { check_for_bad_items_ = s; } - // Runs the load, returning true on success. On failure, prints the error - // and returns false. + // and returns false. This includes both RunPreMessageLoop() and + // RunPostMessageLoop(). bool Run(); - BuildSettings& build_settings() { return build_settings_; } Scheduler& scheduler() { return scheduler_; } private: @@ -61,11 +86,8 @@ class Setup { bool FillOtherConfig(const CommandLine& cmdline); - BuildSettings build_settings_; Scheduler scheduler_; - bool check_for_bad_items_; - // These empty settings and toolchain are used to interpret the command line // and dot file. BuildSettings empty_build_settings_; @@ -89,4 +111,27 @@ class Setup { DISALLOW_COPY_AND_ASSIGN(Setup); }; +// A dependent setup allows one to do more than one build at a time. You would +// make a dependent setup which clones the state of the main one, make any +// necessary changes, and then run it. +// +// The way to run both at the same time is: +// dependent_setup.RunPreMessageLoop(); +// main_setup.Run(); +// dependent_setup.RunPostMessageLoop(); +// so that the main setup executes the message loop, but both are run. +class DependentSetup : public CommonSetup { + public: + DependentSetup(const Setup& main_setup); + virtual ~DependentSetup(); + + // These are the two parts of Run() in the regular setup, not including the + // call to actually run the message loop. + void RunPreMessageLoop(); + bool RunPostMessageLoop(); + + private: + DISALLOW_COPY_AND_ASSIGN(DependentSetup); +}; + #endif // TOOLS_GN_SETUP_H_ |