]> git.tdb.fi Git - builder.git/blobdiff - source/gnucompiler.cpp
Add more recognized architectures
[builder.git] / source / gnucompiler.cpp
index a86cb59d0567b06f4e88c07a72e2ddbd4dd17d49..6daa99d81a565c482c05f6a49127986d0a457ead 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/core/maputils.h>
 #include <msp/fs/dir.h>
 #include <msp/fs/utils.h>
 #include <msp/strings/format.h>
 using namespace std;
 using namespace Msp;
 
+namespace {
+
+const char *cpus[] =
+{
+       "athlonxp", "athlon-xp",
+       "armv7a",   "armv7-a",
+       0
+};
+
+}
+
 GnuCompiler::GnuCompiler(Builder &b, const Architecture &a, const string &t, const FS::Path &sysroot):
        Tool(b, a, t)
 {
@@ -89,6 +101,12 @@ Task *GnuCompiler::run(const Target &target) const
        BuildInfo binfo;
        target.collect_build_info(binfo);
 
+       string tag_for_std = (tag=="OBJC" ? "CC" : tag);
+       if(binfo.standards.count(tag_for_std))
+               argv.push_back("-std="+get_item(binfo.standards, tag_for_std));
+       if(tag=="OBJC" && binfo.standards.count(tag))
+               argv.push_back("-fobjc-std="+get_item(binfo.standards, tag));
+
        if(binfo.warning_level>=1)
        {
                argv.push_back("-Wall");
@@ -158,9 +176,17 @@ Task *GnuCompiler::run(const Target &target) const
        if(architecture->is_native() && architecture->get_bits()!=native_arch.get_bits())
                argv.push_back(format("-m%d", architecture->get_bits()));
 
-       const string &cpu = architecture->get_cpu();
+       string cpu = architecture->get_cpu();
        if(!cpu.empty())
+       {
+               for(unsigned i=0; cpus[i]; i+=2)
+                       if(cpu==cpus[i])
+                       {
+                               cpu = cpus[i+1];
+                               break;
+                       }
                argv.push_back("-march="+cpu);
+       }
 
        FS::Path obj_path = object.get_path();
        FS::Path src_path = object.get_source().get_path();