beanz updated this revision to Diff 71452.
beanz added a comment.

Added lldb-server as a test dependency based on feedback from @tfiala.


https://reviews.llvm.org/D24591

Files:
  lit/CMakeLists.txt
  lit/Expr/Inputs/anonymous-struct.cpp
  lit/Expr/Inputs/call-function.cpp
  lit/Expr/TestCallStdStringFunction.test
  lit/Expr/TestCallStopAndContinue.test
  lit/Expr/TestCallUserAnonTypedef.test
  lit/Expr/TestCallUserDefinedFunction.test
  lit/Expr/lit.local.cfg
  lit/Unit/lit.cfg
  lit/Unit/lit.site.cfg.in
  lit/lit.cfg
  lit/lit.site.cfg.in

Index: lit/lit.site.cfg.in
===================================================================
--- lit/lit.site.cfg.in
+++ lit/lit.site.cfg.in
@@ -8,6 +8,12 @@
 config.lldb_obj_root = "@LLDB_BINARY_DIR@"
 config.target_triple = "@TARGET_TRIPLE@"
 config.python_executable = "@PYTHON_EXECUTABLE@"
+config.host_cc = "@CMAKE_C_COMPILER@"
+config.host_cxx = "@CMAKE_CXX_COMPILER@"
+
+test_clang = "@LLDB_TEST_CLANG@".lower()
+
+config.test_clang = test_clang == "on" or test_clang == "true" or test_clang == "1"
 
 # 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.
Index: lit/lit.cfg
===================================================================
--- lit/lit.cfg
+++ lit/lit.cfg
@@ -112,17 +112,82 @@
     lit_config.load_config(config, site_cfg)
     raise SystemExit
 
+# Register substitutions
+config.substitutions.append(('%python', config.python_executable))
+config.substitutions.append(('%host_cc', config.host_cc))
+config.substitutions.append(('%host_cxx', config.host_cxx))
+
+cc = config.host_cc
+cxx = config.host_cxx
+debugserver = '%s/debugserver' % llvm_tools_dir
+
+if config.test_clang:
+    cc = '%s/clang' % llvm_tools_dir
+    cxx = '%s/clang++' % llvm_tools_dir
+
+if platform.system() in ['Darwin']:
+    try:
+        out = lit.util.capture(['xcrun', '--show-sdk-path']).strip()
+        res = 0
+    except OSError:
+        res = -1
+    if res == 0 and out:
+        sdk_path = out
+        lit_config.note('using SDKROOT: %r' % sdk_path)
+        cxx += " -isysroot %s" % sdk_path
+    debugserver = '%s/Library/Frameworks/LLDB.frameworks/Resources/debugserver' % config.llvm_obj_root
+
+
+config.substitutions.append(('%cc', cc))
+config.substitutions.append(('%cxx', cxx))
+
+config.substitutions.append(('%lldb', '%s/lldb' % llvm_tools_dir))
+config.substitutions.append(('%debugserver', debugserver))
+
+for pattern in [r"\bFileCheck\b",
+                r"\| \bnot\b"]:
+    tool_match = re.match(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_]+)\\b\W*$",
+                          pattern)
+    tool_pipe = tool_match.group(2)
+    tool_name = tool_match.group(4)
+    tool_path = config.llvm_tools_dir + '/' + tool_name
+    if not tool_path:
+        # Warn, but still provide a substitution.
+        lit_config.note(
+            'Did not find ' + tool_name + ' in ' + config.llvm_tools_dir)
+    config.substitutions.append((pattern, tool_pipe + tool_path))
+
 # Shell execution
 if platform.system() not in ['Windows'] or lit_config.getBashPath() != '':
     config.available_features.add('shell')
 
 # Running on Darwin OS
 if platform.system() in ['Darwin']:
+    config.available_features.add('darwin')
     config.available_features.add('system-linker-mach-o')
 
 # Running on ELF based *nix
 if platform.system() in ['FreeBSD', 'Linux']:
     config.available_features.add('system-linker-elf')
