# -*- Python -*-

# Configuration file for the 'lit' test runner.

def getRoot(config):
    if not config.parent:
        return config
    return getRoot(config.parent)

root = getRoot(config)

# testFormat: The test format to use to interpret tests.
target_obj_root = root.llvm_obj_root
cxxflags = ['-D__STDC_LIMIT_MACROS',
            '-D__STDC_CONSTANT_MACROS',
            '-Wno-sign-compare',
            '-I%s/include' % root.llvm_src_root,
            '-I%s/include' % root.llvm_obj_root,
            '-I%s/lib/Target/Alpha' % root.llvm_src_root,
            '-I%s/lib/Target/ARM' % root.llvm_src_root,
            '-I%s/lib/Target/Blackfin' % root.llvm_src_root,
            '-I%s/lib/Target/CBackend' % root.llvm_src_root,
            '-I%s/lib/Target/CellSPU' % root.llvm_src_root,
            '-I%s/lib/Target/CppBackend' % root.llvm_src_root,
            '-I%s/lib/Target/Mips' % root.llvm_src_root,
            '-I%s/lib/Target/MSIL' % root.llvm_src_root,
            '-I%s/lib/Target/MSP430' % root.llvm_src_root,
            '-I%s/lib/Target/PIC16' % root.llvm_src_root,
            '-I%s/lib/Target/PowerPC' % root.llvm_src_root,
            '-I%s/lib/Target/Sparc' % root.llvm_src_root,
            '-I%s/lib/Target/SystemZ' % root.llvm_src_root,
            '-I%s/lib/Target/X86' % root.llvm_src_root,
            '-I%s/lib/Target/XCore' % root.llvm_src_root,
            '-I%s/lib/Target/Alpha' % target_obj_root,
            '-I%s/lib/Target/ARM' % target_obj_root,
            '-I%s/lib/Target/Blackfin' % target_obj_root,
            '-I%s/lib/Target/CBackend' % target_obj_root,
            '-I%s/lib/Target/CellSPU' % target_obj_root,
            '-I%s/lib/Target/CppBackend' % target_obj_root,
            '-I%s/lib/Target/Mips' % target_obj_root,
            '-I%s/lib/Target/MSIL' % target_obj_root,
            '-I%s/lib/Target/MSP430' % target_obj_root,
            '-I%s/lib/Target/PIC16' % target_obj_root,
            '-I%s/lib/Target/PowerPC' % target_obj_root,
            '-I%s/lib/Target/Sparc' % target_obj_root,
            '-I%s/lib/Target/SystemZ' % target_obj_root,
            '-I%s/lib/Target/X86' % target_obj_root,
            '-I%s/lib/Target/XCore' % target_obj_root];

config.test_format = \
  lit.formats.OneCommandPerFileTest(command=[root.clang, '-emit-llvm', '-c',
                                             '-o', '/dev/null'] + cxxflags,
                                    dir='%s/lib' % root.llvm_src_root,
                                    recursive=True,
                                    pattern='^(.*\\.cpp)$')

