about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorDan Liew <daniel.liew@imperial.ac.uk>2014-01-13 17:14:55 +0000
committerDan Liew <daniel.liew@imperial.ac.uk>2014-01-20 14:46:52 +0000
commit9b45ab8822ec3336e137b68003103125c5a4f9ab (patch)
tree5b8ee689da77fc4ed2f8c7824e77b7d84dd27c17
parent70d6a3341a70f9daf0c3653a041b925e53ebafa2 (diff)
downloadklee-9b45ab8822ec3336e137b68003103125c5a4f9ab.tar.gz
Removed all of llvm-lit's dependence on DejaGNU. A few things
are now broken and will be fixed shortly.
-rw-r--r--test/Makefile7
-rw-r--r--test/lit.cfg106
-rw-r--r--test/lit.site.cfg.in14
3 files changed, 32 insertions, 95 deletions
diff --git a/test/Makefile b/test/Makefile
index 6a0184e2..ea6624d0 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -111,11 +111,16 @@ site.exp: Makefile $(LEVEL)/Makefile.config
 	@test ! -f site.exp || mv site.exp site.bak
 	@mv site.tmp site.exp
 
-lit.site.cfg: site.exp
+lit.site.cfg: lit.site.cfg.in
 	@echo "Making KLEE 'lit.site.cfg' file..."
 	@sed -e "s#@KLEE_SOURCE_DIR@#$(PROJ_SRC_ROOT)#g" \
 	     -e "s#@KLEE_BINARY_DIR@#$(PROJ_OBJ_ROOT)#g" \
 	     -e "s#@KLEE_TOOLS_DIR@#$(ToolDir)#g" \
 	     -e "s#@LLVM_TOOLS_DIR@#$(LLVMToolDir)#g" \
 	     -e "s#@LLVM_VERSION_MAJOR@#$(LLVM_VERSION_MAJOR)#g" \
+	     -e "s#@LLVMCC@#$(KLEE_BITCODE_C_COMPILER) -I$(PROJ_SRC_ROOT)/include#g" \
+	     -e "s#@LLVMCXX@#$(KLEE_BITCODE_CXX_COMPILER) -I$(PROJ_SRC_ROOT)/include#g" \
+	     -e "s#@ENABLE_UCLIBC@#$(ENABLE_UCLIBC)#g" \
+	     -e "s#@ENABLE_POSIX_RUNTIME@#$(ENABLE_POSIX_RUNTIME)#g" \
+	     -e "s#@TARGET_TRIPLE@#$(TARGET_TRIPLE)#g" \
 	     $(PROJ_SRC_DIR)/lit.site.cfg.in > $@
diff --git a/test/lit.cfg b/test/lit.cfg
index 3bda57df..9344cae8 100644
--- a/test/lit.cfg
+++ b/test/lit.cfg
@@ -10,9 +10,9 @@ config.name = 'KLEE'
 # testFormat: The test format to use to interpret tests.
 config.test_format = lit.formats.ShTest(execute_external=False)
 
-# suffixes: A list of file extensions to treat as test files, this is actually
-# set by on_clone().
-config.suffixes = []
+# suffixes: A list of file extensions to treat as test files
+# Note this can be overridden by lit.local.cfg files
+config.suffixes = ['.ll', '.c', '.cpp', '.pc']
 
 # test_source_root: The root path where tests are located.
 config.test_source_root = os.path.dirname(__file__)
@@ -22,7 +22,6 @@ klee_obj_root = getattr(config, 'klee_obj_root', None)
 if klee_obj_root is not None:
     config.test_exec_root = os.path.join(klee_obj_root, 'test')
 
-
 # Tweak the PATH to include the tool dir.
 if klee_obj_root is not None:
     klee_tools_dir = getattr(config, 'klee_tools_dir', None)
@@ -41,38 +40,18 @@ if klee_obj_root is not None:
 config.environment['HOME'] = os.environ['HOME']
 config.environment['PWD'] = os.environ['PWD']
 
-###
-
-import os
-
 # Check that the object root is known.
 if config.test_exec_root is None:
     lit.fatal('test execution root not set!')
 
