# -*- 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];

kScript = os.path.join(os.path.dirname(__file__), "check-symbols")
config.test_format = \
  lit.formats.OneCommandPerFileTest(command=[kScript, root.clang] + cxxflags,
                                    dir='%s/lib' % root.llvm_src_root,
                                    recursive=True,
                                    pattern='^(.*\\.cpp)$')

