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

import os
import re
import subprocess
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()

def prepend_dynamic_library_path(path):
    target_arch = getattr(config, 'target_arch', None)
    if config.operating_system == 'Windows':
        name = 'PATH'
        sep = ';'
    elif config.operating_system == 'Darwin':
        name = 'DYLD_LIBRARY_PATH'
        sep = ':'
    elif target_arch == 've':
        name = 'VE_LD_LIBRARY_PATH'
        sep = ':'
    else:
        name = 'LD_LIBRARY_PATH'
        sep = ':'
    if name in config.environment:
        config.environment[name] = path + sep + config.environment[name]
    else:
        config.environment[name] = path

# name: The name of this test suite.
config.name = 'libomp'

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

# 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.libomp_obj_root

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

# compiler flags
flags = " -I " + config.test_source_root + \
    " -L " + config.library_dir + \
    " " + config.test_extra_flags
if config.has_omit_frame_pointer_flag:
    flags += " -fno-omit-frame-pointer"
if config.target_arch == "s390x":
    flags += " -mbackchain"

config.test_flags = " -I " + config.omp_header_directory + flags
config.test_flags_use_compiler_omp_h = flags


# extra libraries
libs = ""
if config.has_libm:
    libs += " -lm"
if config.has_libatomic:
    libs += " -latomic"

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

# Setup environment to find dynamic library at runtime
if config.using_hwloc:
    prepend_dynamic_library_path(config.hwloc_library_dir)
    config.available_features.add('hwloc')
# Note: please keep config.library_dir *after* any potentially system
# directories, as otherwise preinstalled openmp libraries will be used
# over just-built
prepend_dynamic_library_path(config.library_dir)

# Rpath modifications for Darwin
if config.operating_system == 'Darwin':
    config.test_flags += " -Wl,-rpath," + config.library_dir
    if config.using_hwloc:
        config.test_flags += " -Wl,-rpath," + config.hwloc_library_dir

# Find the SDK on Darwin
if config.operating_system == 'Darwin':
  cmd = subprocess.Popen(['xcrun', '--show-sdk-path'],
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  out, err = cmd.communicate()
  out = out.strip().decode()
  res = cmd.wait()
  if res == 0 and out:
    config.test_flags += " -isysroot " + out

# Disable OMPT tests if FileCheck was not found
if config.has_ompt and config.test_filecheck == "":
    lit_config.note("Not testing OMPT because FileCheck was not found")
    config.has_ompt = False

if config.has_ompt:
    config.available_features.add("ompt")
    # for callback.h
    config.test_flags += " -I " + config.test_source_root + "/ompt"

if config.has_ompx_taskgraph:
    config.available_features.add("ompx_taskgraph")

if config.operating_system == 'AIX':
    config.available_features.add("aix")
    object_mode = os.environ.get('OBJECT_MODE', '32')
    if object_mode == '64':
      config.test_flags += " -m64"
    elif object_mode == '32':
      # Set user data area to 2GB since the default size 256MB in 32-bit mode
      # is not sufficient to run LIT tests on systems that have a lot of
      # CPUs when creating one worker thread for each CPU and each worker
      # thread uses 4MB stack size.
      config.test_flags += " -Wl,-bmaxdata:0x80000000"

if 'Linux' in config.operating_system:
    config.available_features.add("linux")

if config.operating_system == 'NetBSD':
    config.available_features.add("netbsd")

if config.operating_system == 'Darwin':
    config.available_features.add("darwin")

if config.operating_system in ['Windows', 'Linux', 'FreeBSD', 'NetBSD', 'DragonFly', 'AIX']:
    config.available_features.add('affinity')

if config.operating_system in ['Linux']:
    config.available_features.add('hidden-helper')

target_arch = getattr(config, 'target_arch', None)
if target_arch:
  config.available_features.add(target_arch + '-target-arch')
  if target_arch in ['x86_64', 'i386']:
    config.available_features.add('x86-target-arch')

import multiprocessing
try:
    if multiprocessing.cpu_count() > 1:
        config.available_features.add('multicpu')
except NotImplementedError:
    pass

# to run with icc INTEL_LICENSE_FILE must be set
if 'INTEL_LICENSE_FILE' in os.environ:
    config.environment['INTEL_LICENSE_FILE'] = os.environ['INTEL_LICENSE_FILE']

# 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

# substitutions
config.substitutions.append(("%libomp-compile-and-run", \
    "%libomp-compile && %libomp-run"))
config.substitutions.append(("%libomp-irbuilder-compile-and-run", \
    "%libomp-irbuilder-compile && %libomp-run"))
config.substitutions.append(("%libomp-c99-compile-and-run", \
    "%libomp-c99-compile && %libomp-run"))
config.substitutions.append(("%libomp-cxx-compile-and-run", \
    "%libomp-cxx-compile && %libomp-run"))
config.substitutions.append(("%libomp-cxx-compile-c", \
    "%clangXX %openmp_flags %flags -std=c++17 -x c++ %s -o %t" + libs))
config.substitutions.append(("%libomp-cxx-compile", \
    "%clangXX %openmp_flags %flags -std=c++17 %s -o %t" + libs))
config.substitutions.append(("%libomp-compile", \
    "%clang %openmp_flags %flags %s -o %t" + libs))
config.substitutions.append(("%libomp-irbuilder-compile", \
    "%clang %openmp_flags %flags -fopenmp-enable-irbuilder %s -o %t" + libs))
config.substitutions.append(("%libomp-c99-compile", \
    "%clang %openmp_flags %flags -std=c99 %s -o %t" + libs))
config.substitutions.append(("%libomp-run", "%t"))
config.substitutions.append(("%clangXX", config.test_cxx_compiler))
config.substitutions.append(("%clang", config.test_c_compiler))
config.substitutions.append(("%openmp_flags", config.test_openmp_flags))
# %flags-use-compiler-omp-h allows us to use the test compiler's omp.h file which
# may have different definitions of structures than our omp.h file.
if config.is_standalone_build and config.test_compiler_has_omp_h:
    config.substitutions.append(("%flags-use-compiler-omp-h",
        config.test_flags_use_compiler_omp_h))
else:
    # If testing the runtime within an LLVM tree, then always include omp.h
    # directory associated with the new clang compiler.
    config.substitutions.append(("%flags-use-compiler-omp-h",
        config.test_flags))
config.substitutions.append(("%flags", config.test_flags))
config.substitutions.append(("%python", '"%s"' % (sys.executable)))
config.substitutions.append(("%not", config.test_not))

if config.has_ompt:
    config.substitutions.append(("FileCheck", "tee %%t.out | %s" % config.test_filecheck))
    config.substitutions.append(("%sort-threads", "sort -n -s"))
    if config.operating_system == 'Windows':
        # No such environment variable on Windows.
        config.substitutions.append(("%preload-tool", "true ||"))
        config.substitutions.append(("%no-as-needed-flag", "-Wl,--no-as-needed"))
    elif config.operating_system == 'Darwin':
        config.substitutions.append(("%preload-tool", "env DYLD_INSERT_LIBRARIES=%T/tool.so"))
        # No such linker flag on Darwin.
        config.substitutions.append(("%no-as-needed-flag", ""))
    else:
        config.substitutions.append(("%preload-tool", "env LD_PRELOAD=%T/tool.so"))
        config.substitutions.append(("%no-as-needed-flag", "-Wl,--no-as-needed"))
else:
    config.substitutions.append(("FileCheck", config.test_filecheck))
