using namespace std;
using namespace Msp;
-GnuCompiler::GnuCompiler(Builder &b, const string &t, const string &n):
- Tool(b, t),
- name(n)
+GnuCompiler::GnuCompiler(Builder &b, const Architecture &a, const string &t, const string &c):
+ Tool(b, a, t)
{
- const Architecture &arch = builder.get_current_arch();
- if(arch.is_native())
+ string command = c;
+ if(architecture->is_cross())
+ command = format("%s-%s", architecture->get_cross_prefix(), command);
+ executable = builder.get_vfs().find_binary(command);
+
+ if(architecture->is_native())
system_path.push_back("/usr/include");
else
- system_path.push_back("/usr/"+arch.get_cross_prefix()+"/include");
+ system_path.push_back("/usr/"+architecture->get_cross_prefix()+"/include");
}
-Target *GnuCompiler::create_target(const list<Target *> &sources, const std::string &) const
+Target *GnuCompiler::create_target(const list<Target *> &sources, const string &) const
{
if(sources.size()!=1)
throw invalid_argument("GnuCCompiler::create_target");
Task *GnuCompiler::run(const Target &target) const
{
const ObjectFile &object = dynamic_cast<const ObjectFile &>(target);
- const Component &comp = object.get_component();
+ const Component &comp = *object.get_component();
ExternalTask::Arguments argv;
- argv.push_back(name);
+ argv.push_back(executable->get_path().str());
argv.push_back("-c");
const BuildInfo &binfo = comp.get_build_info();
if(comp.get_type()==Component::LIBRARY)
argv.push_back("-fPIC");
- const Architecture &arch = builder.get_current_arch();
const Architecture &native_arch = builder.get_native_arch();
- if(arch.get_bits()!=native_arch.get_bits())
- argv.push_back(format("-m%d", arch.get_bits()));
+ if(architecture->get_bits()!=native_arch.get_bits())
+ argv.push_back(format("-m%d", architecture->get_bits()));
- const string &cpu = arch.get_cpu();
+ const string &cpu = architecture->get_cpu();
if(!cpu.empty())
argv.push_back("-march="+cpu);