summaryrefslogtreecommitdiffstats
path: root/tools/gn/setup.h
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-16 16:46:14 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-16 16:46:14 +0000
commite3730f817be9693b5ad140a002abff4cbaf674ec (patch)
treeb0aa15b4099915ca23a673a11356b73db2321844 /tools/gn/setup.h
parent5fb863442b955f859bee4baf67aeeaf4fdc4b6c4 (diff)
downloadchromium_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.h67
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_