@LIT_SITE_CFG_IN_HEADER@

config.llvm_src_root = "@LLVM_SOURCE_DIR@"
config.llvm_obj_root = "@LLVM_BINARY_DIR@"
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
config.polly_obj_root = "@POLLY_BINARY_DIR@"
config.polly_lib_dir = "@POLLY_LIB_DIR@"
config.target_triple = "@TARGET_TRIPLE@"
config.enable_gpgpu_codegen = "@GPU_CODEGEN@"
config.llvm_polly_link_into_tools = "@LLVM_POLLY_LINK_INTO_TOOLS@"
config.targets_to_build = "@TARGETS_TO_BUILD@"
config.extra_paths = "@POLLY_TEST_EXTRA_PATHS@".split(";")

## Check the current platform with regex
import re
EAT_ERR_ON_X86 = ' '
if (re.match(r'^x86_64*', '@TARGET_TRIPLE@') == None) :
  EAT_ERR_ON_X86 = '|| echo \"error is eaten\"'

for arch in config.targets_to_build.split():
    config.available_features.add(arch.lower() + '-registered-target')

# Support substitution of the tools and libs dirs with user parameters. This is
# used when we can't determine the tool dir at configuration time.
try:
    config.llvm_tools_dir = config.llvm_tools_dir % lit_config.params
    config.llvm_libs_dir = config.llvm_libs_dir % lit_config.params
except KeyError:
    e = sys.exc_info()[1]
    key, = e.args
    lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))

# excludes: A list of directories to exclude from the testsuite. The 'Inputs'
# subdirectories contain auxiliary inputs for various tests in their parent
# directories.
config.excludes = ['Inputs']

if config.llvm_polly_link_into_tools == '' or \
   config.llvm_polly_link_into_tools.lower() == '0' or \
   config.llvm_polly_link_into_tools.lower() == 'n' or \
   config.llvm_polly_link_into_tools.lower() == 'no' or \
   config.llvm_polly_link_into_tools.lower() == 'off' or \
   config.llvm_polly_link_into_tools.lower() == 'false' or \
   config.llvm_polly_link_into_tools.lower() == 'notfound' or \
   config.llvm_polly_link_into_tools.lower() == 'llvm_polly_link_into_tools-notfound':
    config.substitutions.append(('%loadPolly', '-load '
                                 + config.polly_lib_dir + '/LLVMPolly@LLVM_SHLIBEXT@'
                                 + ' -load-pass-plugin '
                                 + config.polly_lib_dir + '/LLVMPolly@LLVM_SHLIBEXT@'
                                 + ' -polly-process-unprofitable '
                                 + ' -polly-remarks-minimal '
                                 + ' -polly-use-llvm-names '
                                 + ' -polly-import-jscop-dir=%S '
                                 + ' -polly-codegen-verify '
                                 ))
else:
    config.substitutions.append(('%loadPolly', ''
                                 + ' -polly-process-unprofitable '
                                 + ' -polly-remarks-minimal '
                                 + ' -polly-use-llvm-names '
                                 + ' -polly-import-jscop-dir=%S '
                                 + ' -polly-codegen-verify '
                                 ))

if config.enable_gpgpu_codegen == 'TRUE' :
    config.available_features.add('pollyacc')

import lit.llvm
lit.llvm.initialize(lit_config, config)

# Let the main config do the real work.
lit_config.load_config(config, "@POLLY_SOURCE_DIR@/test/lit.cfg")
