mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-03 16:41:06 +03:00
Add -linker command-line option (#2386)
To set the linker executable for MSVC targets (e.g., `lld-link`) or the `-fuse-ld` arg for the gcc linking command-line for the other targets.
This commit is contained in:
parent
fa3a78174f
commit
aeaf35c42f
4 changed files with 26 additions and 3 deletions
|
@ -52,6 +52,7 @@ private:
|
|||
virtual void addFuzzLinkFlags();
|
||||
virtual void addCppStdlibLinkFlags();
|
||||
|
||||
virtual void addLinker();
|
||||
virtual void addUserSwitches();
|
||||
void addDefaultLibs();
|
||||
virtual void addTargetFlags();
|
||||
|
@ -366,6 +367,7 @@ void ArgsBuilder::build(llvm::StringRef outputPath,
|
|||
addLTOLinkFlags();
|
||||
#endif
|
||||
|
||||
addLinker();
|
||||
addUserSwitches();
|
||||
|
||||
// libs added via pragma(lib, libname)
|
||||
|
@ -390,6 +392,13 @@ void ArgsBuilder::build(llvm::StringRef outputPath,
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void ArgsBuilder::addLinker() {
|
||||
if (!opts::linker.empty())
|
||||
args.push_back("-fuse-ld=" + opts::linker);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void ArgsBuilder::addUserSwitches() {
|
||||
// additional linker and cc switches (preserve order across both lists)
|
||||
for (unsigned ilink = 0, icc = 0;;) {
|
||||
|
@ -486,6 +495,8 @@ void ArgsBuilder::addTargetFlags() {
|
|||
class LdArgsBuilder : public ArgsBuilder {
|
||||
void addSanitizers() override {}
|
||||
|
||||
void addLinker() override {}
|
||||
|
||||
void addUserSwitches() override {
|
||||
if (!opts::ccSwitches.empty()) {
|
||||
warning(Loc(), "Ignoring -Xcc options");
|
||||
|
|
|
@ -62,8 +62,6 @@ int linkObjToBinaryMSVC(llvm::StringRef outputPath, bool useInternalLinker,
|
|||
windows::setupMsvcEnvironment();
|
||||
#endif
|
||||
|
||||
const std::string tool = "link.exe";
|
||||
|
||||
// build arguments
|
||||
std::vector<std::string> args;
|
||||
|
||||
|
@ -180,5 +178,9 @@ int linkObjToBinaryMSVC(llvm::StringRef outputPath, bool useInternalLinker,
|
|||
#endif
|
||||
|
||||
// try to call linker
|
||||
return executeToolAndWait(tool, args, global.params.verbose);
|
||||
std::string linker = opts::linker;
|
||||
if (linker.empty())
|
||||
linker = "link.exe";
|
||||
|
||||
return executeToolAndWait(linker, args, global.params.verbose);
|
||||
}
|
||||
|
|
|
@ -22,6 +22,12 @@
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace opts {
|
||||
llvm::cl::opt<std::string>
|
||||
linker("linker", llvm::cl::ZeroOrMore, llvm::cl::desc("Linker to use"),
|
||||
llvm::cl::value_desc("lld-link|lld|gold|bfd|..."));
|
||||
}
|
||||
|
||||
static llvm::cl::opt<std::string>
|
||||
gcc("gcc", llvm::cl::desc("GCC to use for assembling and linking"),
|
||||
llvm::cl::Hidden, llvm::cl::ZeroOrMore);
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
||||
namespace opts {
|
||||
extern llvm::cl::opt<std::string> linker;
|
||||
}
|
||||
|
||||
std::string getGcc();
|
||||
void appendTargetArgsForGcc(std::vector<std::string> &args);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue