diff options
-rw-r--r-- | cmake/QtAutoDetect.cmake | 6 | ||||
-rw-r--r-- | cmake/QtBuild.cmake | 9 | ||||
-rw-r--r-- | cmake/QtBuildInternals/QtBuildInternalsConfig.cmake | 18 |
3 files changed, 27 insertions, 6 deletions
diff --git a/cmake/QtAutoDetect.cmake b/cmake/QtAutoDetect.cmake index 6f06c48984..d5d93007ba 100644 --- a/cmake/QtAutoDetect.cmake +++ b/cmake/QtAutoDetect.cmake @@ -205,10 +205,10 @@ endfunction() function(qt_auto_detect_pch) set(default_value "ON") - if(CMAKE_OSX_ARCHITECTURES) + if(CMAKE_OSX_ARCHITECTURES AND CMAKE_VERSION VERSION_LESS 3.18.0 AND NOT QT_FORCE_PCH) list(LENGTH CMAKE_OSX_ARCHITECTURES arch_count) - # CMake doesn't currently support PCH when multiple architecture are set. This is the - # case for simulator_and_device builds. + # CMake versions lower than 3.18 don't support PCH when multiple architectures are set. + # This is the case for simulator_and_device builds. if(arch_count GREATER 1) set(default_value "OFF") message(WARNING "PCH support disabled due to usage of multiple architectures.") diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index dfe88d7da4..09ac0d0bb8 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -1092,7 +1092,7 @@ endfunction() function(qt_update_precompiled_header target precompiled_header) if (precompiled_header AND BUILD_WITH_PCH) - set_property(TARGET "${target}" APPEND PROPERTY "PRECOMPILE_HEADERS" "$<$<COMPILE_LANGUAGE:CXX>:${precompiled_header}>") + set_property(TARGET "${target}" APPEND PROPERTY "PRECOMPILE_HEADERS" "$<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>:${precompiled_header}>") endif() endfunction() @@ -1113,8 +1113,11 @@ function(qt_update_ignore_pch_source target sources) endfunction() function(qt_ignore_pch_obj_c_sources target sources) - list(FILTER sources INCLUDE REGEX "\\.mm$") - qt_update_ignore_pch_source("${target}" "${sources}") + # No obj-cxx PCH support for versions lower than 3.16. + if(CMAKE_VERSION VERSION_LESS 3.16.0) + list(FILTER sources INCLUDE REGEX "\\.mm$") + qt_update_ignore_pch_source("${target}" "${sources}") + endif() endfunction() # This function can be used to add sources/libraries/etc. to the specified CMake target diff --git a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake index cff3abb97b..3265fea7b2 100644 --- a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake +++ b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake @@ -65,8 +65,26 @@ macro(qt_build_internals_set_up_private_api) qt_check_if_tools_will_be_built() endmacro() +macro(qt_enable_cmake_languages) + include(CheckLanguage) + set(__qt_required_language_list C CXX) + set(__qt_optional_language_list OBJC OBJCXX) + + foreach(__qt_lang ${__qt_required_language_list}) + enable_language(${__qt_lang}) + endforeach() + + foreach(__qt_lang ${__qt_optional_language_list}) + check_language(${__qt_lang}) + if(CMAKE_${__qt_lang}_COMPILER) + enable_language(${__qt_lang}) + endif() + endforeach() +endmacro() + macro(qt_build_repo_begin) qt_build_internals_set_up_private_api() + qt_enable_cmake_languages() # Add global docs targets that will work both for per-repo builds, and super builds. if(NOT TARGET docs) |