diff --git a/ps2xRuntime/CMakeLists.txt b/ps2xRuntime/CMakeLists.txt index e4dc1956d..7d6e6a8c7 100644 --- a/ps2xRuntime/CMakeLists.txt +++ b/ps2xRuntime/CMakeLists.txt @@ -552,6 +552,9 @@ if(PS2X_IS_VITA) endif() endif() +# PUBLIC, so recompiled game code linking against ps2_runtime inherits it. +EnableX86SimdBaseline(ps2_runtime) + if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") EnableFastReleaseMode(ps2_runtime) EnableFastReleaseMode(ps2EntryRunner) diff --git a/ps2xRuntime/cmake/ReleaseMode.cmake b/ps2xRuntime/cmake/ReleaseMode.cmake index 92ef0d54d..511fb787d 100644 --- a/ps2xRuntime/cmake/ReleaseMode.cmake +++ b/ps2xRuntime/cmake/ReleaseMode.cmake @@ -2,6 +2,21 @@ include(CheckIPOSupported) check_ipo_supported(RESULT IPO_SUPPORTED OUTPUT IPO_ERROR) +# SSE4.1 is required to compile, not an optimisation: ps2_runtime.h includes +# and the recompiler emits SSE4.1-only intrinsics. GCC and Clang +# default to the SSE2 baseline, so those TUs fail without this. Kept out of +# EnableFastReleaseMode because it applies to every configuration, not just +# Release. +function(EnableX86SimdBaseline TargetName) + if(MSVC) + return() + endif() + if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64|i[3-6]86|x86)$") + return() + endif() + target_compile_options(${TargetName} PUBLIC -msse4.1) +endfunction() + function(EnableFastReleaseMode TargetName) message("> Enabling optimization for: ${TargetName}") if(MSVC)