diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index c0db1ab3854..6504175d9e8 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -106,7 +106,7 @@ function(qtc_source_dir varName) endfunction() function(add_qtc_library name) - cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;ALLOW_ASCII_CASTS;UNVERSIONED;FEATURE_INFO" + cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;ALLOW_ASCII_CASTS;UNVERSIONED;FEATURE_INFO;SKIP_PCH" "DESTINATION;COMPONENT;SOURCES_PREFIX;BUILD_DEFAULT" "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;PUBLIC_DEFINES;INCLUDES;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;EXTRA_TRANSLATIONS;PROPERTIES" ${ARGN} ) @@ -252,7 +252,10 @@ function(add_qtc_library name) ARCHIVE_OUTPUT_DIRECTORY "${_output_binary_dir}/${IDE_LIBRARY_PATH}" ${_arg_PROPERTIES} ) - enable_pch(${name}) + + if (NOT _arg_SKIP_PCH) + enable_pch(${name}) + endif() if (WIN32 AND library_type STREQUAL "SHARED" AND NOT _arg_UNVERSIONED) # Match qmake naming scheme e.g. Library4.dll @@ -309,7 +312,7 @@ endfunction(add_qtc_library) function(add_qtc_plugin target_name) cmake_parse_arguments(_arg - "SKIP_DEBUG_CMAKE_FILE_CHECK;SKIP_INSTALL;INTERNAL_ONLY;SKIP_TRANSLATION;EXPORT" + "SKIP_DEBUG_CMAKE_FILE_CHECK;SKIP_INSTALL;INTERNAL_ONLY;SKIP_TRANSLATION;EXPORT;SKIP_PCH" "VERSION;COMPAT_VERSION;PLUGIN_JSON_IN;PLUGIN_PATH;PLUGIN_NAME;OUTPUT_NAME;BUILD_DEFAULT" "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;PUBLIC_DEFINES;INCLUDES;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;EXTRA_TRANSLATIONS;PLUGIN_DEPENDS;PLUGIN_RECOMMENDS;PLUGIN_TEST_DEPENDS;PROPERTIES" ${ARGN} @@ -518,7 +521,9 @@ function(add_qtc_plugin target_name) IMPORT_PREFIX "" ) endif() - enable_pch(${target_name}) + if (NOT _arg_SKIP_PCH) + enable_pch(${target_name}) + endif() if (NOT _arg_SKIP_INSTALL) if (_arg_EXPORT) @@ -591,7 +596,7 @@ function(extend_qtc_test target_name) endfunction() function(add_qtc_executable name) - cmake_parse_arguments(_arg "SKIP_INSTALL;SKIP_TRANSLATION;ALLOW_ASCII_CASTS" + cmake_parse_arguments(_arg "SKIP_INSTALL;SKIP_TRANSLATION;ALLOW_ASCII_CASTS;SKIP_PCH" "DESTINATION;COMPONENT;BUILD_DEFAULT" "CONDITION;DEPENDS;DEFINES;INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;EXTRA_TRANSLATIONS;PROPERTIES" ${ARGN}) @@ -692,7 +697,9 @@ function(add_qtc_executable name) VISIBILITY_INLINES_HIDDEN ON ${_arg_PROPERTIES} ) - enable_pch(${name}) + if (NOT _arg_SKIP_PCH) + enable_pch(${name}) + endif() if (NOT _arg_SKIP_INSTALL) unset(COMPONENT_OPTION) @@ -779,7 +786,7 @@ function(extend_qtc_executable name) endfunction() function(add_qtc_test name) - cmake_parse_arguments(_arg "GTEST" "TIMEOUT" "DEFINES;DEPENDS;INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC" ${ARGN}) + cmake_parse_arguments(_arg "GTEST" "TIMEOUT" "DEFINES;DEPENDS;INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;SKIP_PCH" ${ARGN}) foreach(dependency ${_arg_DEPENDS}) if (NOT TARGET ${dependency} AND NOT _arg_GTEST) @@ -820,7 +827,9 @@ function(add_qtc_test name) BUILD_RPATH "${_RPATH_BASE}/${_RPATH}" INSTALL_RPATH "${_RPATH_BASE}/${_RPATH}" ) - enable_pch(${name}) + if (NOT _arg_SKIP_PCH) + enable_pch(${name}) + endif() if (NOT _arg_GTEST) add_test(NAME ${name} COMMAND ${name}) diff --git a/cmake/QtCreatorAPIInternal.cmake b/cmake/QtCreatorAPIInternal.cmake index 45aa8246dbe..75da71d69ab 100644 --- a/cmake/QtCreatorAPIInternal.cmake +++ b/cmake/QtCreatorAPIInternal.cmake @@ -122,6 +122,17 @@ function(qtc_handle_sccache_support) endif() endfunction() +function(qtc_enable_release_for_debug_configuration) + if (MSVC) + string(REPLACE "/Od" "/O2" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") + string(REPLACE "/Ob0" "/Ob1" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") + string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") + else() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2") + endif() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" PARENT_SCOPE) +endfunction() + function(append_extra_translations target_name) if(NOT ARGN) return() diff --git a/src/libs/3rdparty/cplusplus/CMakeLists.txt b/src/libs/3rdparty/cplusplus/CMakeLists.txt index b8a8607a8c3..f2515c9c3a0 100644 --- a/src/libs/3rdparty/cplusplus/CMakeLists.txt +++ b/src/libs/3rdparty/cplusplus/CMakeLists.txt @@ -41,5 +41,14 @@ add_qtc_library(3rd_cplusplus OBJECT Type.cpp Type.h TypeVisitor.cpp TypeVisitor.h cppassert.h + SKIP_PCH PROPERTIES POSITION_INDEPENDENT_CODE ON ) + +if(TARGET 3rd_cplusplus) + qtc_enable_release_for_debug_configuration() + if (BUILD_WITH_PCH) + target_precompile_headers(3rd_cplusplus PRIVATE + "${QtCreator_SOURCE_DIR}/src/shared/qtcreator_gui_pch.h") + endif() +endif() diff --git a/src/libs/cplusplus/CMakeLists.txt b/src/libs/cplusplus/CMakeLists.txt index 9ca49291d4c..aa650c11b34 100644 --- a/src/libs/cplusplus/CMakeLists.txt +++ b/src/libs/cplusplus/CMakeLists.txt @@ -40,4 +40,13 @@ add_qtc_library(CPlusPlus pp-engine.h pp-scanner.cpp pp-scanner.h pp.h + SKIP_PCH ) + +if(TARGET CPlusPlus) + qtc_enable_release_for_debug_configuration() + if (BUILD_WITH_PCH) + target_precompile_headers(CPlusPlus PRIVATE + "${QtCreator_SOURCE_DIR}/src/shared/qtcreator_gui_pch.h") + endif() +endif()