+    if platform.system() in ['FreeBSD']:
+        config.available_features.add('freebsd')
+    else:
+        config.available_features.add('linux')
+
+if platform.system() in ['Windows']:
+    config.available_features.add('windows')
+
+if re.match(r'^arm(hf.*-linux)|(.*-linux-gnuabihf)', config.target_triple):
+    config.available_features.add("armhf-linux")
+
+if re.match(r'icc', cc):
+    config.available_features.add("compiler-icc")
+elif re.match(r'clang', cc):
+    config.available_features.add("compiler-clang")
+elif re.match(r'gcc', cc):
+    config.available_features.add("compiler-gcc")
+elif re.match(r'cl', cc):
+    config.available_features.add("compiler-msvc")
 
 # llvm-config knows whether it is compiled with asserts (and)
 # whether we are operating in release/debug mode.
Index: lit/Unit/lit.site.cfg.in
===================================================================
--- lit/Unit/lit.site.cfg.in
+++ lit/Unit/lit.site.cfg.in
@@ -1,5 +1,6 @@
 @LIT_SITE_CFG_IN_HEADER@
 
+config.test_exec_root = "@LLVM_BINARY_DIR@" 
 config.llvm_src_root = "@LLVM_SOURCE_DIR@"
 config.llvm_obj_root = "@LLVM_BINARY_DIR@"
 config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
Index: lit/Unit/lit.cfg
===================================================================
--- lit/Unit/lit.cfg
+++ lit/Unit/lit.cfg
@@ -6,6 +6,19 @@
 
 import lit.formats
 
+# Check that the object root is known.
+if config.test_exec_root is None:
+    # Otherwise, we haven't loaded the site specific configuration (the user is
+    # probably trying to run on a test file directly, and either the site
+    # configuration hasn't been created by the build system, or we are in an
+    # out-of-tree build situation).
+
+    # Check for 'llvm_unit_site_config' user parameter, and use that if available.
+    site_cfg = lit_config.params.get('lldb_unit_site_config', None)
+    if site_cfg and os.path.exists(site_cfg):
+        lit_config.load_config(config, site_cfg)
+        raise SystemExit
+
 # name: The name of this test suite.
 config.name = 'lldb-Unit'
 
