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

Side by Side Diff: tools/gn/test_with_scope.cc

Issue 440333002: Support more configurability in GN toolchains (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unsigned check Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/gn/test_with_scope.h ('k') | tools/gn/tool.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "tools/gn/test_with_scope.h" 5 #include "tools/gn/test_with_scope.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "tools/gn/parser.h" 8 #include "tools/gn/parser.h"
9 #include "tools/gn/tokenizer.h" 9 #include "tools/gn/tokenizer.h"
10 10
11 namespace {
12
13 void SetCommandForTool(const std::string& cmd, Tool* tool) {
14 Err err;
15 SubstitutionPattern command;
16 command.Parse(cmd, NULL, &err);
17 CHECK(!err.has_error())
18 << "Couldn't parse \"" << cmd << "\", " << "got " << err.message();
19 tool->set_command(command);
20 }
21
22 } // namespace
23
11 TestWithScope::TestWithScope() 24 TestWithScope::TestWithScope()
12 : build_settings_(), 25 : build_settings_(),
13 settings_(&build_settings_, std::string()), 26 settings_(&build_settings_, std::string()),
14 toolchain_(&settings_, Label(SourceDir("//toolchain/"), "default")), 27 toolchain_(&settings_, Label(SourceDir("//toolchain/"), "default")),
15 scope_(&settings_) { 28 scope_(&settings_) {
16 build_settings_.SetBuildDir(SourceDir("//out/Debug/")); 29 build_settings_.SetBuildDir(SourceDir("//out/Debug/"));
17 build_settings_.set_print_callback( 30 build_settings_.set_print_callback(
18 base::Bind(&TestWithScope::AppendPrintOutput, base::Unretained(this))); 31 base::Bind(&TestWithScope::AppendPrintOutput, base::Unretained(this)));
19 32
20 settings_.set_toolchain_label(toolchain_.label()); 33 settings_.set_toolchain_label(toolchain_.label());
21 settings_.set_default_toolchain_label(toolchain_.label()); 34 settings_.set_default_toolchain_label(toolchain_.label());
35
36 SetupToolchain(&toolchain_);
22 } 37 }
23 38
24 TestWithScope::~TestWithScope() { 39 TestWithScope::~TestWithScope() {
25 } 40 }
26 41
42 // static
43 void TestWithScope::SetupToolchain(Toolchain* toolchain) {
44 Err err;
45
46 // CC
47 scoped_ptr<Tool> cc_tool(new Tool);
48 SetCommandForTool(
49 "cc {{source}} {{cflags}} {{cflags_c}} {{defines}} {{include_dirs}} "
50 "-o {{output}}",
51 cc_tool.get());
52 cc_tool->set_outputs(SubstitutionList::MakeForTest(
53 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
54 toolchain->SetTool(Toolchain::TYPE_CC, cc_tool.Pass());
55
56 // CXX
57 scoped_ptr<Tool> cxx_tool(new Tool);
58 SetCommandForTool(
59 "c++ {{source}} {{cflags}} {{cflags_cc}} {{defines}} {{include_dirs}} "
60 "-o {{output}}",
61 cxx_tool.get());
62 cxx_tool->set_outputs(SubstitutionList::MakeForTest(
63 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
64 toolchain->SetTool(Toolchain::TYPE_CXX, cxx_tool.Pass());
65
66 // OBJC
67 scoped_ptr<Tool> objc_tool(new Tool);
68 SetCommandForTool(
69 "objcc {{source}} {{cflags}} {{cflags_objc}} {{defines}} "
70 "{{include_dirs}} -o {{output}}",
71 objc_tool.get());
72 objc_tool->set_outputs(SubstitutionList::MakeForTest(
73 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
74 toolchain->SetTool(Toolchain::TYPE_OBJC, objc_tool.Pass());
75
76 // OBJC
77 scoped_ptr<Tool> objcxx_tool(new Tool);
78 SetCommandForTool(
79 "objcxx {{source}} {{cflags}} {{cflags_objcc}} {{defines}} "
80 "{{include_dirs}} -o {{output}}",
81 objcxx_tool.get());
82 objcxx_tool->set_outputs(SubstitutionList::MakeForTest(
83 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
84 toolchain->SetTool(Toolchain::TYPE_OBJCXX, objcxx_tool.Pass());
85
86 // Don't use RC and ASM tools in unit tests yet. Add here if needed.
87
88 // ALINK
89 scoped_ptr<Tool> alink_tool(new Tool);
90 SetCommandForTool("ar {{output}} {{source}}", alink_tool.get());
91 alink_tool->set_output_prefix("lib");
92 alink_tool->set_outputs(SubstitutionList::MakeForTest(
93 "{{target_out_dir}}/{{target_output_name}}.a"));
94 toolchain->SetTool(Toolchain::TYPE_ALINK, alink_tool.Pass());
95
96 // SOLINK
97 scoped_ptr<Tool> solink_tool(new Tool);
98 SetCommandForTool("ld -shared -o {{target_output_name}}.so {{inputs}} "
99 "{{ldflags}} {{libs}}", solink_tool.get());
100 solink_tool->set_output_prefix("lib");
101 solink_tool->set_default_output_extension(".so");
102 solink_tool->set_outputs(SubstitutionList::MakeForTest(
103 "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"));
104 toolchain->SetTool(Toolchain::TYPE_SOLINK, solink_tool.Pass());
105
106 // LINK
107 scoped_ptr<Tool> link_tool(new Tool);
108 SetCommandForTool("ld -o {{target_output_name}} {{source}} "
109 "{{ldflags}} {{libs}}", link_tool.get());
110 link_tool->set_outputs(SubstitutionList::MakeForTest(
111 "{{root_out_dir}}/{{target_output_name}}"));
112 toolchain->SetTool(Toolchain::TYPE_LINK, link_tool.Pass());
113
114 // STAMP
115 scoped_ptr<Tool> stamp_tool(new Tool);
116 SetCommandForTool("touch {{output}}", stamp_tool.get());
117 toolchain->SetTool(Toolchain::TYPE_STAMP, stamp_tool.Pass());
118
119 // COPY
120 scoped_ptr<Tool> copy_tool(new Tool);
121 SetCommandForTool("cp {{source}} {{output}}", copy_tool.get());
122 toolchain->SetTool(Toolchain::TYPE_COPY, copy_tool.Pass());
123
124 toolchain->ToolchainSetupComplete();
125 }
126
27 void TestWithScope::AppendPrintOutput(const std::string& str) { 127 void TestWithScope::AppendPrintOutput(const std::string& str) {
28 print_output_.append(str); 128 print_output_.append(str);
29 } 129 }
30 130
31 TestParseInput::TestParseInput(const std::string& input) 131 TestParseInput::TestParseInput(const std::string& input)
32 : input_file_(SourceFile("//test")) { 132 : input_file_(SourceFile("//test")) {
33 input_file_.SetContents(input); 133 input_file_.SetContents(input);
34 134
35 tokens_ = Tokenizer::Tokenize(&input_file_, &parse_err_); 135 tokens_ = Tokenizer::Tokenize(&input_file_, &parse_err_);
36 if (!parse_err_.has_error()) 136 if (!parse_err_.has_error())
37 parsed_ = Parser::Parse(tokens_, &parse_err_); 137 parsed_ = Parser::Parse(tokens_, &parse_err_);
38 } 138 }
39 139
40 TestParseInput::~TestParseInput() { 140 TestParseInput::~TestParseInput() {
41 } 141 }
OLDNEW
« no previous file with comments | « tools/gn/test_with_scope.h ('k') | tools/gn/tool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698