Extract Flang's runtime library to use the LLVM_ENABLE_RUNTIME mechanism. It will only become active when `LLVM_ENABLE_RUNTIMES=flang-rt` is used, which also changes the `FLANG_INCLUDE_RUNTIME` to `OFF` so the old runtime build rules do not conflict. This also means that unless `LLVM_ENABLE_RUNTIMES=flang-rt` is passed, nothing changes with the current build process. Motivation: * Consistency with LLVM's other runtime libraries (compiler-rt, libc, libcxx, openmp offload, ...) * Allows compiling the runtime for multiple targets at once using the LLVM_RUNTIME_TARGETS configuration options * Installs the runtime into the compiler's per-target resource directory so it can be automatically found even when cross-compiling Also see RFC discussion at https://discourse.llvm.org/t/rfc-use-llvm-enable-runtimes-for-flangs-runtime/80826
101 lines
2.5 KiB
Python
101 lines
2.5 KiB
Python
# -*- Python -*-
|
|
|
|
import shlex
|
|
import lit.util
|
|
|
|
from lit.llvm import llvm_config
|
|
from lit.llvm.subst import ToolSubst, FindTool
|
|
|
|
|
|
def shjoin(args, sep=" "):
|
|
return sep.join([shlex.quote(arg) for arg in args])
|
|
|
|
|
|
# Configuration file for the 'lit' test runner.
|
|
|
|
# name: The name of this test suite.
|
|
config.name = "flang-rt"
|
|
|
|
# testFormat: The test format to use to interpret tests.
|
|
#
|
|
# For now we require '&&' between commands, until they get globally killed and
|
|
# the test runner updated.
|
|
config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell)
|
|
|
|
# suffixes: A list of file extensions to treat as test files.
|
|
config.suffixes = [
|
|
".c",
|
|
".cpp",
|
|
".f",
|
|
".F",
|
|
".ff",
|
|
".FOR",
|
|
".for",
|
|
".f77",
|
|
".f90",
|
|
".F90",
|
|
".ff90",
|
|
".f95",
|
|
".F95",
|
|
".ff95",
|
|
".fpp",
|
|
".FPP",
|
|
".cuf",
|
|
".CUF",
|
|
".f18",
|
|
".F18",
|
|
".f03",
|
|
".F03",
|
|
".f08",
|
|
".F08",
|
|
".ll",
|
|
".fir",
|
|
".mlir",
|
|
]
|
|
|
|
llvm_config.use_default_substitutions()
|
|
|
|
# test_source_root: The root path where tests are located.
|
|
config.test_source_root = os.path.dirname(__file__)
|
|
|
|
# test_exec_root: The root path where tests should be run.
|
|
# lit writes a '.lit_test_times.txt' file into this directory.
|
|
config.test_exec_root = config.flang_rt_binary_test_dir
|
|
|
|
# On MacOS, -isysroot is needed to build binaries.
|
|
isysroot_flag = []
|
|
if config.osx_sysroot:
|
|
isysroot_flag = ["-isysroot", config.osx_sysroot]
|
|
|
|
tools = [
|
|
ToolSubst(
|
|
"%flang",
|
|
command=config.flang,
|
|
extra_args=isysroot_flag,
|
|
unresolved="fatal",
|
|
),
|
|
ToolSubst(
|
|
"%clang",
|
|
command=FindTool("clang"),
|
|
extra_args=isysroot_flag,
|
|
unresolved="fatal",
|
|
),
|
|
ToolSubst("%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal"),
|
|
]
|
|
llvm_config.add_tool_substitutions(tools)
|
|
|
|
# Let tests find LLVM's standard tools (FileCheck, split-file, not, ...)
|
|
llvm_config.with_environment("PATH", config.llvm_tools_dir, append_path=True)
|
|
|
|
# Include path for C headers that define Flang's Fortran ABI.
|
|
config.substitutions.append(
|
|
("%include", os.path.join(config.flang_source_dir, "include"))
|
|
)
|
|
|
|
# Library path of libflang_rt.runtime.a (for lib search path when using non-Flang driver for linking)
|
|
config.substitutions.append(("%libdir", config.flang_rt_output_resource_lib_dir))
|
|
|
|
# For CUDA offloading, additional steps (device linking) and libraries (cudart) are needed.
|
|
if config.flang_rt_experimental_offload_support == "CUDA":
|
|
config.available_features.add("offload-cuda")
|