1 include(LLVMParseArguments) 2 3 # add_clang_unittest(test_dirname file1.cpp file2.cpp ... 4 # [USED_LIBS lib1 lib2] 5 # [LINK_COMPONENTS component1 component2]) 6 # 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) 17 18 string(REGEX MATCH "([^/]+)$" test_name ${test_dirname}) 19 if (CMAKE_BUILD_TYPE) 20 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY 21 ${CLANG_BINARY_DIR}/unittests/${test_dirname}/${CMAKE_BUILD_TYPE}) 22 else() 23 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY 24 ${CLANG_BINARY_DIR}/unittests/${test_dirname}) 25 endif() 26 if( NOT LLVM_BUILD_TESTS ) 27 set(EXCLUDE_FROM_ALL ON) 28 endif() 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") 32 endfunction() 33 34 add_custom_target(ClangUnitTests) 35 set_target_properties(ClangUnitTests PROPERTIES FOLDER "Clang tests") 36 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") 41 elseif( MSVC ) 42 llvm_replace_compiler_option(CMAKE_CXX_FLAGS "/GR" "/GR-") 43 endif() 44 45 if (NOT LLVM_ENABLE_THREADS) 46 add_definitions(-DGTEST_HAS_PTHREAD=0) 47 endif() 48 49 if(SUPPORTS_NO_VARIADIC_MACROS_FLAG) 50 add_definitions("-Wno-variadic-macros") 51 endif() 52 53 add_clang_unittest(AST 54 AST/APValueTest.cpp 55 USED_LIBS gtest gtest_main clangAST 56 ) 57 58 add_clang_unittest(Basic 59 Basic/FileManagerTest.cpp 60 USED_LIBS gtest gtest_main clangBasic 61 ) 62 63 add_clang_unittest(Frontend 64 Frontend/FrontendActionTest.cpp 65 USED_LIBS gtest gtest_main clangFrontend 66 ) 67