-###
-
-# Load site data from DejaGNU's site.exp.
-import re
-site_exp = {}
-# FIXME: Implement lit.site.cfg.
-for line in open(os.path.join(config.klee_obj_root, 'test', 'site.exp')):
-    m = re.match('set ([^ ]+) "([^"]*)"', line)
-    if m:
-        site_exp[m.group(1)] = m.group(2)
-
-# Add substitutions.
-config.substitutions.append(('%llvmgcc_only', site_exp['llvmgcc']))
-for sub in ['llvmgcc', 'llvmgxx']:
-    if sub in ('llvmgcc', 'llvmgxx'):
-        config.substitutions.append(('%' + sub,
-                                     site_exp[sub] + ' -emit-llvm -w'))
-    # FIXME: This is a hack to avoid LLVMC tests failing due to a clang driver
-    #        warning when passing in "-fexceptions -fno-exceptions".
-    elif sub == 'compile_cxx':
-        config.substitutions.append(('%' + sub,
-                                  site_exp[sub].replace('-fno-exceptions', '')))
-    else:
-        config.substitutions.append(('%' + sub, site_exp[sub]))
+
+# Add substitutions from lit.site.cfg
+subs = [ 'llvmgcc', 'llvmgxx']
+for name in subs:
+    value = getattr(config, name, None)
+    if value == None:
+        lit.fatal('{0} is not set'.format(name))
+    config.substitutions.append( ('%' + name, value))
 
 # FIXME: Give these proper paths.
 config.substitutions.append(('%kleaver', 'kleaver'))
@@ -80,66 +59,5 @@ config.substitutions.append(('%klee', 'klee'))
 
 # LLVM < 3.0 doesn't Support %T directive
 if int(config.llvm_version_major) == 2:
+    # This is a hack
     config.substitutions.append(('%T','Output'))
-
-def klee_supports_posix_runtime():
-    return int(site_exp['ENABLE_POSIX_RUNTIME'])
-
-def klee_supports_uclibc():
-    return int(site_exp['ENABLE_UCLIBC'])
-
-excludes = []
-
-# Provide target_triple for use in XFAIL and XTARGET.
-config.target_triple = site_exp['target_triplet']
-
-# Provide on_clone hook for reading 'dg.exp'.
-import os
-simpleLibData = re.compile(r"""load_lib llvm.exp
-
-RunLLVMTests \[lsort \[glob -nocomplain \$srcdir/\$subdir/\*\.(.*)\]\]""",
-                           re.MULTILINE)
-conditionalLibData = re.compile(r"""load_lib llvm.exp
-
-if.*\[?(klee[^ ]*)\].*{
- *RunLLVMTests \[lsort \[glob -nocomplain \$srcdir/\$subdir/\*\.(.*)\]\]
-\}""", re.MULTILINE)
-def on_clone(parent, cfg, for_path):
-    def addSuffixes(match):
-        if match[0] == '{' and match[-1] == '}':
-            cfg.suffixes = ['.' + s for s in match[1:-1].split(',')]
-        else:
-            cfg.suffixes = ['.' + match]
-
-    libPath = os.path.join(os.path.dirname(for_path),
-                           'dg.exp')
-    if not os.path.exists(libPath):
-        cfg.unsupported = True
-        return
-
-    # Reset unsupported, in case we inherited it.
-    cfg.unsupported = False
-    lib = open(libPath).read().strip()
-
-    # Check for a simple library.
-    m = simpleLibData.match(lib)
-    if m:
-        addSuffixes(m.group(1))
-        return
-
-    # Check for a conditional test set.
-    m = conditionalLibData.match(lib)
-    if m:
-        funcname,match = m.groups()
-        addSuffixes(match)
-
-        func = globals().get(funcname)
-        if not func:
-            lit.error('unsupported predicate %r' % funcname)
-        elif not func():
-            cfg.unsupported = True
-        return
-    # Otherwise, give up.
-    lit.error('unable to understand %r:\n%s' % (libPath, lib))
-
-config.on_clone = on_clone
diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in
index 2b239f56..11159415 100644
--- a/test/lit.site.cfg.in
+++ b/test/lit.site.cfg.in
@@ -4,7 +4,21 @@ config.klee_src_root = "@KLEE_SOURCE_DIR@"
 config.klee_obj_root = "@KLEE_BINARY_DIR@"
 config.klee_tools_dir = "@KLEE_TOOLS_DIR@"
 config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+
+# Needed to check if a hack needs to be applied
 config.llvm_version_major = "@LLVM_VERSION_MAJOR@"
 
+# Compilers
+# FIXME: use llvmcc not llvmgcc
+config.llvmgcc = "@LLVMCC@"
+config.llvmgxx = "@LLVMCXX@"
+
+# Features
+config.enable_uclibc = True if @ENABLE_UCLIBC@ == 1 else False
+config.enable_posix_runtime = True if @ENABLE_POSIX_RUNTIME@ == 1 else False
+
+# Current target
+config.target_triple = "@TARGET_TRIPLE@"
+
 # Let the main config do the real work.
 lit.load_config(config, "@KLEE_SOURCE_DIR@/test/lit.cfg")