# also have a post-assertion to not match a trailing hyphen (foo-).
NOJUNK = r"(?<!\.|-|\^|/)"
+
+def find_tool_substitution(pattern):
+ # Extract the tool name from the pattern. This relies on the tool
+ # name being surrounded by \b word match operators. If the
+ # pattern starts with "| ", include it in the string to be
+ # substituted.
+ tool_match = re.match(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_]+)\\b\W*$",
+ pattern)
+ tool_pipe = tool_match.group(2)
+ tool_name = tool_match.group(4)
+ # Did the user specify the tool path + arguments? This allows things like
+ # llvm-lit "-Dllc=llc -enable-misched -verify-machineinstrs"
+ tool_path = lit_config.params.get(tool_name)
+ if tool_path is None:
+ tool_path = lit.util.which(tool_name, llvm_tools_dir)
+ if (tool_name == "llc" and
+ 'LLVM_ENABLE_MACHINE_VERIFIER' in os.environ and
+ os.environ['LLVM_ENABLE_MACHINE_VERIFIER'] == "1"):
+ tool_path += " -verify-machineinstrs"
+ return tool_name, tool_path, tool_pipe
+
+
for pattern in [r"\bbugpoint\b(?!-)",
NOJUNK + r"\bllc\b",
r"\blli\b",
r"\bllvm-dsymutil\b",
r"\bllvm-dwarfdump\b",
r"\bllvm-extract\b",
- r"\bllvm-go\b",
r"\bllvm-lib\b",
r"\bllvm-link\b",
r"\bllvm-lto\b",
r"\byaml2obj\b",
r"\byaml-bench\b",
r"\bverify-uselistorder\b",
- r"\bKaleidoscope-Ch3\b",
- r"\bKaleidoscope-Ch4\b",
- r"\bKaleidoscope-Ch5\b",
- r"\bKaleidoscope-Ch6\b",
- r"\bKaleidoscope-Ch7\b",
- r"\bKaleidoscope-Ch8\b",
# Handle these specially as they are strings searched
# for during testing.
r"\| \bcount\b",
r"\| \bnot\b"]:
- # Extract the tool name from the pattern. This relies on the tool
- # name being surrounded by \b word match operators. If the
- # pattern starts with "| ", include it in the string to be
- # substituted.
- tool_match = re.match(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_]+)\\b\W*$",
- pattern)
- tool_pipe = tool_match.group(2)
- tool_name = tool_match.group(4)
- # Did the user specify the tool path + arguments? This allows things like
- # llvm-lit "-Dllc=llc -enable-misched -verify-machineinstrs"
- tool_path = lit_config.params.get(tool_name)
- if tool_path is None:
- tool_path = lit.util.which(tool_name, llvm_tools_dir)
- if tool_path is None:
+ tool_name, tool_path, tool_pipe = find_tool_substitution(pattern)
+ if not tool_path:
# Warn, but still provide a substitution.
lit_config.note('Did not find ' + tool_name + ' in ' + llvm_tools_dir)
tool_path = llvm_tools_dir + '/' + tool_name
- if (tool_name == "llc" and
- 'LLVM_ENABLE_MACHINE_VERIFIER' in os.environ and
- os.environ['LLVM_ENABLE_MACHINE_VERIFIER'] == "1"):
- tool_path += " -verify-machineinstrs"
config.substitutions.append((pattern, tool_pipe + tool_path))
+# For tools that are optional depending on the config, we won't warn
+# if they're missing.
+for pattern in [r"\bllvm-go\b",
+ r"\bKaleidoscope-Ch3\b",
+ r"\bKaleidoscope-Ch4\b",
+ r"\bKaleidoscope-Ch5\b",
+ r"\bKaleidoscope-Ch6\b",
+ r"\bKaleidoscope-Ch7\b",
+ r"\bKaleidoscope-Ch8\b"]:
+ tool_name, tool_path, tool_pipe = find_tool_substitution(pattern)
+ if not tool_path:
+ # Provide a substitution anyway, for the sake of consistent errors.
+ tool_path = llvm_tools_dir + '/' + tool_name
+ config.substitutions.append((pattern, tool_pipe + tool_path))
+
+
### Targets
config.targets = frozenset(config.targets_to_build.split())