<div dir="ltr">I submitted this yesterday in r274171.  I think this allows for a more intuitive way to structure the options of command line tools.  It's optional and if you do nothing llvm::cl will work as it always has for you.<div><br></div><div>Probably self explanatory, but here's some output of --help from llvm-pdbdump, which was updated to use subcommands in r274247, in case anyone wants to see what this looks like.</div><div><br></div><div><div>D:\src\llvmbuild\clang-selfhost>bin\llvm-pdbdump --help</div><div>OVERVIEW: LLVM PDB Dumper</div><div><br></div><div>USAGE: llvm-pdbdump.exe [subcommand] [options]</div><div><br></div><div>SUBCOMMANDS:</div><div><br></div><div>  pdb2yaml - Generate a detailed YAML description of a PDB File</div><div>  pretty   - Dump semantic information about types and symbols</div><div>  raw      - Dump raw structure of the PDB file</div><div>  yaml2pdb - Generate a PDB file from a YAML description</div><div><br></div><div>  Type "llvm-pdbdump.exe <subcommand> -help" to get more help on a specific subcommand</div><div><br></div><div>OPTIONS:</div><div><br></div><div>Generic Options:</div><div><br></div><div>  -help      - Display available options (-help-hidden for more)</div><div>  -help-list - Display list of available options (-help-list-hidden for more)</div><div>  -version   - Display the version of this program</div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><div>D:\src\llvmbuild\clang-selfhost>bin\llvm-pdbdump pretty --help</div><div>OVERVIEW: LLVM PDB Dumper</div><div><br></div><div>SUBCOMMAND 'pretty': Dump semantic information about types and symbols</div><div><br></div><div>USAGE: llvm-pdbdump.exe pretty [options] <input PDB files></div><div><br></div><div>OPTIONS:</div><div><br></div><div>Filtering Options:</div><div><br></div><div>  -exclude-compilands=<string> - Exclude compilands by regular expression</div><div>  -exclude-symbols=<string>    - Exclude symbols by regular expression</div><div>  -exclude-types=<string>      - Exclude types by regular expression</div><div>  -include-compilands=<string> - Include only compilands those which match a regular expression</div><div>  -include-symbols=<string>    - Include only symbols which match a regular expression</div><div>  -include-types=<string>      - Include only types which match a regular expression</div><div>  -no-class-definitions        - Don't display full class definitions</div><div>  -no-compiler-generated       - Don't show compiler generated types and symbols</div><div>  -no-enum-definitions         - Don't display full enum definitions</div><div>  -no-system-libs              - Don't show symbols from system libraries</div><div><br></div><div>Generic Options:</div><div><br></div><div>  -help                        - Display available options (-help-hidden for more)</div><div>  -help-list                   - Display list of available options (-help-list-hidden for more)</div><div><br></div><div>Other Options:</div><div><br></div><div>  -load-address=<uint>         - Assume the module is loaded at the specified address</div><div><br></div><div>Symbol Type Options:</div><div><br></div><div>  -all                         - Implies all other options in 'Symbol Types' category</div><div>  -compilands                  - Display compilands</div><div>  -externals                   - Dump external symbols</div><div>  -globals                     - Dump global symbols</div><div>  -lines                       - Line tables</div><div>  -symbols                     - Display symbols for each compiland</div><div>  -types                       - Display types</div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><div>D:\src\llvmbuild\clang-selfhost>bin\llvm-pdbdump pdb2yaml --help</div><div>OVERVIEW: LLVM PDB Dumper</div><div><br></div><div>SUBCOMMAND 'pdb2yaml': Generate a detailed YAML description of a PDB File</div><div><br></div><div>USAGE: llvm-pdbdump.exe pdb2yaml [options] <input PDB file></div><div><br></div><div>OPTIONS:</div><div><br></div><div>General options:</div><div><br></div><div>  -stream-directory - Dump each stream's block map (implies -stream-metadata)</div><div>  -stream-metadata  - Dump the number of streams and each stream's size</div><div><br></div><div>Generic Options:</div><div><br></div><div>  -help             - Display available options (-help-hidden for more)</div><div>  -help-list        - Display list of available options (-help-list-hidden for more)</div></div></div>