]> git.tdb.fi Git - builder.git/blob - source/gnulinker.h
8d63538631adff8e27e45eba49f58a00082ca777
[builder.git] / source / gnulinker.h
1 #ifndef GNULINKER_H_
2 #define GNULINKER_H_
3
4 #include "tool.h"
5
6 /**
7 The GNU linker.  Turns ObjectFiles into Executables and SharedLibraries.  To
8 create a shared library, specify "shared" as the second argument to
9 create_target.
10
11 Uses either gcc or g++ depending on what was used to compile the object files.
12 */
13 class GnuLinker: public Tool
14 {
15 private:
16         class Linker: public SubTool
17         {
18         private:
19                 std::string compiler_tag;
20
21         public:
22                 Linker(GnuLinker &, const std::string &);
23
24                 virtual Target *create_target(const std::list<Target *> &, const std::string &);
25                 virtual Target *create_install(Target &) const;
26                 virtual std::string create_build_signature(const BuildInfo &) const;
27         private:
28                 virtual void do_prepare();
29         public:
30                 virtual Task *run(const Target &) const;
31         };
32
33         Linker *default_linker;
34         Linker *cxx_linker;
35
36 public:
37         GnuLinker(Builder &, const Architecture &, const Msp::FS::Path & = Msp::FS::Path());
38         ~GnuLinker();
39
40         virtual Target *create_target(const std::list<Target *> &, const std::string &);
41         virtual Target *create_install(Target &) const;
42         virtual Task *run(const Target &) const;
43 };
44
45 #endif