[llvm-dev] Replace MCTargetOptionsCommandFlags.inc and CommandFlags.inc by runtime registration
Serge Guelton via llvm-dev
llvm-dev at lists.llvm.org
Wed Mar 18 04:11:43 PDT 2020
Hi Folks,
Commit ac1d23ed7de01fb3a18b340536842a419b504d86 introduces a change in the way
CodeGen and MC CommandFlags are handled. It's a change that may impact some
devs, so I'd better give a small notice here.
Basically previous approach was to bundle all options in a .inc file that
declares a bunch of llvm::cl options. This file was lying in include/llvm and
was to be included in client code. To avoid duplicate registration of llvm::cl
options, this was meant to be only included in binaries, and not libraries.
This rule of thumb was no respected by at least libclang-cpp and liblldCommon,
which led to situation like this:
https://bugzilla.redhat.com/show_bug.cgi?id=1756977#c5
And overall, having static options registred in « header » file is not the
panacea.
Current situation has moved to a more robust approach. options are registered
through static objects declared in the constructor of
codegen::RegisterCodeGenFlags that lies in libLLVMCodeGen. That way, when a static instance of
codegen::RegisterCodeGenFlags is created, all options are registered, and they
can only be registered once. If codegen::RegisterCodeGenFlags is not created,
the options are not registered.
Note that this approach could be used for *all* cl options.
More information about the llvm-dev
mailing list