diff options
Diffstat (limited to 'cmake/FindWrapLibClang.cmake')
-rw-r--r-- | cmake/FindWrapLibClang.cmake | 82 |
1 files changed, 50 insertions, 32 deletions
diff --git a/cmake/FindWrapLibClang.cmake b/cmake/FindWrapLibClang.cmake index c89dd8cde..b3ef7cd82 100644 --- a/cmake/FindWrapLibClang.cmake +++ b/cmake/FindWrapLibClang.cmake @@ -1,6 +1,9 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + if(TARGET WrapLibClang::WrapLibClang) - set(WrapLibClang_FOUND TRUE) - return() + set(WrapLibClang_FOUND TRUE) + return() endif() if(DEFINED ENV{LLVM_INSTALL_DIR}) @@ -12,6 +15,11 @@ elseif(DEFINED CACHE{LLVM_INSTALL_DIR}) endif() find_package(Clang CONFIG) +# LLVM versions >= 16 come with Findzstd.cmake that creates a target for libzstd. +# Disable its global promotion to prevent interference with FindWrapZSTD.cmake. +if(TARGET zstd::libzstd_shared) + qt_internal_disable_find_package_global_promotion(zstd::libzstd_shared) +endif() if(__qt_wrap_clang_backup_prefix) set(CMAKE_PREFIX_PATH "${__qt_wrap_clang_backup_prefix}") @@ -28,41 +36,51 @@ if(WrapLibClang_FIND_VERSION AND LLVM_PACKAGE_VERSION endif() if(TARGET libclang AND ((TARGET clang-cpp AND TARGET LLVM) OR TARGET clangHandleCXX) AND __wrap_lib_clang_requested_version_found) - set(WrapLibClang_FOUND TRUE) + set(WrapLibClang_FOUND TRUE) - get_target_property(type libclang TYPE) - if (MSVC AND type STREQUAL "STATIC_LIBRARY") - if (NOT CMAKE_BUILD_TYPE MATCHES "(Release|MinSizeRel|RelWithDebInfo)") - message(STATUS "Static linkage against libclang with MSVC was requested, but the build is not a release build, therefore libclang cannot be used.") - set(WrapLibClang_FOUND FALSE) + get_target_property(type libclang TYPE) + if (MSVC AND type STREQUAL "STATIC_LIBRARY") + get_property(__wrap_lib_clang_multi_config + GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(__wrap_lib_clang_multi_config) + set(__wrap_lib_clang_configs ${CMAKE_CONFIGURATION_TYPES}) + else() + set(__wrap_lib_clang_configs ${CMAKE_BUILD_TYPE}) + endif() + set(__wrap_lib_clang_non_release_configs ${configs}) + list(REMOVE_ITEM __wrap_lib_clang_non_release_configs + Release MinSizeRel RelWithDebInfo) + if(__wrap_lib_clang_non_release_configs STREQUAL __wrap_lib_clang_configs) + message(STATUS "Static linkage against libclang with MSVC was requested, but the build is not a release build, therefore libclang cannot be used.") + set(WrapLibClang_FOUND FALSE) + endif() endif() - endif() - if(WrapLibClang_FOUND) - add_library(WrapLibClang::WrapLibClang IMPORTED INTERFACE) + if(WrapLibClang_FOUND) + add_library(WrapLibClang::WrapLibClang IMPORTED INTERFACE) - target_include_directories(WrapLibClang::WrapLibClang INTERFACE ${CLANG_INCLUDE_DIRS}) - if (NOT TARGET Threads::Threads) - find_package(Threads) - endif() - qt_internal_disable_find_package_global_promotion(Threads::Threads) - # lupdate must also link to LLVM when using clang-cpp - set(__qt_clang_genex_condition "$<AND:$<TARGET_EXISTS:clang-cpp>,$<TARGET_EXISTS:LLVM>>") - set(__qt_clang_genex "$<IF:${__qt_clang_genex_condition},clang-cpp;LLVM,clangHandleCXX>") - target_link_libraries(WrapLibClang::WrapLibClang - INTERFACE libclang - ${__qt_clang_genex} - Threads::Threads - ) + target_include_directories(WrapLibClang::WrapLibClang INTERFACE ${CLANG_INCLUDE_DIRS}) + if (NOT TARGET Threads::Threads) + find_package(Threads) + endif() + qt_internal_disable_find_package_global_promotion(Threads::Threads) + # lupdate must also link to LLVM when using clang-cpp + set(__qt_clang_genex_condition "$<AND:$<TARGET_EXISTS:clang-cpp>,$<TARGET_EXISTS:LLVM>>") + set(__qt_clang_genex "$<IF:${__qt_clang_genex_condition},clang-cpp;LLVM,clangHandleCXX>") + target_link_libraries(WrapLibClang::WrapLibClang + INTERFACE libclang + "${__qt_clang_genex}" + Threads::Threads + ) - foreach(version MAJOR MINOR PATCH) - set(QT_LIB_CLANG_VERSION_${version} ${LLVM_VERSION_${version}} CACHE STRING "" FORCE) - endforeach() - set(QT_LIB_CLANG_VERSION ${LLVM_PACKAGE_VERSION} CACHE STRING "" FORCE) - set(QT_LIB_CLANG_LIBDIR "${LLVM_LIBRARY_DIRS}" CACHE STRING "" FORCE) - set(QT_LIBCLANG_RESOURCE_DIR - "\"${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}/include\"" CACHE STRING "" FORCE) - endif() + foreach(version MAJOR MINOR PATCH) + set(QT_LIB_CLANG_VERSION_${version} ${LLVM_VERSION_${version}} CACHE STRING "" FORCE) + endforeach() + set(QT_LIB_CLANG_VERSION ${LLVM_PACKAGE_VERSION} CACHE STRING "" FORCE) + set(QT_LIB_CLANG_LIBDIR "${LLVM_LIBRARY_DIRS}" CACHE STRING "" FORCE) + set(QT_LIBCLANG_RESOURCE_DIR + "\"${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}/include\"" CACHE STRING "" FORCE) + endif() endif() include(FindPackageHandleStandardArgs) |