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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits