X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgnucompiler.h;h=1983f79f9535298249f601697ea1809961f932e7;hb=aa053d637e8259755af7d2e4b510a242f4d29c7b;hp=127f32e9bf81b44dfa27aaa2e789d33f7df13b6b;hpb=7e5ac6af8987bf12f3e338d00e96e8cb74f3534b;p=builder.git diff --git a/source/gnucompiler.h b/source/gnucompiler.h index 127f32e..1983f79 100644 --- a/source/gnucompiler.h +++ b/source/gnucompiler.h @@ -3,16 +3,32 @@ #include "tool.h" +/** +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 { protected: - std::string name; + unsigned version; - GnuCompiler(Builder &, const std::string &, const std::string &); +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: + void do_prepare() override; + void prepare_syspath(); + void prepare_version(); + void prepare_version(const std::string &); public: - virtual Target *create_target(const std::list &, const std::string &) const; - virtual Task *run(const Target &) const; + Task *run(const Target &) const override; }; #endif