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(AST
AST/APValueTest.cpp
USED_LIBS gtest gtest_main clangAST
)
add_clang_unittest(Basic
Basic/FileManagerTest.cpp
USED_LIBS gtest gtest_main clangBasic
)
add_clang_unittest(Frontend
Frontend/FrontendActionTest.cpp
USED_LIBS gtest gtest_main clangFrontend
)