0
};
+const char *fpus[] =
+{
+ "387", "x86",
+ "sse", "x86",
+ "vfpv3", "arm",
+ "neon", "arm",
+ 0
+};
+
const char *systems[] =
{
"linux",
name = type;
if(!cpu.empty())
name += format("-%s", cpu);
+ if(!fpu.empty())
+ name += format("-%s", fpu);
name += format("-%d-%s", bits, system);
if(system=="windows")
{
if((*i=="32" && bits==32) || (*i=="64" && bits==64))
;
- else if(*i!=type && *i!=cpu && *i!=system)
+ else if(*i!=type && *i!=cpu && *i!=fpu && *i!=system)
return negate;
}
return !negate;
ok = true;
}
+ for(unsigned j=0; (!ok && fpus[j]); j+=2)
+ if(*i==fpus[j])
+ {
+ if(fpus[j+1]!=type)
+ throw invalid_argument("Conflicting FPU specification");
+ fpu = *i;
+ ok = true;
+ }
+
for(unsigned j=0; (!ok && systems[j]); ++j)
if(*i==systems[j])
{
Builder &builder;
std::string type;
std::string cpu;
+ std::string fpu;
std::string system;
unsigned bits;
std::string name;
const std::string &get_system() const { return system; }
unsigned get_bits() const { return bits; }
const std::string &get_cpu() const { return cpu; }
+ const std::string &get_fpu() const { return fpu; }
bool match_name(const std::string &) const;
std::string best_match(const std::list<std::string> &) const;
bool is_native() const { return native; }
argv.push_back("-march="+cpu);
}
+ if(!architecture->get_fpu().empty())
+ {
+ if(architecture->get_type()=="x86")
+ {
+ argv.push_back("-mfpmath="+architecture->get_fpu());
+ if(architecture->get_fpu()=="sse")
+ argv.push_back("-msse2");
+ }
+ else if(architecture->get_type()=="arm")
+ {
+ argv.push_back("-mfpu="+architecture->get_fpu());
+ argv.push_back("-mfloat-abi=softfp");
+ }
+ }
+
FS::Path obj_path = object.get_path();
FS::Path src_path = object.get_source().get_path();
FS::Path work_dir = object.get_component()->get_package().get_source_directory();