X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgnucompiler.h;h=b0d0ec9e0afc040edfdc722d5979c0a12ebe6d42;hb=edd4771292a2273080fbcbac266c6831834b0b86;hp=d09cb9ad46b398103826ea8268751622b89189b4;hpb=4fea1031bf55f4f4d7f17f529a89aa5945018446;p=builder.git diff --git a/source/gnucompiler.h b/source/gnucompiler.h index d09cb9a..b0d0ec9 100644 --- a/source/gnucompiler.h +++ b/source/gnucompiler.h @@ -3,14 +3,32 @@ #include "tool.h" +class ObjectFile; + +/** +Common base class for GNU compilers. Turns SourceFiles into ObjectFiles. + +Since invocation is mostly the same for all language frontends, most of the +logic is here and the individual tools only handle creating source files of +appropriate type. +*/ class GnuCompiler: public Tool { +public: + GnuCompiler(Builder &, const Architecture &, const std::string &); + + Target *create_source(const Component &, const Msp::FS::Path &) const override; + Target *create_source(const Msp::FS::Path &) const override; + Target *create_target(const std::vector &, const std::string &) override; + std::string create_build_signature(const BuildInfo &) const override; protected: - GnuCompiler(Builder &, const std::string &, const std::string &); + void do_prepare(ToolData &) const override; + void prepare_syspath(ToolData &) const; + void prepare_version(ToolData &) const; + unsigned query_version(const std::string &, const std::string &) const; -public: - virtual Target *create_target(const std::list &, const std::string &) const; - virtual Task *run(const Target &) const; +private: + static ExternalTask::Arguments _run(const ObjectFile &, Msp::FS::Path &); }; #endif