import os
import platform
import re
import subprocess
import locale
import lit.formats
import lit.util
from lit.llvm import llvm_config
config.name = "lld"
config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell)
config.suffixes = [".ll", ".s", ".test", ".yaml", ".objtxt"]
config.excludes = ["Inputs"]
config.test_source_root = os.path.dirname(__file__)
config.test_exec_root = os.path.join(config.lld_obj_root, "test")
llvm_config.use_default_substitutions()
llvm_config.use_lld()
tool_patterns = [
"llc",
"llvm-as",
"llvm-mc",
"llvm-nm",
"llvm-objdump",
"llvm-otool",
"llvm-pdbutil",
"llvm-profdata",
"llvm-dwarfdump",
"llvm-readelf",
"llvm-readobj",
"obj2yaml",
"yaml2obj",
"opt",
"llvm-dis",
]
llvm_config.add_tool_substitutions(tool_patterns)
if platform.system() in ["NetBSD"]:
config.test_retry_attempts = 2
if lit_config.useValgrind:
config.target_triple += "-vg"
llvm_config.feature_config(
[
(
"--targets-built",
{
"AArch64": "aarch64",
"AMDGPU": "amdgpu",
"ARM": "arm",
"AVR": "avr",
"Hexagon": "hexagon",
"LoongArch": "loongarch",
"Mips": "mips",
"MSP430": "msp430",
"PowerPC": "ppc",
"RISCV": "riscv",
"Sparc": "sparc",
"SystemZ": "systemz",
"WebAssembly": "wasm",
"X86": "x86",
},
),
("--assertion-mode", {"ON": "asserts"}),
]
)
config.environment["LLD_VERSION"] = "LLD 1.0"
run_lld_main_twice = lit_config.params.get("RUN_LLD_MAIN_TWICE", False)
if not run_lld_main_twice:
config.environment["LLD_IN_TEST"] = "1"
else:
config.environment["LLD_IN_TEST"] = "2"
config.excludes.append("ELF")
config.excludes.append("mach-o")
config.available_features.add("main-run-twice")
if lit.util.which("cvtres", config.environment["PATH"]) or config.have_libxml2:
config.available_features.add("manifest_tool")
if config.enable_backtrace:
config.available_features.add("backtrace")
if config.have_libxml2:
config.available_features.add("libxml2")
if config.have_dia_sdk:
config.available_features.add("diasdk")
if config.sizeof_void_p == 8:
config.available_features.add("llvm-64-bits")
if config.has_plugins:
config.available_features.add("plugins")
if config.build_examples:
config.available_features.add("examples")
if config.linked_bye_extension:
config.substitutions.append(("%loadbye", ""))
config.substitutions.append(("%loadnewpmbye", ""))
else:
config.substitutions.append(
(
"%loadbye",
"-load={}/Bye{}".format(config.llvm_shlib_dir, config.llvm_shlib_ext),
)
)
config.substitutions.append(
(
"%loadnewpmbye",
"-load-pass-plugin={}/Bye{}".format(
config.llvm_shlib_dir, config.llvm_shlib_ext
),
)
)
tar_executable = lit.util.which("tar", config.environment["PATH"])
if tar_executable:
env = os.environ
env["LANG"] = "C"
tar_version = subprocess.Popen(
[tar_executable, "--version"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=env,
)
sout, _ = tar_version.communicate()
if "GNU tar" in sout.decode():
config.available_features.add("gnutar")
if config.ld_lld_default_mingw:
config.excludes.append("ELF")