[ms] Add new option to llvm-lib: /llvmlibempty
authorEric Astor <epastor@google.com>
Thu, 30 Apr 2020 19:29:52 +0000 (15:29 -0400)
committerEric Astor <epastor@google.com>
Thu, 30 Apr 2020 19:30:56 +0000 (15:30 -0400)
Summary:
Add a new option (/llvmlibempty). If passed and llvm-lib does not give an error, it will create a valid output archive even if empty.

By default, llvm-lib mimicks lib.exe: if given no input files, it doesn't create its output file at all. This is incompatible with some build systems, so we add a command-line option to toggle this compatibility behavior.

Reviewed By: thakis

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

llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp
llvm/lib/ToolDrivers/llvm-lib/Options.td
llvm/test/tools/llvm-lib/no-inputs.test

index 3ea5312..69106bb 100644 (file)
@@ -292,8 +292,9 @@ int llvm::libDriverMain(ArrayRef<const char *> ArgsArr) {
     return 0;
   }
 
-  // If no input files, silently do nothing to match lib.exe.
-  if (!Args.hasArgNoClaim(OPT_INPUT))
+  // If no input files and not told otherwise, silently do nothing to match
+  // lib.exe
+  if (!Args.hasArgNoClaim(OPT_INPUT) && !Args.hasArg(OPT_llvmlibempty))
     return 0;
 
   if (Args.hasArg(OPT_lst)) {
index 7863196..5891e23 100644 (file)
@@ -18,6 +18,9 @@ def out    : P<"out", "Path to file to write output">;
 def llvmlibthin : F<"llvmlibthin">,
     HelpText<"Make .lib point to .obj files instead of copying their contents">;
 
+def llvmlibempty : F<"llvmlibempty">,
+    HelpText<"When given no contents, produce an empty .lib file">;
+
 def machine: P<"machine", "Specify target platform">;
 
 def help : F<"help">;
index 95d6555..c1b2eea 100644 (file)
@@ -1,2 +1,6 @@
 RUN: llvm-lib -out:%t.a
 RUN: test ! -e %t.a
+
+RUN: llvm-lib /llvmlibempty -out:%t.a
+RUN: FileCheck %s < %t.a
+CHECK: !<arch>