Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: tools/gn/command_gyp.cc

Issue 93803004: Fix build output directories in GN. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/toolchain/goma.gni ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/command_gyp.cc
diff --git a/tools/gn/command_gyp.cc b/tools/gn/command_gyp.cc
index eaad5c15ff4580d14db95b17018812af358da6f3..9178d159eff69119490536c7ecf84b7d3280ae2e 100644
--- a/tools/gn/command_gyp.cc
+++ b/tools/gn/command_gyp.cc
@@ -14,6 +14,7 @@
#include "tools/gn/build_settings.h"
#include "tools/gn/commands.h"
#include "tools/gn/err.h"
+#include "tools/gn/filesystem_utils.h"
#include "tools/gn/gyp_helper.h"
#include "tools/gn/gyp_target_writer.h"
#include "tools/gn/location.h"
@@ -34,6 +35,15 @@ typedef std::map<SourceFile, std::vector<TargetGroup> > GroupedTargetsMap;
typedef std::map<std::string, std::string> StringStringMap;
typedef std::vector<const BuilderRecord*> RecordVector;
+// This function appends a suffix to the given source directory name. We append
+// a suffix to the last directory component rather than adding a new level so
+// that the relative location of the files don't change (i.e. a file
+// relative to the build dir might be "../../foo/bar.cc") and we want these to
+// be the same in all builds, and in particular the GYP build directories.
+SourceDir AppendDirSuffix(const SourceDir& base, const std::string& suffix) {
+ return SourceDir(DirectoryWithNoLastSlash(base) + suffix + "/");
+}
+
std::vector<const BuilderRecord*> GetAllResolvedTargetRecords(
const Builder* builder) {
std::vector<const BuilderRecord*> all = builder->GetAllRecords();
@@ -326,14 +336,17 @@ int RunGyp(const std::vector<std::string>& args) {
return 1;
const char kIsDebug[] = "is_debug";
+ SourceDir base_build_dir = setup_debug->build_settings().build_dir();
+ setup_debug->build_settings().SetBuildDir(
+ AppendDirSuffix(base_build_dir, ".Debug"));
+
// Make a release build based on the debug one. We use a new directory for
// the build output so that they don't stomp on each other.
DependentSetup* setup_release = new DependentSetup(setup_debug);
setup_release->build_settings().build_args().AddArgOverride(
kIsDebug, Value(NULL, false));
setup_release->build_settings().SetBuildDir(
- SourceDir(setup_release->build_settings().build_dir().value() +
- "gn_release.tmp/"));
+ AppendDirSuffix(base_build_dir, ".Release"));
// Host build.
DependentSetup* setup_host_debug = NULL;
@@ -349,15 +362,13 @@ int RunGyp(const std::vector<std::string>& args) {
setup_debug64->build_settings().build_args().AddArgOverride(
kForceWin64, Value(NULL, true));
setup_debug64->build_settings().SetBuildDir(
- SourceDir(setup_release->build_settings().build_dir().value() +
- "gn_debug64.tmp/"));
+ AppendDirSuffix(base_build_dir, ".Debug64"));
setup_release64 = new DependentSetup(setup_release);
setup_release64->build_settings().build_args().AddArgOverride(
kForceWin64, Value(NULL, true));
setup_release64->build_settings().SetBuildDir(
- SourceDir(setup_release->build_settings().build_dir().value() +
- "gn_release64.tmp/"));
+ AppendDirSuffix(base_build_dir, ".Release64"));
#endif
// Run all the builds in parellel.
« no previous file with comments | « build/toolchain/goma.gni ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698