@@ -22,6 +22,13 @@ def get_all_targets(llvm_folder):
2222 return [val for target in match .group (1 ).splitlines () if (val := target .strip ())]
2323
2424
25+ def get_experimental_targets (llvm_folder ):
26+ contents = Path (llvm_folder , 'llvm/CMakeLists.txt' ).read_text (encoding = 'utf-8' )
27+ if not (match := re .search (r'set\(LLVM_ALL_EXPERIMENTAL_TARGETS([\w|\s]+)\)' , contents )):
28+ raise RuntimeError ('Could not find LLVM_ALL_EXPERIMENTAL_TARGETS?' )
29+ return [val for target in match .group (1 ).splitlines () if (val := target .strip ())]
30+
31+
2532class LLVMBuilder (Builder ):
2633
2734 def __init__ (self ):
@@ -46,6 +53,7 @@ def __init__(self):
4653 self .projects = []
4754 self .quiet_cmake = False
4855 self .targets = []
56+ self .experimental_targets = []
4957
5058 def bolt_clang (self ):
5159 # Default to instrumentation, as it should be universally available.
@@ -306,6 +314,8 @@ def configure(self):
306314 if self .tools .llvm_tblgen :
307315 self .cmake_defines ['LLVM_TABLEGEN' ] = self .tools .llvm_tblgen
308316 self .cmake_defines ['LLVM_TARGETS_TO_BUILD' ] = ';' .join (self .targets )
317+ self .cmake_defines ['LLVM_EXPERIMENTAL_TARGETS_TO_BUILD' ] = ';' .join (
318+ self .experimental_targets )
309319 if self .tools .ld :
310320 self .cmake_defines ['LLVM_USE_LINKER' ] = self .tools .ld
311321
@@ -405,6 +415,7 @@ def validate_targets(self):
405415 raise RuntimeError ('No targets set?' )
406416
407417 all_targets = get_all_targets (self .folders .source )
418+ experimental_targets = get_experimental_targets (self .folders .source )
408419
409420 for target in self .targets :
410421 if target in ('all' , 'host' ):
@@ -417,6 +428,12 @@ def validate_targets(self):
417428 f"Requested target ('{ target } ') was not found in LLVM_ALL_TARGETS { tuple (all_targets )} , check spelling?"
418429 )
419430
431+ for target in self .experimental_targets :
432+ if target not in experimental_targets :
433+ raise RuntimeError (
434+ f"Requested target ('{ target } ') was not found in LLVM_ALL_EXPERIMENTAL_TARGETS { tuple (experimental_targets )} , check spelling?"
435+ )
436+
420437
421438class LLVMSlimBuilder (LLVMBuilder ):
422439
0 commit comments