Index: lit/Expr/lit.local.cfg
===================================================================
--- /dev/null
+++ lit/Expr/lit.local.cfg
@@ -0,0 +1 @@
+config.suffixes = ['.test']
Index: lit/Expr/TestCallUserDefinedFunction.test
===================================================================
--- /dev/null
+++ lit/Expr/TestCallUserDefinedFunction.test
@@ -0,0 +1,20 @@
+# XFAIL: windows
+# -> llvm.org/pr24489
+
+# RUN: %cxx %p/Inputs/call-function.cpp -g -o %t && %lldb -b -s %s -- %t | FileCheck %s
+
+breakpoint set --file call-function.cpp --line 52
+run
+expression fib(5)
+# CHECK: $0 = 5
+expression add(4,8)
+# CHECK: $1 = 12
+
+expression add(add(5,2),add(3,4))
+# CHECK: $2 = 14
+expression add(add(5,2),fib(5))
+# CHECK: $3 = 12
+expression stringCompare((const char*) "Hello world")
+# CHECK: $4 = true
+expression stringCompare((const char*) "Hellworld")
+# CHECK: $5 = false
Index: lit/Expr/TestCallUserAnonTypedef.test
===================================================================
--- /dev/null
+++ lit/Expr/TestCallUserAnonTypedef.test
@@ -0,0 +1,11 @@
+# XFAIL: windows
+
+# XFAIL: armhf-linux
+# -> llvm.org/pr27868
+
+# RUN: %cxx %p/Inputs/anonymous-struct.cpp -g -o %t && %lldb -b -s %s -- %t | FileCheck %s
+
+breakpoint set --file anonymous-struct.cpp --line 24
+run
+expression multiply(&s)
+# CHECK: $0 = 1
Index: lit/Expr/TestCallStopAndContinue.test
===================================================================
--- /dev/null
+++ lit/Expr/TestCallStopAndContinue.test
@@ -0,0 +1,12 @@
+# XFAIL: windows
+# -> llvm.org/pr24489
+
+# RUN: %cxx %p/Inputs/call-function.cpp -g -o %t && %lldb -b -s %s -o continue -o "thread list" -- %t 2>&1 | FileCheck %s
+
+breakpoint set --file call-function.cpp --line 52
+run
+breakpoint set --file call-function.cpp --line 14
+expression -i false -- returnsFive()
+# CHECK: Execution was interrupted, reason: breakpoint
+# CHECK: stop reason = User Expression thread plan
+# CHECK: Completed expression: (Five) $0 = (number = 5 {{.*}}, name = "five")
Index: lit/Expr/TestCallStdStringFunction.test
===================================================================
--- /dev/null
+++ lit/Expr/TestCallStdStringFunction.test
@@ -0,0 +1,17 @@
+# XFAIL: windows
+# -> llvm.org/pr21765
+
+# XFAIL: compiler-icc
+# -> llvm.org/pr14437
+
+# XFAIL: freebsd
+# -> llvm.org/pr17807
+
+# RUN: %cxx %p/Inputs/call-function.cpp -g -o %t && %lldb -b -s %s -- %t | FileCheck %s
+
+breakpoint set --file call-function.cpp --line 52
+run
+print str
+# CHECK: Hello world
+print str.c_str()
+# CHECK: Hello world
Index: lit/Expr/Inputs/call-function.cpp
===================================================================
--- /dev/null
+++ lit/Expr/Inputs/call-function.cpp
@@ -0,0 +1,53 @@
+#include <iostream>
+#include <string>
+#include <cstring>
+
+struct Five
+{
+    int number;
+    const char *name;
+};
+
+Five
+returnsFive()
+{
+    Five my_five = {5, "five"};
+    return my_five;
+}
+
+unsigned int
+fib(unsigned int n)
+{
+    if (n < 2)
+        return n;
+    else
+        return fib(n - 1) + fib(n - 2);
+}
+
+int
+add(int a, int b)
+{
+    return a + b;
+}
+
+bool
+stringCompare(const char *str)
+{
+    if (strcmp( str, "Hello world" ) == 0)
+        return true;
+    else
+        return false;
+}
+
+int main (int argc, char const *argv[])
+{
+    std::string str = "Hello world";
+    std::cout << str << std::endl;
+    std::cout << str.c_str() << std::endl;
+    Five main_five = returnsFive();
+#if 0
+    print str
+    print str.c_str()
+#endif
+    return 0; // Please test these expressions while stopped at this line:
+}
Index: lit/Expr/Inputs/anonymous-struct.cpp
===================================================================
--- /dev/null
+++ lit/Expr/Inputs/anonymous-struct.cpp
@@ -0,0 +1,26 @@
+#include <tgmath.h>
+
+typedef struct {
+    float f;
+    int i;
+} my_untagged_struct;
+
+double multiply(my_untagged_struct *s)
+{
+    return s->f * s->i;
+}
+
+double multiply(my_untagged_struct *s, int x)
+{
+    return multiply(s) * x;
+}
+
+int main(int argc, char **argv)
+{
+    my_untagged_struct s = {
+        .f = (float)argc,
+        .i = argc,
+    };
+    // lldb testsuite break
+    return !(multiply(&s, argc) == pow(argc, 3));
+}
Index: lit/CMakeLists.txt
===================================================================
--- lit/CMakeLists.txt
+++ lit/CMakeLists.txt
@@ -11,6 +11,8 @@
   set(ENABLE_SHARED 0)
 endif(BUILD_SHARED_LIBS)
 
+option(LLDB_TEST_CLANG "Use in-tree clang when testing lldb" Off)
+
 configure_lit_site_cfg(
   ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
   ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)
@@ -20,17 +22,33 @@
   )
 
 set(LLDB_TEST_DEPS
+  FileCheck
+  debugserver
   LLDBUnitTests
+  lldb
+  lldb-server
+  not
   )
+
+if(LLDB_TEST_CLANG)
+  list(APPELND LLDB_TEST_DEPS clang)
+endif()
+
 set(LLDB_TEST_PARAMS
   lldb_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
   )
 
-add_lit_testsuite(check-lldb-unit "Running lldb unit test suite"
+add_lit_testsuite(check-lldb-lit "Running lldb lit test suite"
   ${CMAKE_CURRENT_BINARY_DIR}
   PARAMS lldb_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
        lldb_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
   DEPENDS ${LLDB_TEST_DEPS}
   )
 
-set_target_properties(check-lldb-unit PROPERTIES FOLDER "LLDB tests")
+set_target_properties(check-lldb-lit PROPERTIES FOLDER "LLDB tests")
+
+add_lit_testsuites(LLDB ${CMAKE_CURRENT_SOURCE_DIR}
+  PARAMS lldb_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
+         lldb_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
+  DEPENDS ${LLDB_TEST_DEPS}
+  )
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to