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>
This commit is contained in:
Eike Ziller
2021-06-17 11:44:01 +02:00
parent 69e18d7917
commit 4290c26414
4 changed files with 46 additions and 8 deletions

View File

@@ -106,7 +106,7 @@ function(qtc_source_dir varName)
endfunction() endfunction()
function(add_qtc_library name) 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" "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} "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}" ARCHIVE_OUTPUT_DIRECTORY "${_output_binary_dir}/${IDE_LIBRARY_PATH}"
${_arg_PROPERTIES} ${_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) if (WIN32 AND library_type STREQUAL "SHARED" AND NOT _arg_UNVERSIONED)
# Match qmake naming scheme e.g. Library4.dll # Match qmake naming scheme e.g. Library4.dll
@@ -309,7 +312,7 @@ endfunction(add_qtc_library)
function(add_qtc_plugin target_name) function(add_qtc_plugin target_name)
cmake_parse_arguments(_arg 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" "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" "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} ${ARGN}
@@ -518,7 +521,9 @@ function(add_qtc_plugin target_name)
IMPORT_PREFIX "" IMPORT_PREFIX ""
) )
endif() endif()
enable_pch(${target_name}) if (NOT _arg_SKIP_PCH)
enable_pch(${target_name})
endif()
if (NOT _arg_SKIP_INSTALL) if (NOT _arg_SKIP_INSTALL)
if (_arg_EXPORT) if (_arg_EXPORT)
@@ -591,7 +596,7 @@ function(extend_qtc_test target_name)
endfunction() endfunction()
function(add_qtc_executable name) 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" "DESTINATION;COMPONENT;BUILD_DEFAULT"
"CONDITION;DEPENDS;DEFINES;INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;EXTRA_TRANSLATIONS;PROPERTIES" ${ARGN}) "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 VISIBILITY_INLINES_HIDDEN ON
${_arg_PROPERTIES} ${_arg_PROPERTIES}
) )
enable_pch(${name}) if (NOT _arg_SKIP_PCH)
enable_pch(${name})
endif()
if (NOT _arg_SKIP_INSTALL) if (NOT _arg_SKIP_INSTALL)
unset(COMPONENT_OPTION) unset(COMPONENT_OPTION)
@@ -779,7 +786,7 @@ function(extend_qtc_executable name)
endfunction() endfunction()
function(add_qtc_test name) 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}) foreach(dependency ${_arg_DEPENDS})
if (NOT TARGET ${dependency} AND NOT _arg_GTEST) if (NOT TARGET ${dependency} AND NOT _arg_GTEST)
@@ -820,7 +827,9 @@ function(add_qtc_test name)
BUILD_RPATH "${_RPATH_BASE}/${_RPATH}" BUILD_RPATH "${_RPATH_BASE}/${_RPATH}"
INSTALL_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) if (NOT _arg_GTEST)
add_test(NAME ${name} COMMAND ${name}) add_test(NAME ${name} COMMAND ${name})

View File

@@ -122,6 +122,17 @@ function(qtc_handle_sccache_support)
endif() endif()
endfunction() 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) function(append_extra_translations target_name)
if(NOT ARGN) if(NOT ARGN)
return() return()

View File

@@ -41,5 +41,14 @@ add_qtc_library(3rd_cplusplus OBJECT
Type.cpp Type.h Type.cpp Type.h
TypeVisitor.cpp TypeVisitor.h TypeVisitor.cpp TypeVisitor.h
cppassert.h cppassert.h
SKIP_PCH
PROPERTIES POSITION_INDEPENDENT_CODE ON 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()

View File

@@ -40,4 +40,13 @@ add_qtc_library(CPlusPlus
pp-engine.h pp-scanner.cpp pp-engine.h pp-scanner.cpp
pp-scanner.h pp-scanner.h
pp.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()