COFF: Handle LINK environment variable.
authorRui Ueyama <ruiu@google.com>
Sun, 28 Jun 2015 02:35:31 +0000 (02:35 +0000)
committerRui Ueyama <ruiu@google.com>
Sun, 28 Jun 2015 02:35:31 +0000 (02:35 +0000)
If LINK is defined and not empty, it's supposed to contain
command line options.

llvm-svn: 240900

lld/COFF/Driver.cpp
lld/COFF/Driver.h
lld/COFF/DriverUtils.cpp
lld/test/COFF/linkenv.test [new file with mode: 0644]

index f67de4c..694f99f 100644 (file)
@@ -233,7 +233,7 @@ bool LinkerDriver::link(llvm::ArrayRef<const char *> ArgsArr) {
     return llvm::libDriverMain(ArgsArr.slice(1)) == 0;
 
   // Parse command line options.
-  auto ArgsOrErr = Parser.parse(ArgsArr);
+  auto ArgsOrErr = Parser.parseLINK(ArgsArr);
   if (auto EC = ArgsOrErr.getError()) {
     llvm::errs() << EC.message() << "\n";
     return false;
index 4258cca..43e8005 100644 (file)
@@ -44,6 +44,9 @@ public:
   // Parses command line options.
   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.
   ErrorOr<llvm::opt::InputArgList> parse(StringRef S) {
     return parse(tokenize(S));
index ac186ee..464afb2 100644 (file)
@@ -577,6 +577,17 @@ ArgParser::parse(llvm::ArrayRef<const char *> Args) {
   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) {
   SmallVector<const char *, 16> Tokens;
   BumpPtrStringSaver Saver(AllocAux);
diff --git a/lld/test/COFF/linkenv.test b/lld/test/COFF/linkenv.test
new file mode 100644 (file)
index 0000000..25253c6
--- /dev/null
@@ -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