# -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:
# Configuration file for the 'lit' test runner.

import os
import lit.formats

# Tell pylint that we know config and lit_config exist somewhere.
if 'PYLINT_IMPORT' in os.environ:
    config = object()
    lit_config = object()

# Use the CUDA device as suggested by the env
if 'CUDA_VISIBLE_DEVICES' in os.environ:
    config.environment['CUDA_VISIBLE_DEVICES'] = os.environ['CUDA_VISIBLE_DEVICES']

# Use the ROCR device as suggested by the env
if 'ROCR_VISIBLE_DEVICES' in os.environ:
    config.environment['ROCR_VISIBLE_DEVICES'] = os.environ['ROCR_VISIBLE_DEVICES']

# Allow running the tests with omptarget debug output
if 'LIBOMPTARGET_DEBUG' in os.environ:
    config.environment['LIBOMPTARGET_DEBUG'] = os.environ['LIBOMPTARGET_DEBUG']

# Allow running the tests with nextgen plugins when available
if 'LIBOMPTARGET_NEXTGEN_PLUGINS' in os.environ:
    config.environment['LIBOMPTARGET_NEXTGEN_PLUGINS'] = os.environ['LIBOMPTARGET_NEXTGEN_PLUGINS']

if 'LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS' in os.environ:
    config.environment['LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS'] = os.environ['LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS']

if 'OMP_TARGET_OFFLOAD' in os.environ:
    config.environment['OMP_TARGET_OFFLOAD'] = os.environ['OMP_TARGET_OFFLOAD']

# set default environment variables for test
if 'CHECK_OPENMP_ENV' in os.environ:
    test_env = os.environ['CHECK_OPENMP_ENV'].split()
    for env in test_env:
        name = env.split('=')[0]
        value = env.split('=')[1]
        config.environment[name] = value

def append_dynamic_library_path(name, value, sep):
    if name in config.environment:
        config.environment[name] = value + sep + config.environment[name]
    else:
        config.environment[name] = value

# Evaluate the environment variable which is a string boolean value.
def evaluate_bool_env(env):
    env = env.lower()
    possible_true_values = ["on", "true", "1"]
    for v in possible_true_values:
        if env == v:
            return True
    return False

# name: The name of this test suite.
config.name = 'libomptarget :: ' + config.libomptarget_current_target

# suffixes: A list of file extensions to treat as test files.
config.suffixes = ['.c', '.cpp', '.cc', '.f90']

# excludes: A list of directories to exclude from the testuites.
config.excludes = ['Inputs']

# test_source_root: The root path where tests are located.
config.test_source_root = os.path.dirname(__file__)

# test_exec_root: The root object directory where output is placed
config.test_exec_root = config.libomptarget_obj_root

# test format
config.test_format = lit.formats.ShTest()

# compiler flags
config.test_flags = " -I " + config.test_source_root + \
    " -I " + config.omp_header_directory + \
    " -L " + config.library_dir + \
    " -L " + config.llvm_lib_directory

# compiler specific flags
config.test_flags_clang = ""
config.test_flags_flang = ""

if config.omp_host_rtl_directory:
    config.test_flags = config.test_flags + " -L " + \
        config.omp_host_rtl_directory

config.test_flags = config.test_flags + " " + config.test_extra_flags

# Allow REQUIRES / UNSUPPORTED / XFAIL to work
config.target_triple = [ ]
for feature in config.test_compiler_features:
    config.available_features.add(feature)

if config.libomptarget_debug:
  config.available_features.add('libomptarget-debug')

if config.has_libomptarget_ompt:
  config.available_features.add('ompt')

config.available_features.add(config.libomptarget_current_target)

if config.libomptarget_has_libc:
  config.available_features.add('libc')

# Determine whether the test system supports unified memory.
# For CUDA, this is the case with compute capability 70 (Volta) or higher.
# For all other targets, we currently assume it is.
supports_unified_shared_memory = True
if config.libomptarget_current_target.startswith('nvptx'):
  try:
    cuda_arch = int(config.cuda_test_arch[:3])
    if cuda_arch < 70:
      supports_unified_shared_memory = False
  except ValueError:
    # If the architecture is invalid, assume it is supported.
    supports_unified_shared_memory = True
if config.libomptarget_current_target.startswith('amdgcn'):
    supports_unified_shared_memory = False
if supports_unified_shared_memory:
   config.available_features.add('unified_shared_memory')

# Setup environment to find dynamic library at runtime
if config.operating_system == 'Windows':
    append_dynamic_library_path('PATH', config.library_dir, ";")
    append_dynamic_library_path('PATH', config.omp_host_rtl_directory, ";")
