Skip to content

Commit 22b9162

Browse files
committed
tc_build: llvm: Add support for experimental targets
Allow to pass targets to the LLVM_EXPERIMENTAL_TARGETS_TO_BUILD which are not considered stable but supported in the LLVM.
1 parent 03cf72d commit 22b9162

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

tc_build/llvm.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
2532
class 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

421438
class LLVMSlimBuilder(LLVMBuilder):
422439

0 commit comments

Comments
 (0)