X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farchitecture.cpp;h=e0b69667952c64c1ad2e70229e5c4e951a128d7f;hb=7e5ac6af8987bf12f3e338d00e96e8cb74f3534b;hp=cf888f00e24ede0d80ee16952fb5c63724c53738;hpb=82cf6fa5658ccbe612b989e50dfe4e88e617b980;p=builder.git diff --git a/source/architecture.cpp b/source/architecture.cpp index cf888f0..e0b6966 100644 --- a/source/architecture.cpp +++ b/source/architecture.cpp @@ -1,15 +1,8 @@ -/* $Id$ - -This file is part of builder -Copyright © 2007-2010 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include #ifndef WIN32 #include #endif -#include +#include #include #include "architecture.h" #include "builder.h" @@ -56,6 +49,7 @@ const char *aliases[] = { "i586", "pentium", "i686", "pentiumpro", + "x86_64", "athlon64", "win32", "windows", 0 }; @@ -104,16 +98,8 @@ Architecture::Architecture(Builder &b, const string &spec): if(type!=native_arch.type || system!=native_arch.system) cross_prefix = format("%s-%s", type, system); - else if(bits!=native_arch.bits) - { - build_info.cflags.push_back(format("-m%d", bits)); - build_info.ldflags.push_back(format("-m%d", bits)); - } - else + else if(bits==native_arch.bits) native = true; - - if(!cpu.empty()) - build_info.cflags.push_back(format("-march=%s", cpu)); } name = type; if(!cpu.empty()) @@ -151,7 +137,7 @@ std::string Architecture::get_tool(const string &t) const return native_arch.get_tool(t); } else - throw KeyError("Unknown tool", t); + throw invalid_argument("Unknown tool"); } bool Architecture::match_name(const string &pattern) const @@ -160,7 +146,9 @@ bool Architecture::match_name(const string &pattern) const for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) { string part = resolve_alias(*i); - if(part!=type && part!=cpu && part!=system) + if((part=="32" && bits==32) || (part=="64" && bits==64)) + ; + else if(part!=type && part!=cpu && part!=system) return false; } return true; @@ -188,7 +176,7 @@ void Architecture::parse_specification(const string &spec) if(part==types[j]) { if(!type.empty() && part!=type) - throw InvalidParameterValue("Conflicting type specification"); + throw invalid_argument("Conflicting type specification"); type = part; ok = true; } @@ -199,7 +187,7 @@ void Architecture::parse_specification(const string &spec) if(type.empty()) type = cpus[j+1]; else if(cpus[j+1]!=type) - throw InvalidParameterValue("Conflicting CPU specification"); + throw invalid_argument("Conflicting CPU specification"); cpu = part; ok = true; } @@ -218,7 +206,7 @@ void Architecture::parse_specification(const string &spec) } if(!ok) - throw InvalidParameterValue("Unrecognized part in arch specification: "+*i); + throw invalid_argument("Unrecognized part in arch specification: "+*i); } }