cmake: Add Profile-Guided Optimization (PGO) support
Adds support for Profile-Guided Optimization builds on both Windows (MSVC) and Linux (GCC/Clang) platforms. This allows for performance optimizations based on real usage patterns. For MSVC: - Adds /GL and /LTCG:PGINSTRUMENT flags for instrumentation - Adds /GL and /LTCG:PGOPTIMIZE flags for optimization For GCC: - Adds -fprofile-generate flags for instrumentation - Adds -fprofile-use flags for optimization For Clang: - Adds -fprofile-instr-generate flags for instrumentation - Adds -fprofile-instr-use flags for optimization Controlled by two new CMake options: - CITRON_ENABLE_PGO_INSTRUMENT: Enable instrumentation build - CITRON_ENABLE_PGO_OPTIMIZE: Enable optimization build Updated submodules: - Vulkan-Headers to 0f0cfd8 - Vulkan-Utility-Libraries to 50563f4 - vcpkg to cd1099f
This commit is contained in:
parent
a5125d008a
commit
6a31da5905
4 changed files with 42 additions and 3 deletions
|
@ -684,3 +684,42 @@ if(ENABLE_QT AND UNIX AND NOT APPLE)
|
|||
install(FILES "dist/org.citron_emu.citron.metainfo.xml"
|
||||
DESTINATION "share/metainfo")
|
||||
endif()
|
||||
|
||||
# PGO Configuration
|
||||
option(CITRON_ENABLE_PGO_INSTRUMENT "Enable Profile-Guided Optimization instrumentation build" OFF)
|
||||
option(CITRON_ENABLE_PGO_OPTIMIZE "Enable Profile-Guided Optimization optimization build" OFF)
|
||||
|
||||
if(MSVC)
|
||||
if(CITRON_ENABLE_PGO_INSTRUMENT)
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /GL /LTCG:PGINSTRUMENT")
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " /LTCG:PGINSTRUMENT")
|
||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " /LTCG:PGINSTRUMENT")
|
||||
elseif(CITRON_ENABLE_PGO_OPTIMIZE)
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /GL /LTCG:PGOPTIMIZE")
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " /LTCG:PGOPTIMIZE")
|
||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " /LTCG:PGOPTIMIZE")
|
||||
endif()
|
||||
else()
|
||||
# GCC and Clang PGO flags
|
||||
if(CITRON_ENABLE_PGO_INSTRUMENT)
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -fprofile-instr-generate")
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " -fprofile-instr-generate")
|
||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " -fprofile-instr-generate")
|
||||
else() # GCC
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -fprofile-generate")
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " -fprofile-generate")
|
||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " -fprofile-generate")
|
||||
endif()
|
||||
elseif(CITRON_ENABLE_PGO_OPTIMIZE)
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -fprofile-instr-use=default.profdata")
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " -fprofile-instr-use=default.profdata")
|
||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " -fprofile-instr-use=default.profdata")
|
||||
else() # GCC
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -fprofile-use")
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " -fprofile-use")
|
||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " -fprofile-use")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue