| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <iostream> | 5 #include <iostream> |
| 6 #include <map> | 6 #include <map> |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 " executable(\"my_app\") {\n" | 417 " executable(\"my_app\") {\n" |
| 418 " deps = [ \":gyp_target\" ]\n" | 418 " deps = [ \":gyp_target\" ]\n" |
| 419 " gyp_file = \"//foo/myapp.gyp\"\n" | 419 " gyp_file = \"//foo/myapp.gyp\"\n" |
| 420 " sources = ...\n" | 420 " sources = ...\n" |
| 421 " }\n"; | 421 " }\n"; |
| 422 | 422 |
| 423 int RunGyp(const std::vector<std::string>& args) { | 423 int RunGyp(const std::vector<std::string>& args) { |
| 424 base::ElapsedTimer timer; | 424 base::ElapsedTimer timer; |
| 425 Setups setups; | 425 Setups setups; |
| 426 | 426 |
| 427 const CommandLine* cmdline = CommandLine::ForCurrentProcess(); |
| 428 |
| 429 // Compute output directory. |
| 430 std::string build_dir; |
| 431 if (args.size() == 1) { |
| 432 build_dir = args[0]; |
| 433 } else { |
| 434 // Backwards-compat code for the old invocation that uses |
| 435 // "gn gyp --output=foo" |
| 436 // TODO(brettw) This should be removed when gyp_chromium has been updated. |
| 437 |
| 438 // Switch to set the build output directory. |
| 439 const char kSwitchBuildOutput[] = "output"; |
| 440 build_dir = cmdline->GetSwitchValueASCII(kSwitchBuildOutput); |
| 441 if (build_dir.empty()) |
| 442 build_dir = "//out/Default/"; |
| 443 } |
| 444 |
| 427 // Deliberately leaked to avoid expensive process teardown. We also turn off | 445 // Deliberately leaked to avoid expensive process teardown. We also turn off |
| 428 // unused override checking since we want to merge all declared arguments and | 446 // unused override checking since we want to merge all declared arguments and |
| 429 // check those, rather than check each build individually. Otherwise, you | 447 // check those, rather than check each build individually. Otherwise, you |
| 430 // couldn't have an arg that was used in only one build type. This comes up | 448 // couldn't have an arg that was used in only one build type. This comes up |
| 431 // because some args are build-type specific. | 449 // because some args are build-type specific. |
| 432 setups.debug = new Setup; | 450 setups.debug = new Setup; |
| 433 setups.debug->set_check_for_unused_overrides(false); | 451 setups.debug->set_check_for_unused_overrides(false); |
| 434 if (!setups.debug->DoSetup()) | 452 if (!setups.debug->DoSetup(build_dir)) |
| 435 return 1; | 453 return 1; |
| 436 const char kIsDebug[] = "is_debug"; | 454 const char kIsDebug[] = "is_debug"; |
| 437 | 455 |
| 438 SourceDir base_build_dir = setups.debug->build_settings().build_dir(); | 456 SourceDir base_build_dir = setups.debug->build_settings().build_dir(); |
| 439 setups.debug->build_settings().SetBuildDir( | 457 setups.debug->build_settings().SetBuildDir( |
| 440 AppendDirSuffix(base_build_dir, ".Debug")); | 458 AppendDirSuffix(base_build_dir, ".Debug")); |
| 441 | 459 |
| 442 // Make a release build based on the debug one. We use a new directory for | 460 // Make a release build based on the debug one. We use a new directory for |
| 443 // the build output so that they don't stomp on each other. | 461 // the build output so that they don't stomp on each other. |
| 444 setups.release = new DependentSetup(setups.debug); | 462 setups.release = new DependentSetup(setups.debug); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 | 526 |
| 509 Err err; | 527 Err err; |
| 510 std::pair<int, int> counts = WriteGypFiles(setups, &err); | 528 std::pair<int, int> counts = WriteGypFiles(setups, &err); |
| 511 if (err.has_error()) { | 529 if (err.has_error()) { |
| 512 err.PrintToStdout(); | 530 err.PrintToStdout(); |
| 513 return 1; | 531 return 1; |
| 514 } | 532 } |
| 515 | 533 |
| 516 base::TimeDelta elapsed_time = timer.Elapsed(); | 534 base::TimeDelta elapsed_time = timer.Elapsed(); |
| 517 | 535 |
| 518 if (!CommandLine::ForCurrentProcess()->HasSwitch(kSwitchQuiet)) { | 536 if (!cmdline->HasSwitch(kSwitchQuiet)) { |
| 519 OutputString("Done. ", DECORATION_GREEN); | 537 OutputString("Done. ", DECORATION_GREEN); |
| 520 | 538 |
| 521 std::string stats = "Wrote " + | 539 std::string stats = "Wrote " + |
| 522 base::IntToString(counts.first) + " targets to " + | 540 base::IntToString(counts.first) + " targets to " + |
| 523 base::IntToString(counts.second) + " GYP files read from " + | 541 base::IntToString(counts.second) + " GYP files read from " + |
| 524 base::IntToString( | 542 base::IntToString( |
| 525 setups.debug->scheduler().input_file_manager()->GetInputFileCount()) | 543 setups.debug->scheduler().input_file_manager()->GetInputFileCount()) |
| 526 + " GN files in " + | 544 + " GN files in " + |
| 527 base::IntToString(elapsed_time.InMilliseconds()) + "ms\n"; | 545 base::IntToString(elapsed_time.InMilliseconds()) + "ms\n"; |
| 528 | 546 |
| 529 OutputString(stats); | 547 OutputString(stats); |
| 530 } | 548 } |
| 531 | 549 |
| 532 return 0; | 550 return 0; |
| 533 } | 551 } |
| 534 | 552 |
| 535 } // namespace commands | 553 } // namespace commands |
| OLD | NEW |