cmake: Fix building debug with release libclang

Parts of QC cannot be linked against a release build of clangTooling
libs and vice versa when building on Windows.
Check whether the provided libs match the current build mode and
disable respective parts if necessary.
Re-use this information to decide whether unittest should be build
or not.

Change-Id: Ibc2aab0d7886e78ebbf8f15a43152efad49f1eff
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Christian Stenger
2020-11-18 09:08:55 +01:00
parent 05a1b2a6e8
commit 6b62a99a8a
5 changed files with 20 additions and 3 deletions

View File

@@ -12,3 +12,15 @@ if (TARGET clangTooling AND NOT CLANGTOOLING_LINK_CLANG_DYLIB)
elseif (TARGET clang-cpp) elseif (TARGET clang-cpp)
set(CLANG_TOOLING_LIBS libclang clang-cpp) set(CLANG_TOOLING_LIBS libclang clang-cpp)
endif() endif()
SET(QTC_CLANG_BUILDMODE_MATCH ON)
if (WIN32)
string(TOLOWER ${CMAKE_BUILD_TYPE} _type)
get_target_property(_llvmConfigs libclang IMPORTED_CONFIGURATIONS)
string(TOLOWER ${_llvmConfigs} _llvm_configs)
list(FIND _llvm_configs ${_type} _build_type_found)
if (_build_type_found LESS 0)
set(QTC_CLANG_BUILDMODE_MATCH OFF)
message("Build mode mismatch (debug vs release): limiting clangTooling")
endif()
endif()

View File

@@ -1,5 +1,5 @@
add_qtc_plugin(ClangFormat add_qtc_plugin(ClangFormat
CONDITION TARGET libclang AND LLVM_PACKAGE_VERSION VERSION_GREATER_EQUAL 10.0.0 CONDITION TARGET libclang AND LLVM_PACKAGE_VERSION VERSION_GREATER_EQUAL 10.0.0 AND QTC_CLANG_BUILDMODE_MATCH
DEPENDS Utils Qt5::Widgets clangFormat DEPENDS Utils Qt5::Widgets clangFormat
INCLUDES "${CLANG_INCLUDE_DIRS}" INCLUDES "${CLANG_INCLUDE_DIRS}"
PLUGIN_DEPENDS Core TextEditor CppEditor CppTools ProjectExplorer PLUGIN_DEPENDS Core TextEditor CppEditor CppTools ProjectExplorer

View File

@@ -1,6 +1,6 @@
add_qtc_plugin(ClangPchManager add_qtc_plugin(ClangPchManager
BUILD_DEFAULT OFF BUILD_DEFAULT OFF
CONDITION TARGET libclang CONDITION TARGET libclang AND QTC_CLANG_BUILDMODE_MATCH
DEPENDS ClangSupport CPlusPlus DEPENDS ClangSupport CPlusPlus
DEFINES CLANGPCHMANAGER_LIB DEFINES CLANGPCHMANAGER_LIB
PLUGIN_DEPENDS Core CppTools PLUGIN_DEPENDS Core CppTools

View File

@@ -1,6 +1,6 @@
add_qtc_plugin(ClangRefactoring add_qtc_plugin(ClangRefactoring
BUILD_DEFAULT OFF BUILD_DEFAULT OFF
CONDITION TARGET libclang CONDITION TARGET libclang AND QTC_CLANG_BUILDMODE_MATCH
DEPENDS ClangSupport CPlusPlus DEPENDS ClangSupport CPlusPlus
PLUGIN_DEPENDS Core CppTools TextEditor ClangPchManager PLUGIN_DEPENDS Core CppTools TextEditor ClangPchManager
SOURCES ${TEST_SOURCES} SOURCES ${TEST_SOURCES}

View File

@@ -1,3 +1,8 @@
if (NOT QTC_CLANG_BUILDMODE_MATCH)
message(STATUS "Skipping unittest due to build mode mismatch")
return()
endif()
find_package(Googletest MODULE) find_package(Googletest MODULE)
find_package(GoogleBenchmark MODULE) find_package(GoogleBenchmark MODULE)