[MinGW] Add --reproduce option

Differential Revision: https://reviews.llvm.org/D68382

git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@373705 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/MinGW/Driver.cpp b/MinGW/Driver.cpp
index be1b757..f981e6e 100644
--- a/MinGW/Driver.cpp
+++ b/MinGW/Driver.cpp
@@ -216,6 +216,8 @@
     add("-base:" + StringRef(a->getValue()));
   if (auto *a = args.getLastArg(OPT_map))
     add("-lldmap:" + StringRef(a->getValue()));
+  if (auto *a = args.getLastArg(OPT_reproduce))
+    add("-reproduce:" + StringRef(a->getValue()));
 
   if (auto *a = args.getLastArg(OPT_o))
     add("-out:" + StringRef(a->getValue()));
diff --git a/MinGW/Options.td b/MinGW/Options.td
index aa57cb3..17a964c 100644
--- a/MinGW/Options.td
+++ b/MinGW/Options.td
@@ -63,6 +63,7 @@
     HelpText<"Omit all symbol information from the output binary">;
 def strip_debug: F<"strip-debug">,
     HelpText<"Omit all debug information, but keep symbol information">;
+defm reproduce: Eq<"reproduce", "Write a tar file containing input files and command line options to reproduce link">;
 defm undefined: Eq<"undefined", "Include symbol in the link, if available">;
 def whole_archive: F<"whole-archive">,
     HelpText<"Include all object files for following archives">;
diff --git a/test/MinGW/driver.test b/test/MinGW/driver.test
index 8fa1199..b16c814 100644
--- a/test/MinGW/driver.test
+++ b/test/MinGW/driver.test
@@ -189,6 +189,9 @@
 RUN: ld.lld -### -m i386pep foo.o -Llibpath | FileCheck -check-prefix LIBPATH %s
 LIBPATH: -libpath:libpath
 
+RUN: ld.lld -### -m i386pep foo.o --reproduce=foo.tar | FileCheck -check-prefix REPRO %s
+REPRO: -reproduce:foo.tar
+
 RUN: ld.lld -### -m i386pep foo.o --no-insert-timestamp | FileCheck -check-prefix NOTIMESTAMP %s
 RUN: ld.lld -### -m i386pep foo.o --insert-timestamp --no-insert-timestamp | FileCheck -check-prefix NOTIMESTAMP %s
 NOTIMESTAMP: -timestamp:0