#include <string>
#include <msp/fs/path.h>
+class Architecture;
class Builder;
class Component;
+class FileTarget;
class Target;
class Task;
protected:
Builder &builder;
+ const Architecture *architecture;
std::string tag;
+ FileTarget *executable;
SuffixList input_suffixes;
SuffixList aux_suffixes;
SearchPath system_path;
Tool(Builder &, const std::string &);
+ Tool(Builder &, const Architecture &, const std::string &);
public:
virtual ~Tool() { }
const std::string &get_tag() const { return tag; }
+ // XXX The executable target should be retrieved when first needed
+ FileTarget *get_executable() const { return executable; }
const SuffixList &get_input_suffixes() const { return input_suffixes; }
const SuffixList &get_auxiliary_suffixes() const { return aux_suffixes; }
bool accepts_suffix(const std::string &, bool = false) const;
virtual Task *run(const Target &) const = 0;
};
+/**
+Intermediate base class for tool facets. For example, a linker may need to
+use different commands depending on whether C++ source files are present or
+not, but their presence can't be directly determined from the object files.
+*/
+class SubTool: public Tool
+{
+protected:
+ Tool &parent;
+
+ SubTool(Tool &);
+};
+
#endif