[lld] r186640 - Add -help option to Darwin Driver. Use grouping in Options table to better format help output
Nick Kledzik
kledzik at apple.com
Thu Jul 18 18:02:49 PDT 2013
Author: kledzik
Date: Thu Jul 18 20:02:49 2013
New Revision: 186640
URL: http://llvm.org/viewvc/llvm-project?rev=186640&view=rev
Log:
Add -help option to Darwin Driver. Use grouping in Options table to better format help output
Modified:
lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h
lld/trunk/lib/Driver/DarwinLdDriver.cpp
lld/trunk/lib/Driver/DarwinOptions.td
lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
Modified: lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h?rev=186640&r1=186639&r2=186640&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h (original)
+++ lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h Thu Jul 18 20:02:49 2013
@@ -72,6 +72,8 @@ public:
void setArch(Arch arch) { _arch = arch; }
bool setOS(OS os, StringRef minOSVersion);
bool minOS(StringRef mac, StringRef iOS) const;
+ void setDoNothing(bool value) { _doNothing = value; }
+ bool doNothing() const { return _doNothing; }
private:
virtual Writer &writer() const;
@@ -92,6 +94,7 @@ private:
uint32_t _outputFileType; // e.g MH_EXECUTE
bool _outputFileTypeStatic; // Disambiguate static vs dynamic prog
+ bool _doNothing; // for -help and -v which just print info
Arch _arch;
OS _os;
PackedVersion _osMinVersion;
Modified: lld/trunk/lib/Driver/DarwinLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/DarwinLdDriver.cpp?rev=186640&r1=186639&r2=186640&view=diff
==============================================================================
--- lld/trunk/lib/Driver/DarwinLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/DarwinLdDriver.cpp Thu Jul 18 20:02:49 2013
@@ -75,6 +75,8 @@ bool DarwinLdDriver::linkMachO(int argc,
MachOTargetInfo info;
if (parse(argc, argv, info, diagnostics))
return true;
+ if ( info.doNothing() )
+ return false;
return link(info, diagnostics);
}
@@ -193,6 +195,16 @@ bool DarwinLdDriver::parse(int argc, con
info.appendInputFile((*it)->getValue());
}
+ // Handle -help
+ if (parsedArgs->getLastArg(OPT_help)) {
+ table.PrintHelp(llvm::outs(), argv[0], "LLVM Darwin Linker", false);
+ // If only -help on command line, don't try to do any linking
+ if ( argc == 2 ) {
+ info.setDoNothing(true);
+ return false;
+ }
+ }
+
// Validate the combination of options used.
if (info.validate(diagnostics))
return true;
Modified: lld/trunk/lib/Driver/DarwinOptions.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/DarwinOptions.td?rev=186640&r1=186639&r2=186640&view=diff
==============================================================================
--- lld/trunk/lib/Driver/DarwinOptions.td (original)
+++ lld/trunk/lib/Driver/DarwinOptions.td Thu Jul 18 20:02:49 2013
@@ -1,31 +1,55 @@
include "llvm/Option/OptParser.td"
+
// output kinds
-def relocatable : Flag<["-"], "r">, HelpText<"create relocatable output">;
-def static : Flag<["-"], "static">;
-def dynamic : Flag<["-"], "dynamic">;
-def dylib : Flag<["-"], "dylib">;
-def bundle : Flag<["-"], "bundle">;
-def execute : Flag<["-"], "execute">;
-def preload : Flag<["-"], "preload">;
-
-// linking options
-def dead_strip : Flag<["-"], "dead_strip">;
-def entry : Separate<["-"], "e">, HelpText<"entry symbol name">;
-def mllvm : Separate<["-"], "mllvm">, HelpText<"Options to pass to LLVM">;
-def arch : Separate<["-"], "arch">, HelpText<"architecture">;
+def grp_kind : OptionGroup<"outs">, HelpText<"OUTPUT KIND">;
+def relocatable : Flag<["-"], "r">,
+ HelpText<"Create relocatable object file">, Group<grp_kind>;
+def static : Flag<["-"], "static">,
+ HelpText<"Create static executable">, Group<grp_kind>;
+def dynamic : Flag<["-"], "dynamic">,
+ HelpText<"Create dynamic executable (default)">,Group<grp_kind>;
+def dylib : Flag<["-"], "dylib">,
+ HelpText<"Create dynamic library">, Group<grp_kind>;
+def bundle : Flag<["-"], "bundle">,
+ HelpText<"Create dynamic bundle">, Group<grp_kind>;
+def execute : Flag<["-"], "execute">,
+ HelpText<"Create main executable (default)">, Group<grp_kind>;
+def preload : Flag<["-"], "preload">,
+ HelpText<"Create preload">, Group<grp_kind>;
+
+// optimizations
+def grp_opts : OptionGroup<"opts">, HelpText<"OPTIMIZATIONS">;
+def dead_strip : Flag<["-"], "dead_strip">,
+ HelpText<"Remove unreference code and data">, Group<grp_opts>;
def macosx_version_min : Separate<["-"], "macosx_version_min">,
- HelpText<"min Mac OS X version">;
+ HelpText<"Minimum Mac OS X version">, Group<grp_opts>;
def ios_version_min : Separate<["-"], "ios_version_min">,
- HelpText<"min iOS version">;
+ HelpText<"Minimum iOS version">, Group<grp_opts>;
def ios_simulator_version_min : Separate<["-"], "ios_simulator_version_min">,
- HelpText<"min iOS simulator version">;
-def all_load : Flag<["-"], "all_load">;
-
-// search options
-def L : Joined<["-"], "L">;
-
-// inputs and outputs
-def output : Separate<["-"], "o">, HelpText<"output file name">;
-
+ HelpText<"Minimum iOS simulator version">, Group<grp_opts>;
+def mllvm : Separate<["-"], "mllvm">,
+ HelpText<"Options to pass to LLVM during LTO">, Group<grp_opts>;
+
+// main executable options
+def grp_main : OptionGroup<"opts">, HelpText<"MAIN EXECUTABLE OPTIONS">;
+def entry : Separate<["-"], "e">, HelpText<"entry symbol name">,Group<grp_main>;
+
+// dylib executable options
+def grp_dylib : OptionGroup<"opts">, HelpText<"DYLIB EXECUTABLE OPTIONS">;
+
+// library options
+def grp_libs : OptionGroup<"libs">, HelpText<"LIBRARY OPTIONS">;
+def L : Joined<["-"], "L">,
+ HelpText<"Add directory to library search path">, Group<grp_libs>;
+def all_load : Flag<["-"], "all_load">,
+ HelpText<"Forces all members of all static libraries to be loaded">,
+ Group<grp_libs>;
+
+
+// general options
+def output : Separate<["-"], "o">, HelpText<"Output file path">;
+def arch : Separate<["-"], "arch">, HelpText<"Architecture to link">;
+// extras
+def help : Flag<["-"], "help">;
Modified: lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp?rev=186640&r1=186639&r2=186640&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp Thu Jul 18 20:02:49 2013
@@ -89,6 +89,7 @@ bool MachOTargetInfo::PackedVersion::ope
MachOTargetInfo::MachOTargetInfo()
: _outputFileType(mach_o::MH_EXECUTE)
, _outputFileTypeStatic(false)
+ , _doNothing(false)
, _arch(arch_unknown)
, _os(OS::macOSX)
, _osMinVersion("0.0")
@@ -182,6 +183,11 @@ bool MachOTargetInfo::addUnixThreadLoadC
}
bool MachOTargetInfo::validateImpl(raw_ostream &diagnostics) {
+ if (_inputFiles.empty()) {
+ diagnostics << "no object files specified\n";
+ return true;
+ }
+
if ((_outputFileType == mach_o::MH_EXECUTE) && _entrySymbolName.empty()) {
if (_outputFileTypeStatic) {
_entrySymbolName = "start";
More information about the llvm-commits
mailing list