]> git.tdb.fi Git - builder.git/blob - source/architecture.h
Have Architecture provide pattern lists for library and executable filenames
[builder.git] / source / architecture.h
1 #ifndef ARCHITECTURE_H_
2 #define ARCHITECTURE_H_
3
4 #include <msp/datafile/loader.h>
5 #include "buildinfo.h"
6 #include "misc.h"
7 #include "pattern.h"
8
9 class Builder;
10
11 // XXX Add lib/exe prefix/suffix fields.  Some archs may need multiple alternatives, how to handle this?
12 class Architecture
13 {
14 public:
15         class Loader: public Msp::DataFile::Loader
16         {
17         private:
18                 Architecture &arch;
19
20         public:
21                 Loader(Architecture &);
22                 Architecture &get_object() { return arch; }
23         private:
24                 void tool(const std::string &t, const std::string &p);
25         };
26
27         typedef std::list<Pattern> PatternList;
28
29 private:
30         Builder &builder;
31         std::string type;
32         std::string cpu;
33         std::string system;
34         unsigned bits;
35         std::string name;
36         bool native;
37         std::string cross_prefix;
38         StringMap tools;
39         PatternList sharedlib_patterns;
40         PatternList staticlib_patterns;
41         PatternList executable_patterns;
42
43 public:
44         Architecture(Builder &b, const std::string &spec);
45
46         const std::string &get_name() const { return name; }
47         const std::string &get_system() const { return system; }
48         unsigned get_bits() const { return bits; }
49         const std::string &get_cpu() const { return cpu; }
50         bool match_name(const std::string &) const;
51         bool is_native() const { return native; }
52
53         void set_tool(const std::string &t, const std::string &p);
54         void set_cross_prefix(const std::string &);
55         std::string get_tool(const std::string &t) const;
56         const std::string &get_cross_prefix() const { return cross_prefix; }
57
58         const PatternList &get_shared_library_patterns() const { return sharedlib_patterns; }
59         const PatternList &get_static_library_patterns() const { return staticlib_patterns; }
60         const PatternList &get_executable_patterns() const { return executable_patterns; }
61
62 private:
63         std::string resolve_alias(const std::string &) const;
64         void parse_specification(const std::string &);
65 };
66
67 typedef std::map<std::string, Architecture> ArchMap;
68
69 #endif