[llvm-dev] TargetSelect.h and layering (original) (raw)

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Tue Nov 28 11:23:47 PST 2017


Alternatively we can really say this header is a textual header - it's included generally only once in a whole program, the functions are called only once, etc. Though that does seem a little unfortunate on principle but not much practical problem with it, I think. It'd be nice in theory to be able to depend on the right library, have that bring in the right dependencies, etc.

On Tue, Nov 28, 2017 at 11:15 AM David Blaikie <dblaikie at gmail.com> wrote:

So, I'm setting about trying to fix the layering of TargetSelect.h (& TargetRegistry.h, but haven't really got to its issues yet).

The issues can be demonstrated fairly plainly by moving any/all of TargetSelect.h's functions out of line. Pretty much all programs in LLVM fail to link because libSupport doesn't actually depend on all the targets, quite the opposite in fact. So, I set about creating a libLLVMAllTargets (for want of any better name/as a straw man) & wherever LLVMTARGETSTOBUILD was listed in a CMakeLists.txt LLVMLINKCOMPONENTS, I'd add in a dependence on AllTargets (& I moved all the function definitions in TargetSelect.h out of line to flush out/prove the dependencies were right). A few problems: It seems there are users of TargetSelect.h that want pretty much every granular split of the functionality possible. For example: * Some executables only depend on the asm parsers and only call InitializeAllAsmParsers (similarly for any other All*) - see the various AllTargetsAsmParsers and similar rules in cmake/modules/LLVM-Config.cmake * Some executables depend only on the native target support InitializeNativeTarget* functions - see the JIT tests and the "native" and "nativecodegen" rules in the above cmake file. So... - any ideas? Should we just give up some of this fine grained dependency control & say you can only depend on all targets? (or maybe "all targets or the native target" and I'll make two libraries - libLLVMAllTargets and libLLVMNativeTarget?) Do we keep the fine grained dependency & have libLLVM{AllTargets,NativeTarget}{AsmPrinters,AsmParsers,Descs,Disassemblers,Infos} ? Happy to make any of that happen, but curious what people might prefer. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171128/5cd2e2c7/attachment.html>



More information about the llvm-dev mailing list