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()