From: Zachary Turner Date: Fri, 10 Nov 2017 20:57:57 +0000 (+0000) Subject: [debuginfo-tests] Make debuginfo-tests work in a standard configuration. X-Git-Tag: llvmorg-6.0.0-rc1~3664 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0f2ce11df7288c4cdae0db2f7211ec41446e6c22;p=platform%2Fupstream%2Fllvm.git [debuginfo-tests] Make debuginfo-tests work in a standard configuration. Previously, debuginfo-tests was expected to be checked out into clang/test and then the tests would automatically run as part of check-clang. This is not a standard workflow for handling external projects, and it brings with it some serious drawbacks such as the inability to depend on things other than clang, which we will need going forward. The goal of this patch is to migrate towards a more standard workflow. To ease the transition for build bot maintainers, this patch tries not to break the existing workflow, but instead simply deprecate it to give maintainers a chance to update the build infrastructure. Differential Revision: https://reviews.llvm.org/D39605 llvm-svn: 317925 --- diff --git a/clang/test/lit.cfg.py b/clang/test/lit.cfg.py index 39bdf36a..d2f0491 100644 --- a/clang/test/lit.cfg.py +++ b/clang/test/lit.cfg.py @@ -58,8 +58,6 @@ tool_dirs = [config.clang_tools_dir, config.llvm_tools_dir] tools = [ 'c-index-test', 'clang-check', 'clang-diff', 'clang-format', 'opt', - ToolSubst('%test_debuginfo', command=os.path.join( - config.llvm_src_root, 'utils', 'test_debuginfo.pl')), ToolSubst('%clang_func_map', command=FindTool( 'clang-func-mapping'), unresolved='ignore'), ] diff --git a/debuginfo-tests/CMakeLists.txt b/debuginfo-tests/CMakeLists.txt new file mode 100644 index 0000000..60a467f --- /dev/null +++ b/debuginfo-tests/CMakeLists.txt @@ -0,0 +1,36 @@ +# Debug Info tests. These tests invoke clang to generate programs with +# various types of debug info, and then run those programs under a debugger +# such as GDB or LLDB to verify the results. + +set(DEBUGINFO_TESTS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(DEBUGINFO_TESTS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) + +set(DEBUGINFO_TEST_DEPS + clang + llvm-config + FileCheck + count + not + ) + +get_target_property(CLANG_SOURCE_DIR clang SOURCE_DIR) + +if (TARGET lld) + set(DEBUGINFO_TESTS_HAS_LLD 1) + list(APPEND DEBUGINFO_TEST_DEPS lld) + get_target_property(LLD_SOURCE_DIR lld SOURCE_DIR) +endif() + +configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py + MAIN_CONFIG + ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py + ) + +add_lit_testsuite(check-debuginfo "Running debug info integration tests" + ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${DEBUGINFO_TEST_DEPS} + ) + +set_target_properties(check-debuginfo PROPERTIES FOLDER "Debug info tests") \ No newline at end of file diff --git a/debuginfo-tests/lit.cfg.py b/debuginfo-tests/lit.cfg.py new file mode 100644 index 0000000..b56aa42 --- /dev/null +++ b/debuginfo-tests/lit.cfg.py @@ -0,0 +1,57 @@ +# -*- Python -*- + +import os +import platform +import re +import subprocess +import tempfile + +import lit.formats +import lit.util + +from lit.llvm import llvm_config +from lit.llvm.subst import ToolSubst +from lit.llvm.subst import FindTool + +# Configuration file for the 'lit' test runner. + +# name: The name of this test suite. +config.name = 'debuginfo-tests' + +# testFormat: The test format to use to interpret tests. +# +# For now we require '&&' between commands, until they get globally killed and +# the test runner updated. +config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell) + +# suffixes: A list of file extensions to treat as test files. +config.suffixes = ['.c', '.cpp', '.m'] + +# excludes: A list of directories to exclude from the testsuite. The 'Inputs' +# subdirectories contain auxiliary inputs for various tests in their parent +# directories. +config.excludes = ['Inputs'] + +# test_source_root: The root path where tests are located. +config.test_source_root = os.path.join(config.debuginfo_tests_src_root, 'tests') + +# test_exec_root: The root path where tests should be run. +config.test_exec_root = config.debuginfo_tests_obj_root + +llvm_config.use_default_substitutions() + +llvm_config.use_clang() + +if config.llvm_use_sanitizer: + # Propagate path to symbolizer for ASan/MSan. + llvm_config.with_system_environment( + ['ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH']) + +tool_dirs = [config.llvm_tools_dir] + +tools = [ + ToolSubst('%test_debuginfo', command=os.path.join( + config.llvm_src_root, 'utils', 'test_debuginfo.pl')), +] + +llvm_config.add_tool_substitutions(tools, tool_dirs) diff --git a/debuginfo-tests/lit.site.cfg.py.in b/debuginfo-tests/lit.site.cfg.py.in new file mode 100644 index 0000000..8c4481a --- /dev/null +++ b/debuginfo-tests/lit.site.cfg.py.in @@ -0,0 +1,25 @@ +@LIT_SITE_CFG_IN_HEADER@ + +import lit.util + +config.test_exec_root = "@CMAKE_BINARY_DIR@" + +config.llvm_src_root = "@LLVM_SOURCE_DIR@" +config.llvm_obj_root = "@LLVM_BINARY_DIR@" +config.llvm_tools_dir = "@LLVM_TOOLS_DIR@" +config.llvm_libs_dir = "@LLVM_LIBS_DIR@" +config.llvm_shlib_dir = "@SHLIBDIR@" +config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@" +config.debuginfo_tests_obj_root = "@DEBUGINFO_TESTS_BINARY_DIR@" +config.debuginfo_tests_src_root = "@DEBUGINFO_TESTS_SOURCE_DIR@" +config.has_lld = lit.util.pythonize_bool("@DEBUGINFO_TESTS_HAS_LLD@") +config.host_triple = "@LLVM_HOST_TRIPLE@" +config.target_triple = "@TARGET_TRIPLE@" +config.host_arch = "@HOST_ARCH@" + +config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@" + +@LIT_SITE_CFG_IN_FOOTER@ + +# Let the main config do the real work. +lit_config.load_config(config, "@DEBUGINFO_TESTS_SOURCE_DIR@/lit.cfg.py") diff --git a/debuginfo-tests/aggregate-indirect-arg.cpp b/debuginfo-tests/tests/aggregate-indirect-arg.cpp similarity index 93% rename from debuginfo-tests/aggregate-indirect-arg.cpp rename to debuginfo-tests/tests/aggregate-indirect-arg.cpp index 86c7caf..eb2fd66 100644 --- a/debuginfo-tests/aggregate-indirect-arg.cpp +++ b/debuginfo-tests/tests/aggregate-indirect-arg.cpp @@ -1,6 +1,6 @@ // RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o // RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out -// RUN: %test_debuginfo %s %t.out +// RUN: %test_debuginfo %s %t.out // Radar 8945514 // DEBUGGER: break 22 // DEBUGGER: r diff --git a/debuginfo-tests/asan-blocks.c b/debuginfo-tests/tests/asan-blocks.c similarity index 100% rename from debuginfo-tests/asan-blocks.c rename to debuginfo-tests/tests/asan-blocks.c diff --git a/debuginfo-tests/asan.c b/debuginfo-tests/tests/asan.c similarity index 100% rename from debuginfo-tests/asan.c rename to debuginfo-tests/tests/asan.c diff --git a/debuginfo-tests/block_var.m b/debuginfo-tests/tests/block_var.m similarity index 93% rename from debuginfo-tests/block_var.m rename to debuginfo-tests/tests/block_var.m index 7ec786f1..3286217 100644 --- a/debuginfo-tests/block_var.m +++ b/debuginfo-tests/tests/block_var.m @@ -1,6 +1,6 @@ // RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o // RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation -// RUN: %test_debuginfo %s %t.out +// RUN: %test_debuginfo %s %t.out // REQUIRES: system-darwin diff --git a/debuginfo-tests/blocks.m b/debuginfo-tests/tests/blocks.m similarity index 85% rename from debuginfo-tests/blocks.m rename to debuginfo-tests/tests/blocks.m index 8e5a212..12c9977 100644 --- a/debuginfo-tests/blocks.m +++ b/debuginfo-tests/tests/blocks.m @@ -1,6 +1,6 @@ // RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o // RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation -// RUN: %test_debuginfo %s %t.out +// RUN: %test_debuginfo %s %t.out // REQUIRES: system-darwin // Radar 9279956 @@ -24,9 +24,9 @@ extern void foo(void(^)(void)); int master = 0; __block int m2 = 0; __block int dbTransaction = 0; - int (^x)(void) = ^(void) { (void) self; - (void) master; - (void) dbTransaction; + int (^x)(void) = ^(void) { (void) self; + (void) master; + (void) dbTransaction; m2++; return m2; }; diff --git a/debuginfo-tests/ctor.cpp b/debuginfo-tests/tests/ctor.cpp similarity index 78% rename from debuginfo-tests/ctor.cpp rename to debuginfo-tests/tests/ctor.cpp index 92cdbcd..364401a 100644 --- a/debuginfo-tests/ctor.cpp +++ b/debuginfo-tests/tests/ctor.cpp @@ -1,12 +1,12 @@ // RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o // RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out -// RUN: %test_debuginfo %s %t.out +// RUN: %test_debuginfo %s %t.out // DEBUGGER: break 14 // DEBUGGER: r // DEBUGGER: p *this -// CHECK-NEXT-NOT: Cannot access memory at address +// CHECK-NEXT-NOT: Cannot access memory at address class A { public: diff --git a/debuginfo-tests/dbg-arg.c b/debuginfo-tests/tests/dbg-arg.c similarity index 100% rename from debuginfo-tests/dbg-arg.c rename to debuginfo-tests/tests/dbg-arg.c diff --git a/debuginfo-tests/foreach.m b/debuginfo-tests/tests/foreach.m similarity index 94% rename from debuginfo-tests/foreach.m rename to debuginfo-tests/tests/foreach.m index 2e3c312..ccdc282 100644 --- a/debuginfo-tests/foreach.m +++ b/debuginfo-tests/tests/foreach.m @@ -1,6 +1,6 @@ // RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o // RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation -// RUN: %test_debuginfo %s %t.out +// RUN: %test_debuginfo %s %t.out // // REQUIRES: system-darwin // Radar 8757124 @@ -19,7 +19,7 @@ int main (int argc, const char * argv[]) { for (NSString *thing in things) { NSLog (@"%@", thing); } - + things = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc" , nil]; for (NSString *thing in things) { NSLog (@"%@", thing); diff --git a/debuginfo-tests/forward-declare-class.cpp b/debuginfo-tests/tests/forward-declare-class.cpp similarity index 100% rename from debuginfo-tests/forward-declare-class.cpp rename to debuginfo-tests/tests/forward-declare-class.cpp diff --git a/debuginfo-tests/lit.local.cfg b/debuginfo-tests/tests/lit.local.cfg similarity index 100% rename from debuginfo-tests/lit.local.cfg rename to debuginfo-tests/tests/lit.local.cfg diff --git a/debuginfo-tests/llgdb.py b/debuginfo-tests/tests/llgdb.py similarity index 100% rename from debuginfo-tests/llgdb.py rename to debuginfo-tests/tests/llgdb.py diff --git a/debuginfo-tests/nested-struct.cpp b/debuginfo-tests/tests/nested-struct.cpp similarity index 100% rename from debuginfo-tests/nested-struct.cpp rename to debuginfo-tests/tests/nested-struct.cpp diff --git a/debuginfo-tests/nrvo-string.cpp b/debuginfo-tests/tests/nrvo-string.cpp similarity index 100% rename from debuginfo-tests/nrvo-string.cpp rename to debuginfo-tests/tests/nrvo-string.cpp diff --git a/debuginfo-tests/safestack.c b/debuginfo-tests/tests/safestack.c similarity index 100% rename from debuginfo-tests/safestack.c rename to debuginfo-tests/tests/safestack.c diff --git a/debuginfo-tests/sret.cpp b/debuginfo-tests/tests/sret.cpp similarity index 93% rename from debuginfo-tests/sret.cpp rename to debuginfo-tests/tests/sret.cpp index 3c304e2..640015f 100644 --- a/debuginfo-tests/sret.cpp +++ b/debuginfo-tests/tests/sret.cpp @@ -1,6 +1,6 @@ // RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o // RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out -// RUN: %test_debuginfo %s %t.out +// RUN: %test_debuginfo %s %t.out // Radar 8775834 // DEBUGGER: break 62 // DEBUGGER: r @@ -24,7 +24,7 @@ protected: int m_int; }; -A::A (int i) : +A::A (int i) : m_int(i) { } @@ -50,11 +50,11 @@ class B { public: B () {} - + A AInstance(); }; -A +A B::AInstance() { A a(12); @@ -65,7 +65,7 @@ int main (int argc, char const *argv[]) { B b; int return_val = b.AInstance().get_int(); - + A a(b.AInstance()); return return_val; } diff --git a/debuginfo-tests/stack-var.c b/debuginfo-tests/tests/stack-var.c similarity index 100% rename from debuginfo-tests/stack-var.c rename to debuginfo-tests/tests/stack-var.c diff --git a/debuginfo-tests/static-member-2.cpp b/debuginfo-tests/tests/static-member-2.cpp similarity index 100% rename from debuginfo-tests/static-member-2.cpp rename to debuginfo-tests/tests/static-member-2.cpp diff --git a/debuginfo-tests/static-member.cpp b/debuginfo-tests/tests/static-member.cpp similarity index 100% rename from debuginfo-tests/static-member.cpp rename to debuginfo-tests/tests/static-member.cpp diff --git a/debuginfo-tests/vla.c b/debuginfo-tests/tests/vla.c similarity index 93% rename from debuginfo-tests/vla.c rename to debuginfo-tests/tests/vla.c index 9c8e277..e6ea1ef 100644 --- a/debuginfo-tests/vla.c +++ b/debuginfo-tests/tests/vla.c @@ -1,7 +1,7 @@ // This test case verifies the debug location for variable-length arrays. // RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o // RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -// RUN: %test_debuginfo %s %t.out +// RUN: %test_debuginfo %s %t.out // // DEBUGGER: break 18 // DEBUGGER: r diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index 216702e..5d1d29e 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -110,7 +110,7 @@ endif() # LLVM_EXTERNAL_${project}_SOURCE_DIR using LLVM_ALL_PROJECTS # This allows an easy way of setting up a build directory for llvm and another # one for llvm+clang+... using the same sources. -set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;lld;polly") +set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;debuginfo-tests;lld;polly") set(LLVM_ENABLE_PROJECTS "" CACHE STRING "Semicolon-separated list of projects to build (${LLVM_ALL_PROJECTS}), or \"all\".") if( LLVM_ENABLE_PROJECTS STREQUAL "all" ) @@ -881,13 +881,18 @@ if( LLVM_INCLUDE_EXAMPLES ) endif() if( LLVM_INCLUDE_TESTS ) - if(EXISTS ${LLVM_MAIN_SRC_DIR}/projects/test-suite AND TARGET clang) + if(TARGET clang) include(LLVMExternalProjectUtils) - llvm_ExternalProject_Add(test-suite ${LLVM_MAIN_SRC_DIR}/projects/test-suite - USE_TOOLCHAIN - EXCLUDE_FROM_ALL - NO_INSTALL - ALWAYS_CLEAN) + if (EXISTS ${LLVM_MAIN_SRC_DIR}/projects/test-suite) + llvm_ExternalProject_Add(test-suite ${LLVM_MAIN_SRC_DIR}/projects/test-suite + USE_TOOLCHAIN + TOOLCHAIN_TOOLS clang lld clang-cl + EXCLUDE_FROM_ALL + NO_INSTALL + ALWAYS_CLEAN) + endif() + + add_llvm_external_project(debuginfo-tests projects/debuginfo-tests) endif() add_subdirectory(utils/lit) add_subdirectory(test) diff --git a/llvm/projects/CMakeLists.txt b/llvm/projects/CMakeLists.txt index 9102efb..11835fa 100644 --- a/llvm/projects/CMakeLists.txt +++ b/llvm/projects/CMakeLists.txt @@ -10,6 +10,7 @@ foreach(entry ${entries}) (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libcxxabi) AND (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libunwind) AND (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/test-suite) AND + (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/debuginfo-tests) AND (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/parallel-libs) AND (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/openmp)) add_subdirectory(${entry}) diff --git a/llvm/utils/lit/lit/llvm/config.py b/llvm/utils/lit/lit/llvm/config.py index 798f08a..d3d8d22 100644 --- a/llvm/utils/lit/lit/llvm/config.py +++ b/llvm/utils/lit/lit/llvm/config.py @@ -27,8 +27,9 @@ class LLVMConfig(object): # For tests that require Windows to run. features.add('system-windows') + lit_tools_dir = getattr(config, 'lit_tools_dir', None) # Seek sane tools in directories and set to $PATH. - path = self.lit_config.getToolsPath(config.lit_tools_dir, + path = self.lit_config.getToolsPath(lit_tools_dir, config.environment['PATH'], ['cmp.exe', 'grep.exe', 'sed.exe']) if path is not None: @@ -413,8 +414,10 @@ class LLVMConfig(object): self.config.substitutions.append( ('%target_itanium_abi_host_triple', '')) - self.config.substitutions.append( - ('%src_include_dir', self.config.clang_src_dir + '/include')) + clang_src_dir = getattr(self.config, 'clang_src_dir', None) + if clang_src_dir: + self.config.substitutions.append( + ('%src_include_dir', os.path.join(clang_src_dir, 'include'))) # FIXME: Find nicer way to prohibit this. self.config.substitutions.append(