forked from OSchip/llvm-project
COFF: Handle LINK environment variable.
If LINK is defined and not empty, it's supposed to contain command line options. llvm-svn: 240900
This commit is contained in:
parent
b0a360bf15
commit
06cf3df2d5
|
@ -233,7 +233,7 @@ bool LinkerDriver::link(llvm::ArrayRef<const char *> ArgsArr) {
|
||||||
return llvm::libDriverMain(ArgsArr.slice(1)) == 0;
|
return llvm::libDriverMain(ArgsArr.slice(1)) == 0;
|
||||||
|
|
||||||
// Parse command line options.
|
// Parse command line options.
|
||||||
auto ArgsOrErr = Parser.parse(ArgsArr);
|
auto ArgsOrErr = Parser.parseLINK(ArgsArr);
|
||||||
if (auto EC = ArgsOrErr.getError()) {
|
if (auto EC = ArgsOrErr.getError()) {
|
||||||
llvm::errs() << EC.message() << "\n";
|
llvm::errs() << EC.message() << "\n";
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -44,6 +44,9 @@ public:
|
||||||
// Parses command line options.
|
// Parses command line options.
|
||||||
ErrorOr<llvm::opt::InputArgList> parse(llvm::ArrayRef<const char *> Args);
|
ErrorOr<llvm::opt::InputArgList> parse(llvm::ArrayRef<const char *> Args);
|
||||||
|
|
||||||
|
// Concatenate LINK environment varirable and given arguments and parse them.
|
||||||
|
ErrorOr<llvm::opt::InputArgList> parseLINK(llvm::ArrayRef<const char *> Args);
|
||||||
|
|
||||||
// Tokenizes a given string and then parses as command line options.
|
// Tokenizes a given string and then parses as command line options.
|
||||||
ErrorOr<llvm::opt::InputArgList> parse(StringRef S) {
|
ErrorOr<llvm::opt::InputArgList> parse(StringRef S) {
|
||||||
return parse(tokenize(S));
|
return parse(tokenize(S));
|
||||||
|
|
|
@ -577,6 +577,17 @@ ArgParser::parse(llvm::ArrayRef<const char *> Args) {
|
||||||
return parse(V);
|
return parse(V);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<llvm::opt::InputArgList>
|
||||||
|
ArgParser::parseLINK(ArrayRef<const char *> Args) {
|
||||||
|
// Concatenate LINK env and given arguments and parse them.
|
||||||
|
Optional<std::string> Env = Process::GetEnv("LINK");
|
||||||
|
if (!Env)
|
||||||
|
return parse(Args);
|
||||||
|
std::vector<const char *> V = tokenize(*Env);
|
||||||
|
V.insert(V.end(), Args.begin() + 1, Args.end());
|
||||||
|
return parse(V);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<const char *> ArgParser::tokenize(StringRef S) {
|
std::vector<const char *> ArgParser::tokenize(StringRef S) {
|
||||||
SmallVector<const char *, 16> Tokens;
|
SmallVector<const char *, 16> Tokens;
|
||||||
BumpPtrStringSaver Saver(AllocAux);
|
BumpPtrStringSaver Saver(AllocAux);
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# RUN: env LINK="-help -foo" lld -flavor link2 >& %t.log
|
||||||
|
# RUN: FileCheck %s < %t.log
|
||||||
|
|
||||||
|
CHECK: unknown argument: -foo
|
||||||
|
CHECK: OVERVIEW: LLVM Linker
|
Loading…
Reference in New Issue