mirror of
https://github.com/stenzek/duckstation.git
synced 2024-11-23 05:49:43 +00:00
CMake: Add DISABLE_SSE4 option
NOT recommended. Only if you ABSOLUTELY need it. The SSE2/legacy build will be a separate download option, and warn you if you try to run it on a CPU that supports SSE4.
This commit is contained in:
parent
d67b826033
commit
bfc914aaa9
@ -5,6 +5,7 @@ option(BUILD_NOGUI_FRONTEND "Build the NoGUI frontend" OFF)
|
|||||||
option(BUILD_QT_FRONTEND "Build the Qt frontend" ON)
|
option(BUILD_QT_FRONTEND "Build the Qt frontend" ON)
|
||||||
option(BUILD_REGTEST "Build regression test runner" OFF)
|
option(BUILD_REGTEST "Build regression test runner" OFF)
|
||||||
option(BUILD_TESTS "Build unit tests" OFF)
|
option(BUILD_TESTS "Build unit tests" OFF)
|
||||||
|
option(DISABLE_SSE4 "Build with SSE4 instructions disabled, reduces performance" OFF)
|
||||||
|
|
||||||
if(LINUX OR BSD)
|
if(LINUX OR BSD)
|
||||||
option(ENABLE_X11 "Support X11 window system" ON)
|
option(ENABLE_X11 "Support X11 window system" ON)
|
||||||
|
@ -38,8 +38,7 @@ It does **not** use the LSB subdirectories of bin, share, etc, so you should dis
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT IS_SUPPORTED_COMPILER)
|
if(NOT IS_SUPPORTED_COMPILER)
|
||||||
message(WARNING "
|
message(WARNING "*************** UNSUPPORTED CONFIGURATION ***************
|
||||||
*************** UNSUPPORTED CONFIGURATION ***************
|
|
||||||
You are not compiling DuckStation with a supported compiler.
|
You are not compiling DuckStation with a supported compiler.
|
||||||
It may not even build successfully.
|
It may not even build successfully.
|
||||||
DuckStation only supports the Clang and MSVC compilers.
|
DuckStation only supports the Clang and MSVC compilers.
|
||||||
@ -48,11 +47,18 @@ No support will be provided, continue at your own risk.
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
message(WARNING "
|
message(WARNING "*************** UNSUPPORTED CONFIGURATION ***************
|
||||||
*************** UNSUPPORTED CONFIGURATION ***************
|
|
||||||
You are compiling DuckStation with CMake on Windows.
|
You are compiling DuckStation with CMake on Windows.
|
||||||
It may not even build successfully.
|
It may not even build successfully.
|
||||||
DuckStation only supports MSBuild on Windows.
|
DuckStation only supports MSBuild on Windows.
|
||||||
No support will be provided, continue at your own risk.
|
No support will be provided, continue at your own risk.
|
||||||
*********************************************************")
|
*********************************************************")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CPU_ARCH_X64 AND DISABLE_SSE4)
|
||||||
|
message(WARNING "*********************** WARNING ***********************
|
||||||
|
SSE4 instructions are disabled. This will result in
|
||||||
|
reduced performance. You should not enable this option
|
||||||
|
unless you have a pre-2008 CPU.
|
||||||
|
*******************************************************")
|
||||||
|
endif()
|
||||||
|
@ -69,7 +69,7 @@ function(detect_architecture)
|
|||||||
CMAKE_SIZEOF_VOID_P EQUAL 8)
|
CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
message(STATUS "Building x86_64 binaries.")
|
message(STATUS "Building x86_64 binaries.")
|
||||||
set(CPU_ARCH_X64 TRUE PARENT_SCOPE)
|
set(CPU_ARCH_X64 TRUE PARENT_SCOPE)
|
||||||
if(NOT MSVC OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
if(NOT MSVC OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT DISABLE_SSE4)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1" PARENT_SCOPE)
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1" PARENT_SCOPE)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1" PARENT_SCOPE)
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1" PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
|
@ -357,17 +357,19 @@ bool System::Internal::PerformEarlyHardwareChecks(Error* error)
|
|||||||
#ifdef CPU_ARCH_SSE41
|
#ifdef CPU_ARCH_SSE41
|
||||||
if (!cpuinfo_has_x86_sse4_1())
|
if (!cpuinfo_has_x86_sse4_1())
|
||||||
{
|
{
|
||||||
Error::SetStringFmt(error, "Your CPU does not support the SSE4.1 instruction set, which is required for this "
|
Error::SetStringFmt(
|
||||||
"version of DuckStation.\nPlease download and switch to the legacy SSE2 version.\nYou "
|
error, "<h3>Your CPU does not support the SSE4.1 instruction set.</h3><p>SSE4.1 is required for this version of "
|
||||||
"can download this from https://www.duckstation.org/ under \"Other Platforms\".");
|
"DuckStation. Please download and switch to the legacy SSE2 version.</p><p>You can download this from <a "
|
||||||
|
"href=\"https://www.duckstation.org/\">www.duckstation.org</a> under \"Other Platforms\".");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (cpuinfo_has_x86_sse4_1())
|
if (cpuinfo_has_x86_sse4_1())
|
||||||
{
|
{
|
||||||
Error::SetStringFmt(error, "You are running the legacy SSE2 DuckStation executable on a CPU that supports the "
|
Error::SetStringFmt(
|
||||||
"SSE4.1 instruction set.\nPlease download and switch the regular, non-SSE2 "
|
error, "You are running the <strong>legacy SSE2 DuckStation executable</strong> on a CPU that supports the "
|
||||||
"version.\nYou can download this from https://www.duckstation.org/.");
|
"SSE4.1 instruction set.\nPlease download and switch to the regular, non-SSE2 version.\nYou can download "
|
||||||
|
"this from <a href=\"https://www.duckstation.org/\">www.duckstation.org</a>.");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -2550,13 +2550,14 @@ int main(int argc, char* argv[])
|
|||||||
CrashHandler::Install(&Bus::CleanupMemoryMap);
|
CrashHandler::Install(&Bus::CleanupMemoryMap);
|
||||||
|
|
||||||
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||||
QtHost::RegisterTypes();
|
|
||||||
|
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
if (!QtHost::PerformEarlyHardwareChecks())
|
if (!QtHost::PerformEarlyHardwareChecks())
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
|
// Type registration has to happen after hardware checks, clang emits ptest instructions otherwise.
|
||||||
|
QtHost::RegisterTypes();
|
||||||
|
|
||||||
std::shared_ptr<SystemBootParameters> autoboot;
|
std::shared_ptr<SystemBootParameters> autoboot;
|
||||||
if (!QtHost::ParseCommandLineParametersAndInitializeConfig(app, autoboot))
|
if (!QtHost::ParseCommandLineParametersAndInitializeConfig(app, autoboot))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
Loading…
Reference in New Issue
Block a user