elif config.operating_system == 'Darwin':
    append_dynamic_library_path('DYLD_LIBRARY_PATH', config.library_dir, ":")
    append_dynamic_library_path('DYLD_LIBRARY_PATH', \
        config.omp_host_rtl_directory, ";")
    config.test_flags += " -Wl,-rpath," + config.library_dir
    config.test_flags += " -Wl,-rpath," + config.omp_host_rtl_directory
else: # Unices
    if config.libomptarget_current_target != "nvptx64-nvidia-cuda":
        config.test_flags += " -nogpulib"
    config.test_flags += " -Wl,-rpath," + config.library_dir
    config.test_flags += " -Wl,-rpath," + config.omp_host_rtl_directory
    config.test_flags += " -Wl,-rpath," + config.llvm_lib_directory
    if config.cuda_libdir:
        config.test_flags += " -Wl,-rpath," + config.cuda_libdir
    if config.libomptarget_current_target.startswith('nvptx'):
        config.test_flags_clang += " --libomptarget-nvptx-bc-path=" + config.library_dir + '/DeviceRTL'
    if config.libomptarget_current_target.endswith('-LTO'):
        config.test_flags += " -foffload-lto"
    if config.libomptarget_current_target.endswith('-JIT-LTO') and evaluate_bool_env(
        config.environment['LIBOMPTARGET_NEXTGEN_PLUGINS']
    ):
        config.test_flags += " -foffload-lto"
        config.test_flags += " -Wl,--embed-bitcode"

def remove_suffix_if_present(name):
    if name.endswith('-LTO'):
        return name[:-4]
    elif name.endswith('-JIT-LTO'):
        return name[:-8]
    else:
        return name

def add_libraries(source):
    if config.libomptarget_has_libc:
        return source + " " + config.llvm_library_dir + "/libcgpu.a " + \
               config.llvm_library_intdir + "/libomptarget.devicertl.a"
    return source + " " + config.llvm_library_intdir + "/libomptarget.devicertl.a"

# substitutions
# - for targets that exist in the system create the actual command.
# - for valid targets that do not exist in the system, return false, so that the
#   same test can be used for different targets.

