[lld] r182824 - [WinLink] Add -subsystem and -out command line option parsing.
Rui Ueyama
ruiu at google.com
Tue May 28 22:07:49 PDT 2013
Author: ruiu
Date: Wed May 29 00:07:49 2013
New Revision: 182824
URL: http://llvm.org/viewvc/llvm-project?rev=182824&view=rev
Log:
[WinLink] Add -subsystem and -out command line option parsing.
The code to actually consume these flags will be added soon.
Modified:
lld/trunk/include/lld/ReaderWriter/PECOFFTargetInfo.h
lld/trunk/lib/Driver/WinLinkDriver.cpp
lld/trunk/lib/Driver/WinLinkOptions.td
Modified: lld/trunk/include/lld/ReaderWriter/PECOFFTargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/PECOFFTargetInfo.h?rev=182824&r1=182823&r2=182824&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/PECOFFTargetInfo.h (original)
+++ lld/trunk/include/lld/ReaderWriter/PECOFFTargetInfo.h Wed May 29 00:07:49 2013
@@ -14,13 +14,14 @@
#include "lld/ReaderWriter/Reader.h"
#include "lld/ReaderWriter/Writer.h"
+#include "llvm/Support/COFF.h"
#include "llvm/Support/ErrorHandling.h"
namespace lld {
class PECOFFTargetInfo : public TargetInfo {
public:
- PECOFFTargetInfo() {}
+ PECOFFTargetInfo() : _subsystem(llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN) {}
virtual error_code parseFile(
std::unique_ptr<MemoryBuffer> &mb,
@@ -31,10 +32,20 @@ public:
virtual void addPasses(PassManager &pm) const {}
+ void setSubsystem(llvm::COFF::WindowsSubsystem subsystem) {
+ _subsystem = subsystem;
+ }
+
+ llvm::COFF::WindowsSubsystem getSubsystem() {
+ return _subsystem;
+ }
+
virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str) const;
virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const;
private:
+ llvm::COFF::WindowsSubsystem _subsystem;
+
mutable std::unique_ptr<Reader> _reader;
mutable std::unique_ptr<Writer> _writer;
};
Modified: lld/trunk/lib/Driver/WinLinkDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/WinLinkDriver.cpp?rev=182824&r1=182823&r2=182824&view=diff
==============================================================================
--- lld/trunk/lib/Driver/WinLinkDriver.cpp (original)
+++ lld/trunk/lib/Driver/WinLinkDriver.cpp Wed May 29 00:07:49 2013
@@ -13,6 +13,7 @@
///
//===----------------------------------------------------------------------===//
+#include "llvm/ADT/StringSwitch.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/Option.h"
@@ -62,6 +63,15 @@ int findDoubleDash(int argc, const char
return -1;
}
+// Parses -subsystem command line option.
+llvm::COFF::WindowsSubsystem strToWinSubsystem(std::string str) {
+ std::string arg(StringRef(str).lower());
+ return llvm::StringSwitch<llvm::COFF::WindowsSubsystem>(arg)
+ .Case("windows", llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI)
+ .Case("console", llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI)
+ .Default(llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN);
+}
+
} // namespace
@@ -101,6 +111,13 @@ bool WinLinkDriver::parse(int argc, cons
return true;
}
+ // Show warning for unknown arguments
+ for (auto it = parsedArgs->filtered_begin(OPT_UNKNOWN),
+ ie = parsedArgs->filtered_end(); it != ie; ++it) {
+ diagnostics << "warning: ignoring unknown argument: "
+ << (*it)->getAsString(*parsedArgs) << "\n";
+ }
+
// Copy -mllvm
for (llvm::opt::arg_iterator it = parsedArgs->filtered_begin(OPT_mllvm),
ie = parsedArgs->filtered_end();
@@ -108,6 +125,21 @@ bool WinLinkDriver::parse(int argc, cons
info.appendLLVMOption((*it)->getValue());
}
+ // Handle -subsystem
+ if (llvm::opt::Arg *arg = parsedArgs->getLastArg(OPT_subsystem)) {
+ llvm::COFF::WindowsSubsystem subsystem = strToWinSubsystem(arg->getValue());
+ if (subsystem == llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN) {
+ diagnostics << "error: unknown subsystem name: "
+ << arg->getValue() << "\n";
+ return true;
+ }
+ info.setSubsystem(subsystem);
+ }
+
+ // Hanlde -out
+ if (llvm::opt::Arg *outpath = parsedArgs->getLastArg(OPT_out))
+ info.setOutputPath(outpath->getValue());
+
// Add input files
for (llvm::opt::arg_iterator it = parsedArgs->filtered_begin(OPT_INPUT),
ie = parsedArgs->filtered_end();
Modified: lld/trunk/lib/Driver/WinLinkOptions.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/WinLinkOptions.td?rev=182824&r1=182823&r2=182824&view=diff
==============================================================================
--- lld/trunk/lib/Driver/WinLinkOptions.td (original)
+++ lld/trunk/lib/Driver/WinLinkOptions.td Wed May 29 00:07:49 2013
@@ -5,5 +5,13 @@ include "llvm/Option/OptParser.td"
def mllvm : Separate<["-", "/"], "mllvm">,
HelpText<"Options to pass to LLVM">;
+def out : Separate<["-", "/"], "out">,
+ HelpText<"Path to file to write output">;
+def out_c : Joined<["-", "/"], "out:">, Alias<out>;
+
+def subsystem : Separate<["-", "/"], "subsystem">,
+ HelpText<"Specify subsystem">;
+def subsystem_c: Joined<["-", "/"], "subsystem:">, Alias<subsystem>;
+
def help : Flag<["-", "/"], "help">;
def help_q : Flag<["-", "/"], "?">, Alias<help>;
More information about the llvm-commits
mailing list