[llvm-dev] Supporting sub commands in LLVM command line tools

Mehdi Amini via llvm-dev llvm-dev at lists.llvm.org
Fri Jun 17 23:37:41 PDT 2016

> On Jun 17, 2016, at 11:20 PM, Justin Bogner <mail at justinbogner.com> wrote:
> Mehdi Amini via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> writes:
>> Hi,
>> I haven't looked at the implementation, but conceptually this looks nice!
>> We talked internally about an option to build something like a single "llvm"
>> binary that would be symlinked by opt/llc/etc. So that when you invoke `opt`,
>> it would run the same binary but internally the right subcommand set of
>> options would be used. The downside is that running `ninja llvm-mc` would
>> depends on every LLVM libraries though.
> Why would you want that?

I can see three reasons right now:

1) Disk space: the “bin” directory for just llvm (no clang, libc++, etc.) after running dsymutil takes 2.8GB right now.
2) running dsymutil on every binary is taking quite a long time
3) LTO build time would be significantly faster ;)

> I build specific tools an order of magnitude
> more often than building all of them, so personally I would consider
> this downside really critical.

This would be a build settings, you wouldn’t lose anything if you don’t opt-in.


>> This is a bit orthogonal to what you’re doing, but I assume your patch would
>> help to build such an option right?
>>>> Mehdi
>>    On Jun 17, 2016, at 5:00 PM, Zachary Turner via llvm-dev <
>>    llvm-dev at lists.llvm.org> wrote:
>>    Hi all,
>>    I've written a patch to support subcommands in llvm command line tools. 
>>    This potentially has broad interest (either positive or negative), so I
>>    figured I'd give a heads up here instead of just on llvm-commits.
>>    The motivation for this is that we frequently have tools with incompatible
>>    sets of command line options.  I ran into this on llvm-pdbdump and was
>>    debating breaking off some of the functionality into a separate tool to
>>    make the command line interface more sensible, and to prevent people
>>    getting confused about which options could be used with which other
>>    options.
>>    A better approach to this, in my opinion, is the use of sub commands. 
>>    This way all the options that can be used together are grouped together,
>>    and you simply can't specify incompatible options at the same time.
>>    There is more information in the patch, including some examples of what it
>>    looks like, so if you're interested in this or have a strong opinion one
>>    way or the other, let me know.
>>    Note that this is an **opt in** feature, and if you continue using cl::opt
>>    as you always have, this change should be invisible to you.
>>    _______________________________________________
>>    LLVM Developers mailing list
>>    llvm-dev at lists.llvm.org
>>    http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160617/c1821087/attachment.html>

More information about the llvm-dev mailing list