From d869045b77fc31f8555b04590b8982c4196bbd83 Mon Sep 17 00:00:00 2001 From: Zephyron Date: Thu, 13 Mar 2025 17:03:21 +1000 Subject: [PATCH] build: Move PGO configuration to earlier in CMakeLists.txt The Profile-Guided Optimization configuration was previously placed at the end of the CMakeLists.txt file, after all targets were already defined. This was causing the PGO flags to have no effect on the build process. This commit moves the PGO configuration to immediately after the initial compiler flags setup and before any targets are defined, ensuring that all targets will properly receive the PGO instrumentation or optimization flags when those options are enabled. This allows both CITRON_ENABLE_PGO_INSTRUMENT and CITRON_ENABLE_PGO_OPTIMIZE to function correctly for all build targets. Signed-off-by: Zephyron --- CMakeLists.txt | 78 +++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 90388bf09..0996d6d64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,45 @@ if (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-") 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() + # Check if SDL2::SDL2 target exists; if not, create an alias if (TARGET SDL2::SDL2-static) add_library(SDL2::SDL2 ALIAS SDL2::SDL2-static) @@ -684,42 +723,3 @@ 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()