# Scan all the valid targets.
for libomptarget_target in config.libomptarget_all_targets:
    # Is this target in the current system? If so create a compile, run and test
    # command. Otherwise create command that return false.
    if libomptarget_target == config.libomptarget_current_target:
        config.substitutions.append(("%libomptarget-compilexx-run-and-check-generic",
            "%libomptarget-compilexx-run-and-check-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compile-run-and-check-generic",
            "%libomptarget-compile-run-and-check-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-generic",
            "%libomptarget-compile-fortran-run-and-check-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compilexx-and-run-generic",
            "%libomptarget-compilexx-and-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compile-and-run-generic",
            "%libomptarget-compile-and-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compilexx-generic",
            "%libomptarget-compilexx-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compile-generic",
            "%libomptarget-compile-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compile-fortran-generic",
            "%libomptarget-compile-fortran-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-generic",
            "%libomptarget-compileoptxx-run-and-check-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileopt-run-and-check-generic",
            "%libomptarget-compileopt-run-and-check-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileoptxx-and-run-generic",
            "%libomptarget-compileoptxx-and-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileopt-and-run-generic",
            "%libomptarget-compileopt-and-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileoptxx-generic",
            "%libomptarget-compileoptxx-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileopt-generic",
            "%libomptarget-compileopt-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-run-generic",
            "%libomptarget-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-run-fail-generic",
            "%libomptarget-run-fail-" + libomptarget_target))
        config.substitutions.append(("%clangxx-generic",
            "%clangxx-" + libomptarget_target))
        config.substitutions.append(("%clang-generic",
            "%clang-" + libomptarget_target))
        config.substitutions.append(("%fcheck-generic",
            config.libomptarget_filecheck + " %s"))
        config.substitutions.append(("%fcheck-plain-generic",
            config.libomptarget_filecheck))


        config.substitutions.append(("%libomptarget-compilexx-run-and-check-" + \
            libomptarget_target, \
            "%libomptarget-compilexx-and-run-" + libomptarget_target + \
            " | " + config.libomptarget_filecheck + " %s"))
        config.substitutions.append(("%libomptarget-compile-run-and-check-" + \
            libomptarget_target, \
            "%libomptarget-compile-and-run-" + libomptarget_target + \
            " | " + config.libomptarget_filecheck + " %s"))
        config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-" + \
            libomptarget_target, \
            "%libomptarget-compile-fortran-and-run-" + libomptarget_target + \
            " | " + config.libomptarget_filecheck + " %s"))
        config.substitutions.append(("%libomptarget-compilexx-and-run-" + \
            libomptarget_target, \
            "%libomptarget-compilexx-" + libomptarget_target + " && " + \
            "%libomptarget-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compile-and-run-" + \
            libomptarget_target, \
            "%libomptarget-compile-" + libomptarget_target + " && " + \
            "%libomptarget-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compile-fortran-and-run-" + \
            libomptarget_target, \
            "%libomptarget-compile-fortran-" + libomptarget_target + " && " + \
            "%libomptarget-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compilexx-" + \
            libomptarget_target, \
            "%clangxx-" + libomptarget_target + add_libraries(" %s -o %t")))
        config.substitutions.append(("%libomptarget-compile-" + \
            libomptarget_target, \
            "%clang-" + libomptarget_target + add_libraries(" %s -o %t")))
        config.substitutions.append(("%libomptarget-compile-fortran-" + \
            libomptarget_target, \
            "%flang-" + libomptarget_target + " %s -o %t"))
        config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-" + \
            libomptarget_target, \
            "%libomptarget-compileoptxx-and-run-" + libomptarget_target + \
            " | " + config.libomptarget_filecheck + " %s"))
        config.substitutions.append(("%libomptarget-compileopt-run-and-check-" + \
            libomptarget_target, \
            "%libomptarget-compileopt-and-run-" + libomptarget_target + \
            " | " + config.libomptarget_filecheck + " %s"))
        config.substitutions.append(("%libomptarget-compileoptxx-and-run-" + \
            libomptarget_target, \
            "%libomptarget-compileoptxx-" + libomptarget_target + " && " + \
            "%libomptarget-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileopt-and-run-" + \
            libomptarget_target, \
            "%libomptarget-compileopt-" + libomptarget_target + " && " + \
            "%libomptarget-run-" + libomptarget_target))
        config.substitutions.append(("%libomptarget-compileoptxx-" + \
            libomptarget_target, \
            "%clangxx-" + libomptarget_target + add_libraries(" -O3 %s -o %t")))
        config.substitutions.append(("%libomptarget-compileopt-" + \
            libomptarget_target, \
            "%clang-" + libomptarget_target + add_libraries(" -O3 %s -o %t")))
        config.substitutions.append(("%libomptarget-run-" + \
            libomptarget_target, \
            "%t"))
        config.substitutions.append(("%libomptarget-run-fail-" + \
            libomptarget_target, \
            "%not --crash %t"))
        config.substitutions.append(("%clangxx-" + libomptarget_target, \
                                     "%clangxx %openmp_flags %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
                                     remove_suffix_if_present(libomptarget_target)))
        config.substitutions.append(("%clang-" + libomptarget_target, \
                                     "%clang %openmp_flags %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
                                     remove_suffix_if_present(libomptarget_target)))
        config.substitutions.append(("%flang-" + libomptarget_target, \
                                     "%flang %openmp_flags %flags %flags_flang -fopenmp-targets=" +\
                                     remove_suffix_if_present(libomptarget_target)))
        config.substitutions.append(("%fcheck-" + libomptarget_target, \
            config.libomptarget_filecheck + " %s"))
    else:
        config.substitutions.append(("%libomptarget-compile-run-and-check-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compilexx-run-and-check-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compile-and-run-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compile-fortran-and-run-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compilexx-and-run-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compilexx-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compile-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compile-fortran-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compileopt-run-and-check-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compileopt-and-run-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compileoptxx-and-run-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compileoptxx-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-compileopt-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-run-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%libomptarget-run-fail-" + \
            libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%clang-" + libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%clangxx-" + libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%fcheck-" + libomptarget_target, \
            "echo ignored-command"))
        config.substitutions.append(("%flang-" + libomptarget_target, \
            "echo ignored-command"))

config.substitutions.append(("%clangxx", config.test_cxx_compiler))
config.substitutions.append(("%clang", config.test_c_compiler))

if config.test_fortran_compiler:
    config.available_features.add('flang')
    config.substitutions.append(("%flang", config.test_fortran_compiler))

config.substitutions.append(("%openmp_flags", config.test_openmp_flags))
if config.libomptarget_current_target.startswith('nvptx') and config.cuda_path:
    config.substitutions.append(("%cuda_flags", "--cuda-path=" + config.cuda_path))
else:
    config.substitutions.append(("%cuda_flags", ""))
config.substitutions.append(("%flags_clang", config.test_flags_clang))
config.substitutions.append(("%flags_flang", config.test_flags_flang))
config.substitutions.append(("%flags", config.test_flags))
config.substitutions.append(("%not", config.libomptarget_not))
