+#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)
{
Task *GnuCompiler::run(const Target &target) const
{
const ObjectFile &object = dynamic_cast<const ObjectFile &>(target);
- const Component &comp = *object.get_component();
ExternalTask::Arguments argv;
argv.push_back(executable->get_path().str());
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");
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();
- FS::Path work_dir = comp.get_package().get_source_directory();
+ FS::Path work_dir = object.get_component()->get_package().get_source_directory();
argv.push_back("-o");
argv.push_back(relative(obj_path, work_dir).str());