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 <algorithm> | 5 #include <algorithm> |
6 #include <limits> | 6 #include <limits> |
7 | 7 |
8 #include "tools/gn/err.h" | 8 #include "tools/gn/err.h" |
9 #include "tools/gn/functions.h" | 9 #include "tools/gn/functions.h" |
10 #include "tools/gn/parse_tree.h" | 10 #include "tools/gn/parse_tree.h" |
11 #include "tools/gn/scheduler.h" | 11 #include "tools/gn/scheduler.h" |
12 #include "tools/gn/scope.h" | 12 #include "tools/gn/scope.h" |
13 #include "tools/gn/settings.h" | 13 #include "tools/gn/settings.h" |
14 #include "tools/gn/tool.h" | 14 #include "tools/gn/tool.h" |
15 #include "tools/gn/toolchain.h" | 15 #include "tools/gn/toolchain.h" |
16 #include "tools/gn/value_extractors.h" | 16 #include "tools/gn/value_extractors.h" |
17 #include "tools/gn/variables.h" | 17 #include "tools/gn/variables.h" |
18 | 18 |
19 namespace functions { | 19 namespace functions { |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 // This is jsut a unique value to take the address of to use as the key for | 23 // This is just a unique value to take the address of to use as the key for |
24 // the toolchain property on a scope. | 24 // the toolchain property on a scope. |
25 const int kToolchainPropertyKey = 0; | 25 const int kToolchainPropertyKey = 0; |
26 | 26 |
27 bool ReadBool(Scope* scope, | 27 bool ReadBool(Scope* scope, |
28 const char* var, | 28 const char* var, |
29 Tool* tool, | 29 Tool* tool, |
30 void (Tool::*set)(bool), | 30 void (Tool::*set)(bool), |
31 Err* err) { | 31 Err* err) { |
32 const Value* v = scope->GetValue(var, true); | 32 const Value* v = scope->GetValue(var, true); |
33 if (!v) | 33 if (!v) |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 bool ReadPrecompiledHeaderType(Scope* scope, Tool* tool, Err* err) { | 117 bool ReadPrecompiledHeaderType(Scope* scope, Tool* tool, Err* err) { |
118 const Value* value = scope->GetValue("precompiled_header_type", true); | 118 const Value* value = scope->GetValue("precompiled_header_type", true); |
119 if (!value) | 119 if (!value) |
120 return true; // Not present is fine. | 120 return true; // Not present is fine. |
121 if (!value->VerifyTypeIs(Value::STRING, err)) | 121 if (!value->VerifyTypeIs(Value::STRING, err)) |
122 return false; | 122 return false; |
123 | 123 |
124 if (value->string_value().empty()) | 124 if (value->string_value().empty()) |
125 return true; // Accept empty string, do nothing (default is "no PCH"). | 125 return true; // Accept empty string, do nothing (default is "no PCH"). |
126 | 126 |
127 if (value->string_value() == "msvc") { | 127 if (value->string_value() == "gcc") { |
| 128 tool->set_precompiled_header_type(Tool::PCH_GCC); |
| 129 return true; |
| 130 } else if (value->string_value() == "msvc") { |
128 tool->set_precompiled_header_type(Tool::PCH_MSVC); | 131 tool->set_precompiled_header_type(Tool::PCH_MSVC); |
129 return true; | 132 return true; |
130 } | 133 } |
131 *err = Err(*value, "Invalid precompiled_header_type", | 134 *err = Err(*value, "Invalid precompiled_header_type", |
132 "Must either be empty or \"msvc\"."); | 135 "Must either be empty, \"gcc\", or \"msvc\"."); |
133 return false; | 136 return false; |
134 } | 137 } |
135 | 138 |
136 bool ReadDepsFormat(Scope* scope, Tool* tool, Err* err) { | 139 bool ReadDepsFormat(Scope* scope, Tool* tool, Err* err) { |
137 const Value* value = scope->GetValue("depsformat", true); | 140 const Value* value = scope->GetValue("depsformat", true); |
138 if (!value) | 141 if (!value) |
139 return true; // Not present is fine. | 142 return true; // Not present is fine. |
140 if (!value->VerifyTypeIs(Value::STRING, err)) | 143 if (!value->VerifyTypeIs(Value::STRING, err)) |
141 return false; | 144 return false; |
142 | 145 |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 "\n" | 527 "\n" |
525 " This is typically used to prepend \"lib\" to libraries on\n" | 528 " This is typically used to prepend \"lib\" to libraries on\n" |
526 " Posix systems:\n" | 529 " Posix systems:\n" |
527 " output_prefix = \"lib\"\n" | 530 " output_prefix = \"lib\"\n" |
528 "\n" | 531 "\n" |
529 " precompiled_header_type [string]\n" | 532 " precompiled_header_type [string]\n" |
530 " Valid for: \"cc\", \"cxx\", \"objc\", \"objcxx\"\n" | 533 " Valid for: \"cc\", \"cxx\", \"objc\", \"objcxx\"\n" |
531 "\n" | 534 "\n" |
532 " Type of precompiled headers. If undefined or the empty string,\n" | 535 " Type of precompiled headers. If undefined or the empty string,\n" |
533 " precompiled headers will not be used for this tool. Otherwise\n" | 536 " precompiled headers will not be used for this tool. Otherwise\n" |
534 " use \"msvc\" which is the only currently supported value.\n" | 537 " use \"gcc\" or \"msvc\".\n" |
535 "\n" | 538 "\n" |
536 " For precompiled headers to be used for a given target, the\n" | 539 " For precompiled headers to be used for a given target, the\n" |
537 " target (or a config applied to it) must also specify a\n" | 540 " target (or a config applied to it) must also specify a\n" |
538 " \"precompiled_header\" and, for \"msvc\"-style headers, a\n" | 541 " \"precompiled_header\" and, for \"msvc\"-style headers, a\n" |
539 " \"precompiled_source\" value.\n" | 542 " \"precompiled_source\" value. If the type is \"gcc\", then both\n" |
| 543 " \"precompiled_header\" and \"precompiled_source\" must resolve\n" |
| 544 " to the same file, despite the different formats required for each." |
540 "\n" | 545 "\n" |
541 " See \"gn help precompiled_header\" for more.\n" | 546 " See \"gn help precompiled_header\" for more.\n" |
542 "\n" | 547 "\n" |
543 " restat [boolean]\n" | 548 " restat [boolean]\n" |
544 " Valid for: all tools (optional, defaults to false)\n" | 549 " Valid for: all tools (optional, defaults to false)\n" |
545 "\n" | 550 "\n" |
546 " Requests that Ninja check the file timestamp after this tool has\n" | 551 " Requests that Ninja check the file timestamp after this tool has\n" |
547 " run to determine if anything changed. Set this if your tool has\n" | 552 " run to determine if anything changed. Set this if your tool has\n" |
548 " the ability to skip writing output if the output file has not\n" | 553 " the ability to skip writing output if the output file has not\n" |
549 " changed.\n" | 554 " changed.\n" |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 return Value(); | 954 return Value(); |
950 | 955 |
951 Scope::KeyValueMap values; | 956 Scope::KeyValueMap values; |
952 block_scope.GetCurrentScopeValues(&values); | 957 block_scope.GetCurrentScopeValues(&values); |
953 toolchain->args() = values; | 958 toolchain->args() = values; |
954 | 959 |
955 return Value(); | 960 return Value(); |
956 } | 961 } |
957 | 962 |
958 } // namespace functions | 963 } // namespace functions |
OLD | NEW |