summaryrefslogtreecommitdiff
path: root/src/task_ld.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/task_ld.cc')
-rw-r--r--src/task_ld.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/task_ld.cc b/src/task_ld.cc
index c8cd1ea..dbe17c5 100644
--- a/src/task_ld.cc
+++ b/src/task_ld.cc
@@ -115,6 +115,7 @@ int TaskLD::runInner()
}
append(args, ld_option(toolchain, ctor::ld_opt::output, targetFile().string()));
+ append(args, to_strings(toolchain, {ctor::toolchain::msvc, ctor::ld_opt::custom, "/nologo"}));
{ // Write flags to file.
std::ofstream flagsStream(flagsFile);
@@ -126,8 +127,27 @@ int TaskLD::runInner()
std::cout << "LD => " << targetFile().string() << std::endl;
}
- auto tool = compiler();
+ std::string tool;
const auto& c = ctor::get_configuration();
+
+ if(toolchain == ctor::toolchain::gcc ||
+ toolchain == ctor::toolchain::clang)
+ {
+ tool = compiler();
+ }
+ else // msvc
+ {
+ switch(outputSystem())
+ {
+ case ctor::output_system::host:
+ tool = c.get(ctor::cfg::host_ld, "/usr/bin/ld");
+ break;
+ case ctor::output_system::build:
+ tool = c.get(ctor::cfg::build_ld, "/usr/bin/ld");
+ break;
+ }
+ }
+
return execute(settings, tool, args, c.env, is_self);
}
@@ -196,7 +216,6 @@ std::string TaskLD::flagsString() const
flagsStr += str;
}
}
- flagsStr += "\n";
for(const auto& dep : config.depends)
{