summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2021-06-17 11:44:01 +0200
committerEike Ziller <eike.ziller@qt.io>2021-06-22 10:10:14 +0000
commit4290c264147eafafa315703b9bcd3594ef0bc358 (patch)
tree24bac0eb605d87d4ab29e671f7a5cee5068d7f72
parent69e18d7917ea5524191055d526bfa627581520e2 (diff)
downloadqt-creator-4290c264147eafafa315703b9bcd3594ef0bc358.tar.gz
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.cmake25
-rw-r--r--cmake/QtCreatorAPIInternal.cmake11
-rw-r--r--src/libs/3rdparty/cplusplus/CMakeLists.txt9
-rw-r--r--src/libs/cplusplus/CMakeLists.txt9
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()