summaryrefslogtreecommitdiff
path: root/task_ld.cc
diff options
context:
space:
mode:
Diffstat (limited to 'task_ld.cc')
-rw-r--r--task_ld.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/task_ld.cc b/task_ld.cc
index 874ec6d..7bf68ed 100644
--- a/task_ld.cc
+++ b/task_ld.cc
@@ -40,10 +40,12 @@ TaskLD::TaskLD(const BuildConfiguration& config,
const Settings& settings,
const std::string& target,
const std::vector<std::string>& objects)
- : Task(addPrefix(config.depends, settings))
+ : Task(config, addPrefix(config.depends, settings))
, config(config)
, settings(settings)
{
+ target_type = TargetType::Executable;
+
targetFile = settings.builddir;
targetFile /= target;
for(const auto& object : objects)
@@ -62,6 +64,17 @@ TaskLD::TaskLD(const BuildConfiguration& config,
flagsFile = settings.builddir / targetFile.stem();
flagsFile += ".flags";
+
+ target_type = TargetType::Executable;
+ _language = Language::C;
+ for(const auto& source : config.sources)
+ {
+ std::filesystem::path sourceFile(source);
+ if(sourceFile.extension().string() != ".c")
+ {
+ _language = Language::Cpp;
+ }
+ }
}
bool TaskLD::dirtyInner()
@@ -146,7 +159,13 @@ int TaskLD::runInner()
std::cout << "LD => " << targetFile.string() << "\n";
}
- return execute("/usr/bin/g++", args, settings.verbose > 0);
+ auto tool = getConfiguration("host-cpp", "/usr/bin/g++");
+ if(language() == Language::C)
+ {
+ tool = getConfiguration("host-cc", "/usr/bin/gcc");
+ }
+
+ return execute(tool, args, settings.verbose > 0);
}
int TaskLD::clean()