aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2020-11-18 09:08:55 +0100
committerChristian Stenger <christian.stenger@qt.io>2020-11-23 11:07:49 +0000
commit6b62a99a8a7c37b119fc08a3b23ca386ba1cfe61 (patch)
tree6f61ba80f74a0c27dfeffdadeed14b8d85bc8085
parent05a1b2a6e8a048ae2c893e541e7d09ab46ec62e8 (diff)
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>
-rw-r--r--cmake/FindClang.cmake12
-rw-r--r--src/plugins/clangformat/CMakeLists.txt2
-rw-r--r--src/plugins/clangpchmanager/CMakeLists.txt2
-rw-r--r--src/plugins/clangrefactoring/CMakeLists.txt2
-rw-r--r--tests/unit/unittest/CMakeLists.txt5
5 files changed, 20 insertions, 3 deletions
diff --git a/cmake/FindClang.cmake b/cmake/FindClang.cmake
index 0e1f5db36c..3176db73b7 100644
--- a/cmake/FindClang.cmake
+++ b/cmake/FindClang.cmake
@@ -12,3 +12,15 @@ if (TARGET clangTooling AND NOT CLANGTOOLING_LINK_CLANG_DYLIB)
elseif (TARGET clang-cpp)
set(CLANG_TOOLING_LIBS libclang clang-cpp)
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()
diff --git a/src/plugins/clangformat/CMakeLists.txt b/src/plugins/clangformat/CMakeLists.txt
index 9e91349a3c..8359306426 100644
--- a/src/plugins/clangformat/CMakeLists.txt
+++ b/src/plugins/clangformat/CMakeLists.txt
@@ -1,5 +1,5 @@
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
INCLUDES "${CLANG_INCLUDE_DIRS}"
PLUGIN_DEPENDS Core TextEditor CppEditor CppTools ProjectExplorer
diff --git a/src/plugins/clangpchmanager/CMakeLists.txt b/src/plugins/clangpchmanager/CMakeLists.txt
index c1c9b29f93..bc637b5640 100644
--- a/src/plugins/clangpchmanager/CMakeLists.txt
+++ b/src/plugins/clangpchmanager/CMakeLists.txt
@@ -1,6 +1,6 @@
add_qtc_plugin(ClangPchManager
BUILD_DEFAULT OFF
- CONDITION TARGET libclang
+ CONDITION TARGET libclang AND QTC_CLANG_BUILDMODE_MATCH
DEPENDS ClangSupport CPlusPlus
DEFINES CLANGPCHMANAGER_LIB
PLUGIN_DEPENDS Core CppTools
diff --git a/src/plugins/clangrefactoring/CMakeLists.txt b/src/plugins/clangrefactoring/CMakeLists.txt
index 95c926dc2d..37b3221e45 100644
--- a/src/plugins/clangrefactoring/CMakeLists.txt
+++ b/src/plugins/clangrefactoring/CMakeLists.txt
@@ -1,6 +1,6 @@
add_qtc_plugin(ClangRefactoring
BUILD_DEFAULT OFF
- CONDITION TARGET libclang
+ CONDITION TARGET libclang AND QTC_CLANG_BUILDMODE_MATCH
DEPENDS ClangSupport CPlusPlus
PLUGIN_DEPENDS Core CppTools TextEditor ClangPchManager
SOURCES ${TEST_SOURCES}
diff --git a/tests/unit/unittest/CMakeLists.txt b/tests/unit/unittest/CMakeLists.txt
index e28079d40b..580e917cd0 100644
--- a/tests/unit/unittest/CMakeLists.txt
+++ b/tests/unit/unittest/CMakeLists.txt
@@ -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(GoogleBenchmark MODULE)