]> git.tdb.fi Git - builder.git/blobdiff - source/gnulinker.h
Refactor the use of external tasks in tools
[builder.git] / source / gnulinker.h
index 6bd11ca441afda7f4be2e275d4ce80862894de2e..a0632d6ab3fdabdb50c754896c90ed9351eaedf2 100644 (file)
@@ -3,6 +3,8 @@
 
 #include "tool.h"
 
+class Binary;
+
 /**
 The GNU linker.  Turns ObjectFiles into Executables and SharedLibraries.  To
 create a shared library, specify "shared" as the second argument to
@@ -12,25 +14,16 @@ Uses either gcc or g++ depending on what was used to compile the object files.
 */
 class GnuLinker: public Tool
 {
-private:
-       class Linker: public SubTool
-       {
-       public:
-               Linker(GnuLinker &, const std::string &);
-
-               virtual Target *create_target(const std::list<Target *> &, const std::string &) const;
-               virtual Task *run(const Target &) const;
-       };
-
-       Linker *default_linker;
-       Linker *cxx_linker;
-
 public:
        GnuLinker(Builder &, const Architecture &);
-       ~GnuLinker();
 
-       virtual Target *create_target(const std::list<Target *> &, const std::string &) const;
-       virtual Task *run(const Target &) const;
+       Target *create_target(const std::vector<Target *> &, const std::string &) override;
+       Target *create_install(Target &) const override;
+       std::string create_build_signature(const BuildInfo &) const override;
+protected:
+       void do_prepare(ToolData &) const override;
+private:
+       static ExternalTask::Arguments _run(const Binary &, Msp::FS::Path &);
 };
 
 #endif