diff options
author | Eike Ziller <eike.ziller@qt.io> | 2021-06-17 11:44:01 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2021-06-22 10:10:14 +0000 |
commit | 4290c264147eafafa315703b9bcd3594ef0bc358 (patch) | |
tree | 24bac0eb605d87d4ab29e671f7a5cee5068d7f72 | |
parent | 69e18d7917ea5524191055d526bfa627581520e2 (diff) |
CMake build: Force optimization of CPlusPlus lib
Even in the debug build, as done for the qmake build system. This is for
performance optimization of this critical part for C++ parsing even in
debug / developer builds.
Change-Id: I9552ba9fc44e213f2df1d2d2a64a126af3603fd1
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
-rw-r--r-- | cmake/QtCreatorAPI.cmake | 25 | ||||
-rw-r--r-- | cmake/QtCreatorAPIInternal.cmake | 11 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/libs/cplusplus/CMakeLists.txt | 9 |
4 files changed, 46 insertions, 8 deletions
diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index c0db1ab385..6504175d9e 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 45aa8246db..75da71d69a 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 b8a8607a8c..f2515c9c3a 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 9ca49291d4..aa650c11b3 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() |