include(LLVMParseArguments) # add_clang_unittest(test_dirname file1.cpp file2.cpp ... # [USED_LIBS lib1 lib2] # [LINK_COMPONENTS component1 component2]) # # Will compile the list of files together and link against the clang # libraries in the USED_LIBS list and the llvm-config components in # the LINK_COMPONENTS list. Produces a binary named # 'basename(test_dirname)Tests'. function(add_clang_unittest) PARSE_ARGUMENTS(CLANG_UNITTEST "USED_LIBS;LINK_COMPONENTS" "" ${ARGN}) set(LLVM_LINK_COMPONENTS ${CLANG_UNITTEST_LINK_COMPONENTS}) set(LLVM_USED_LIBS ${CLANG_UNITTEST_USED_LIBS}) list(GET CLANG_UNITTEST_DEFAULT_ARGS 0 test_dirname) list(REMOVE_AT CLANG_UNITTEST_DEFAULT_ARGS 0) string(REGEX MATCH "([^/]+)$" test_name ${test_dirname}) if (CMAKE_BUILD_TYPE) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CLANG_BINARY_DIR}/unittests/${test_dirname}/${CMAKE_BUILD_TYPE}) else() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CLANG_BINARY_DIR}/unittests/${test_dirname}) endif() if( NOT LLVM_BUILD_TESTS ) set(EXCLUDE_FROM_ALL ON) endif() add_clang_executable(${test_name}Tests ${CLANG_UNITTEST_DEFAULT_ARGS}) add_dependencies(ClangUnitTests ${test_name}Tests) set_target_properties(${test_name}Tests PROPERTIES FOLDER "Clang tests") endfunction() add_custom_target(ClangUnitTests) set_target_properties(ClangUnitTests PROPERTIES FOLDER "Clang tests") include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include) add_definitions(-DGTEST_HAS_RTTI=0) if( LLVM_COMPILER_IS_GCC_COMPATIBLE ) llvm_replace_compiler_option(CMAKE_CXX_FLAGS "-frtti" "-fno-rtti") elseif( MSVC ) llvm_replace_compiler_option(CMAKE_CXX_FLAGS "/GR" "/GR-") endif() if (NOT LLVM_ENABLE_THREADS) add_definitions(-DGTEST_HAS_PTHREAD=0) endif() if(SUPPORTS_NO_VARIADIC_MACROS_FLAG) add_definitions("-Wno-variadic-macros") endif() add_clang_unittest(Basic Basic/FileManagerTest.cpp Basic/SourceManagerTest.cpp USED_LIBS gtest gtest_main clangLex ) add_clang_unittest(Lex Lex/LexerTest.cpp USED_LIBS gtest gtest_main clangLex ) add_clang_unittest(Frontend Frontend/FrontendActionTest.cpp USED_LIBS gtest gtest_main clangFrontend )