X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farchitecture.h;h=d84173e67029f2bcd7a74a230dc6a7ee388dd090;hb=081e13e6f146d1685bdcb1ec1c82752f4c6d264d;hp=aa5f8650ddae92803114d9ffd98049b9e6647071;hpb=04c316da6d5d90e43cba262f54d90ca231f703bf;p=builder.git diff --git a/source/architecture.h b/source/architecture.h index aa5f865..d84173e 100644 --- a/source/architecture.h +++ b/source/architecture.h @@ -1,50 +1,61 @@ -/* $Id$ - -This file is part of builder -Copyright © 2007-2009 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #ifndef ARCHITECTURE_H_ #define ARCHITECTURE_H_ #include -#include "misc.h" +#include "buildinfo.h" +#include "pattern.h" class Builder; -// XXX Add lib/exe prefix/suffix fields. Some archs may need multiple alternatives, how to handle this? +/** +Stores information about an architecture. This includes CPU type, model and +bitness and operating system. +*/ class Architecture { public: - class Loader: public Msp::DataFile::Loader + class Loader: public Msp::DataFile::ObjectLoader { - private: - Architecture &arch; - public: Loader(Architecture &); - Architecture &get_object() { return arch; } - private: - void tool(const std::string &t, const std::string &p); }; + typedef std::list PatternList; + private: Builder &builder; + std::string type; + std::string cpu; + std::string system; + unsigned bits; std::string name; bool native; - std::string prefix; - StringMap tools; + std::string cross_prefix; + PatternList sharedlib_patterns; + PatternList staticlib_patterns; + PatternList executable_patterns; public: - Architecture(Builder &b, const std::string &n, bool a = false); - void set_tool(const std::string &t, const std::string &p); - std::string get_tool(const std::string &t) const; + Architecture(Builder &b, const std::string &spec); + + const std::string &get_type() const { return type; } const std::string &get_name() const { return name; } + const std::string &get_system() const { return system; } + unsigned get_bits() const { return bits; } + const std::string &get_cpu() const { return cpu; } + bool match_name(const std::string &) const; bool is_native() const { return native; } - const std::string &get_prefix() const { return prefix; } -}; + bool is_cross() const { return !cross_prefix.empty(); } + + const std::string &get_cross_prefix() const { return cross_prefix; } -typedef std::map ArchMap; + const PatternList &get_shared_library_patterns() const { return sharedlib_patterns; } + const PatternList &get_static_library_patterns() const { return staticlib_patterns; } + const PatternList &get_executable_patterns() const { return executable_patterns; } + +private: + static void resolve_aliases(std::vector &); + void parse_specification(const std::string &); +}; #endif