forked from OSchip/llvm-project
Switch CMake testing over to use Daniels new(er) Python-based infrastructure.
llvm-svn: 72977
This commit is contained in:
parent
dedc0968cf
commit
30018a6860
|
@ -1,51 +0,0 @@
|
|||
# Project that runs the Clang regression tests for a given glob pattern.
|
||||
#
|
||||
# There are several CMake cache variabes that must be set for this
|
||||
# project to work:
|
||||
#
|
||||
# CLANG_TEST_RUNNER: The TestRunner.sh shell script, which is used to test
|
||||
# Clang.
|
||||
#
|
||||
# CLANG_TEST_GLOB_PATTERNS: Set to a GLOB pattern to identify the kind of
|
||||
# tests, e.g., *.cpp for C++ tests.
|
||||
#
|
||||
# LLVM_TOOLS_PATH: The directory where the Clang and LLVM tool
|
||||
# executables (such as opt) are generated.
|
||||
#
|
||||
# LLVM_SCRIPTS_PATH: The directory where the LLVM test scripts are
|
||||
# located.
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
project(ClangTest)
|
||||
|
||||
enable_testing()
|
||||
|
||||
# Computes the normalized name of a test from its path name.
|
||||
macro(compute_test_name var filename)
|
||||
get_filename_component(test_name ${filename} NAME_WE)
|
||||
get_filename_component(test_path ${filename} PATH)
|
||||
get_filename_component(test_lastpath ${test_path} NAME_WE)
|
||||
set(${var} "${test_lastpath}-${test_name}")
|
||||
endmacro()
|
||||
|
||||
# FIXME: This is a hack to make sure that there is a proper "clean" target.
|
||||
# There must be a better way.
|
||||
file(WRITE dummy.c "int dummy() { return 0; }")
|
||||
add_library(dummy dummy.c)
|
||||
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "dummy.c")
|
||||
|
||||
# Set the path appropriately
|
||||
set(PATH $ENV{PATH})
|
||||
set(PATH "${LLVM_TOOLS_PATH}:${LLVM_SCRIPTS_PATH}:${PATH}")
|
||||
|
||||
# Find the test files
|
||||
string(REPLACE ":" ";" CLANG_TEST_GLOB_PATTERNS ${CLANG_TEST_GLOB_PATTERNS})
|
||||
separate_arguments(CLANG_TEST_GLOB_PATTERNS)
|
||||
file(GLOB_RECURSE tests ${CLANG_TEST_GLOB_PATTERNS})
|
||||
|
||||
# Add individual tests for each file we found.
|
||||
foreach(test ${tests})
|
||||
compute_test_name(testname ${test})
|
||||
add_test(${testname} ${CLANG_TEST_RUNNER} ${test})
|
||||
set_tests_properties(${testname} PROPERTIES
|
||||
ENVIRONMENT "PATH=${PATH}")
|
||||
endforeach(test ${tests})
|
|
@ -1 +0,0 @@
|
|||
int dummy() { return 0; }
|
|
@ -2,40 +2,52 @@ find_file(CLANG_TEST_RUNNER TestRunner.sh PATHS ${CMAKE_CURRENT_SOURCE_DIR}
|
|||
DOC "Clang's regression testing script")
|
||||
mark_as_advanced(CLANG_TEST_RUNNER)
|
||||
|
||||
get_target_property(LLVM_TOOLS_PATH clang RUNTIME_OUTPUT_DIRECTORY)
|
||||
set(CLANG_TEST_DIRECTORIES
|
||||
"Analysis"
|
||||
"CodeGen"
|
||||
"CodeGenCXX"
|
||||
"CodeGenObjC"
|
||||
"Coverage"
|
||||
"Driver"
|
||||
"FixIt"
|
||||
"Frontend"
|
||||
"Lexer"
|
||||
"Misc"
|
||||
"PCH"
|
||||
"Parser"
|
||||
"Preprocessor"
|
||||
"Rewriter"
|
||||
"Sema"
|
||||
"SemaCXX"
|
||||
"SemaObjC"
|
||||
"SemaObjCXX"
|
||||
"SemaTemplate")
|
||||
|
||||
macro(add_clang_test_suite language target)
|
||||
set(PATTERNS)
|
||||
foreach (extension ${ARGN})
|
||||
set(PATTERNS "${PATTERNS}:${CMAKE_CURRENT_SOURCE_DIR}/*.${extension}")
|
||||
include(FindPythonInterp)
|
||||
if(PYTHONINTERP_FOUND)
|
||||
get_target_property(LLVM_TOOLS_PATH clang RUNTIME_OUTPUT_DIRECTORY)
|
||||
set(TESTING_EXTRA_PATHS
|
||||
"${LLVM_TOOLS_PATH}/${CMAKE_CFG_INTDIR}:${LLVM_SOURCE_DIR}/test/Scripts")
|
||||
set(all_testdirs)
|
||||
foreach(testdir ${CLANG_TEST_DIRECTORIES})
|
||||
add_custom_target(clang-test-${testdir}
|
||||
${PYTHON_EXECUTABLE}
|
||||
${LLVM_SOURCE_DIR}/tools/clang/utils/test/MultiTestRunner.py
|
||||
-s
|
||||
"--path=${TESTING_EXTRA_PATHS}"
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${testdir}/
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT "Running Clang regression tests in ${testdir}")
|
||||
|
||||
list(APPEND all_testdirs ${CMAKE_CURRENT_SOURCE_DIR}/${testdir}/)
|
||||
endforeach()
|
||||
|
||||
if (${language} STREQUAL "ALL")
|
||||
set(TEST_COMMENT "Running Clang regression tests")
|
||||
else()
|
||||
set(TEST_COMMENT "Running Clang ${language} regression tests")
|
||||
endif ()
|
||||
|
||||
add_custom_target(${target}
|
||||
${CMAKE_CTEST_COMMAND}
|
||||
--build-and-test
|
||||
${LLVM_SOURCE_DIR}/tools/clang/CMake/RunTests
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${target}
|
||||
--build-generator ${CMAKE_GENERATOR}
|
||||
--build-makeprogram ${CMAKE_MAKE_PROGRAM}
|
||||
--build-project ClangTest
|
||||
--build-target test
|
||||
--build-options
|
||||
"-DCLANG_TEST_RUNNER=${CLANG_TEST_RUNNER}"
|
||||
"-DCLANG_TEST_GLOB_PATTERNS=${PATTERNS}"
|
||||
"-DLLVM_TOOLS_PATH=${LLVM_TOOLS_PATH}"
|
||||
"-DLLVM_SCRIPTS_PATH=${LLVM_SOURCE_DIR}/test/Scripts"
|
||||
COMMENT ${TEST_COMMENT})
|
||||
endmacro(add_clang_test_suite)
|
||||
|
||||
add_clang_test_suite(C clang-test-c c)
|
||||
add_clang_test_suite(Objective-C clang-test-objc m)
|
||||
add_clang_test_suite(C++ clang-test-cxx cpp)
|
||||
add_clang_test_suite(Objective-C++ clang-test-objcxx mm)
|
||||
add_clang_test_suite(Assembler clang-test-asm S)
|
||||
add_clang_test_suite(ALL clang-test c m cpp mm S)
|
||||
add_custom_target(clang-test
|
||||
${PYTHON_EXECUTABLE}
|
||||
${LLVM_SOURCE_DIR}/tools/clang/utils/test/MultiTestRunner.py
|
||||
"--path=${TESTING_EXTRA_PATHS}"
|
||||
${all_testdirs}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS clang clang-cc
|
||||
COMMENT "Running Clang regression tests")
|
||||
endif()
|
||||
|
|
|
@ -249,6 +249,10 @@ def main():
|
|||
parser.add_option("", "--debug-do-not-test", dest="debugDoNotTest",
|
||||
help="DEBUG: Skip running actual test script",
|
||||
action="store_true", default=False)
|
||||
parser.add_option("", "--path", dest="path",
|
||||
help="Additional paths to add to testing environment",
|
||||
action="store", type=str, default=None)
|
||||
|
||||
(opts, args) = parser.parse_args()
|
||||
|
||||
if not args:
|
||||
|
@ -269,7 +273,10 @@ def main():
|
|||
random.shuffle(tests)
|
||||
if opts.maxTests is not None:
|
||||
tests = tests[:opts.maxTests]
|
||||
|
||||
if opts.path is not None:
|
||||
os.environ["PATH"] = opts.path + ":" + os.environ["PATH"];
|
||||
print "Current PATH is: ", os.environ["PATH"]
|
||||
|
||||
extra = ''
|
||||
if len(tests) != len(allTests):
|
||||
extra = ' of %d'%(len(allTests),)
|
||||
|
|
Loading…
Reference in New Issue