Index: tools/gn/toolchain.h |
diff --git a/tools/gn/toolchain.h b/tools/gn/toolchain.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..22b8151bb001b33de192da57daa7629a10dcf7b9 |
--- /dev/null |
+++ b/tools/gn/toolchain.h |
@@ -0,0 +1,94 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef TOOLS_GN_TOOLCHAIN_H_ |
+#define TOOLS_GN_TOOLCHAIN_H_ |
+ |
+#include "base/compiler_specific.h" |
+#include "base/strings/string_piece.h" |
+#include "tools/gn/item.h" |
+ |
+// Holds information on a specific toolchain. This data is filled in when we |
+// encounter a toolchain definition. |
+// |
+// This class is an Item so it can participate in dependency management. In |
+// particular, when a target uses a toolchain, it should have a dependency on |
+// that toolchain's object so that we can be sure we loaded the toolchain |
+// before generating the build for that target. |
+// |
+// Note on threadsafety: The label of the toolchain never changes so can |
+// safetly be accessed from any thread at any time (we do this when asking for |
+// the toolchain name). But the values in the toolchain do, so these can't |
+// be accessed until this Item is resolved. |
+class Toolchain : public Item { |
+ public: |
+ enum ToolType { |
+ TYPE_NONE = 0, |
+ TYPE_CC, |
+ TYPE_CXX, |
+ TYPE_ASM, |
+ TYPE_ALINK, |
+ TYPE_SOLINK, |
+ TYPE_SOLINK_MODULE, |
+ TYPE_LINK, |
+ TYPE_STAMP, |
+ TYPE_COPY, |
+ |
+ TYPE_NUMTYPES // Must be last. |
+ }; |
+ |
+ static const char* kToolCc; |
+ static const char* kToolCxx; |
+ static const char* kToolAsm; |
+ static const char* kToolAlink; |
+ static const char* kToolSolink; |
+ static const char* kToolSolinkModule; |
+ static const char* kToolLink; |
+ static const char* kToolStamp; |
+ static const char* kToolCopy; |
+ |
+ struct Tool { |
+ Tool(); |
+ ~Tool(); |
+ |
+ bool empty() const { |
+ return command.empty() && depfile.empty() && deps.empty() && |
+ description.empty() && pool.empty() && restat.empty() && |
+ rspfile.empty() && rspfile_content.empty(); |
+ } |
+ |
+ std::string command; |
+ std::string depfile; |
+ std::string deps; |
+ std::string description; |
+ std::string pool; |
+ std::string restat; |
+ std::string rspfile; |
+ std::string rspfile_content; |
+ }; |
+ |
+ Toolchain(const Label& label); |
+ virtual ~Toolchain(); |
+ |
+ // Item overrides. |
+ virtual Toolchain* AsToolchain() OVERRIDE; |
+ virtual const Toolchain* AsToolchain() const OVERRIDE; |
+ |
+ // Returns TYPE_NONE on failure. |
+ static ToolType ToolNameToType(const base::StringPiece& str); |
+ static std::string ToolTypeToName(ToolType type); |
+ |
+ const Tool& GetTool(ToolType type) const; |
+ void SetTool(ToolType type, const Tool& t); |
+ |
+ const std::string& environment() const { return environment_; } |
+ void set_environment(const std::string& env) { environment_ = env; } |
+ |
+ private: |
+ Tool tools_[TYPE_NUMTYPES]; |
+ |
+ std::string environment_; |
+}; |
+ |
+#endif // TOOLS_GN_TOOLCHAIN_H_ |