Out of tree targets

Hey all,

Quick query on out of tree target support - at present I can drop a folder Foo into /lib/Target/Foo and use the CMake option LLVM_EXPERIMENTAL_TARGETS_TO_BUILD to pick up my target. The issue is that I still need to patch the one LLVMBuild.txt file in /lib/Target with;

iff --git a/lib/Target/LLVMBuild.txt b/lib/Target/LLVMBuild.txt
index 4112046..6e42cbe 100644
--- a/lib/Target/LLVMBuild.txt
+++ b/lib/Target/LLVMBuild.txt
@@ -16,7 +16,7 @@

-subdirectories = ARM AArch64 BPF CppBackend Hexagon MSP430 NVPTX Mips PowerPC R600 Sparc SystemZ X86 XCore
+subdirectories = ARM AArch64 BPF CppBackend Hexagon MSP430 NVPTX Mips PowerPC R600 Sparc SystemZ X86 XCore Foo

 ; This is a special group whose required libraries are extended (by llvm-build)
 ; with the best execution engine (the native JIT, if available, or the

To include my target in the LLVM build, and this allows me to specify -march=foo and it will call into my code correctly.

Am I missing something - or is this patch definitely required?

If the patch is required - does anyone have any suggestions/ideas how I could add support to either LLVMBuild or the specific LLVMBuild.txt file so that it would pick up my new Target?

I understand that my patch is tiny and relatively easy to maintain (it will basically always merge well) - but it still irks me having to keep a patch where it probably isn’t required!


Hi Neil,

Weird, I’d think the cmake build should probably do something similar to the autoconf build if possible and just have subdirectories equal to the targets to build. I’m not sure if this is possible etc… could try some setting etc.


I believe we'd need LLVMBuild.txt even in autoconf build - for bunch
of autogenerated stuff, e.g. list of all asmprinters / asmparsers /
InitializeAllTargetInfos, etc., since targets are not autoregistered

Mmm… true. Explicit dependencies are both nice and annoying. We’d need to mention it somewhere basically.


So would anyone object to me trying to find a resolution for this? The easiest way would be that explicit subdirectories in the LLVMBuild.txt are always picked up, but we could have a way to scan the folders in lib/Target, and any folder can be added if it was declared in the experimental build option (or something to that effect).


No particular objection, guess we’ll see what it looks like when you’re done. :slight_smile: