1 include(LLVMParseArguments)
3 # add_clang_unittest(test_dirname file1.cpp file2.cpp ...
4 # [USED_LIBS lib1 lib2]
5 # [LINK_COMPONENTS component1 component2])
7 # Will compile the list of files together and link against the clang
8 # libraries in the USED_LIBS list and the llvm-config components in
9 # the LINK_COMPONENTS list. Produces a binary named
10 # 'basename(test_dirname)Tests'.
11 function(add_clang_unittest)
12 PARSE_ARGUMENTS(CLANG_UNITTEST "USED_LIBS;LINK_COMPONENTS" "" ${ARGN})
13 set(LLVM_LINK_COMPONENTS ${CLANG_UNITTEST_LINK_COMPONENTS})
14 set(LLVM_USED_LIBS ${CLANG_UNITTEST_USED_LIBS})
15 list(GET CLANG_UNITTEST_DEFAULT_ARGS 0 test_dirname)
16 list(REMOVE_AT CLANG_UNITTEST_DEFAULT_ARGS 0)
18 string(REGEX MATCH "([^/]+)$" test_name ${test_dirname})
20 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
21 ${CLANG_BINARY_DIR}/unittests/${test_dirname}/${CMAKE_BUILD_TYPE})
23 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
24 ${CLANG_BINARY_DIR}/unittests/${test_dirname})
26 if( NOT LLVM_BUILD_TESTS )
27 set(EXCLUDE_FROM_ALL ON)
29 add_clang_executable(${test_name}Tests ${CLANG_UNITTEST_DEFAULT_ARGS})
30 add_dependencies(ClangUnitTests ${test_name}Tests)
31 set_target_properties(${test_name}Tests PROPERTIES FOLDER "Clang tests")
34 add_custom_target(ClangUnitTests)
35 set_target_properties(ClangUnitTests PROPERTIES FOLDER "Clang tests")
37 include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include)
38 add_definitions(-DGTEST_HAS_RTTI=0)
39 if( LLVM_COMPILER_IS_GCC_COMPATIBLE )
40 llvm_replace_compiler_option(CMAKE_CXX_FLAGS "-frtti" "-fno-rtti")
42 llvm_replace_compiler_option(CMAKE_CXX_FLAGS "/GR" "/GR-")
45 if (NOT LLVM_ENABLE_THREADS)
46 add_definitions(-DGTEST_HAS_PTHREAD=0)
49 if(SUPPORTS_NO_VARIADIC_MACROS_FLAG)
50 add_definitions("-Wno-variadic-macros")
53 add_clang_unittest(AST
55 USED_LIBS gtest gtest_main clangAST
58 add_clang_unittest(Basic
59 Basic/FileManagerTest.cpp
60 USED_LIBS gtest gtest_main clangBasic
63 add_clang_unittest(Frontend
64 Frontend/FrontendActionTest.cpp
65 USED_LIBS gtest gtest_main clangFrontend