#include "tool.h"
-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;
- };
+class Binary;
- Linker *default_linker;
- Linker *cxx_linker;
+/**
+The GNU linker. Turns ObjectFiles into Executables and SharedLibraries. To
+create a shared library, specify "shared" as the second argument to
+create_target.
+Uses either gcc or g++ depending on what was used to compile the object files.
+*/
+class GnuLinker: public Tool
+{
public:
- GnuLinker(Builder &);
- ~GnuLinker();
+ GnuLinker(Builder &, const Architecture &);
- 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