#include "tool.h"
+/**
+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
{
+private:
+ class Linker: public SubTool
+ {
+ private:
+ std::string compiler_tag;
+
+ public:
+ Linker(GnuLinker &, const std::string &);
+
+ virtual Target *create_target(const std::list<Target *> &, const std::string &);
+ virtual Target *create_install(Target &) const;
+ virtual std::string create_build_signature(const BuildInfo &) const;
+ private:
+ virtual void do_prepare();
+ public:
+ virtual Task *run(const Target &) const;
+ };
+
+ Linker *default_linker;
+ Linker *cxx_linker;
+
public:
- GnuLinker(Builder &);
+ GnuLinker(Builder &, const Architecture &, const Msp::FS::Path & = Msp::FS::Path());
+ ~GnuLinker();
- virtual Target *create_target(const std::list<Target *> &, const std::string &) const;
+ virtual Target *create_target(const std::list<Target *> &, const std::string &);
+ virtual Target *create_install(Target &) const;
virtual Task *run(const Target &) const;
};