From 6773546d5c727b2ec0e8807f26f1e1796135bc5d Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Mon, 8 Jan 2018 17:54:37 +0100 Subject: [PATCH 1/4] CMakeLists: Disable architecture checks with -DENABLE_GENERIC=1 --- CMakeLists.txt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b7c7c48ab..25a5ef57e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,14 +65,16 @@ function(detect_architecture symbol arch) endif() endfunction() -if (MSVC) - detect_architecture("_M_AMD64" x86_64) - detect_architecture("_M_IX86" x86) - detect_architecture("_M_ARM" ARM) -else() - detect_architecture("__x86_64__" x86_64) - detect_architecture("__i386__" x86) - detect_architecture("__arm__" ARM) +if (NOT ENABLE_GENERIC) + if (MSVC) + detect_architecture("_M_AMD64" x86_64) + detect_architecture("_M_IX86" x86) + detect_architecture("_M_ARM" ARM) + else() + detect_architecture("__x86_64__" x86_64) + detect_architecture("__i386__" x86) + detect_architecture("__arm__" ARM) + endif() endif() if (NOT DEFINED ARCHITECTURE) set(ARCHITECTURE "GENERIC") From 2cd2a7491c075c0f3600356616fbd3b694482424 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Mon, 8 Jan 2018 17:58:00 +0100 Subject: [PATCH 2/4] =?UTF-8?q?CMakeLists:=20Disable=20dynarmic=20on=20?= =?UTF-8?q?=C2=ACx86=5F64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- externals/CMakeLists.txt | 12 +++++++----- src/core/CMakeLists.txt | 16 +++++++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 4a4ba1101..88cc52588 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -11,11 +11,13 @@ target_include_directories(catch-single-include INTERFACE catch/single_include) add_subdirectory(cryptopp) # Dynarmic -# Dynarmic will skip defining xbyak if it's already defined, we then define it below -add_library(xbyak INTERFACE) -option(DYNARMIC_TESTS OFF) -set(DYNARMIC_NO_BUNDLED_FMT ON) -add_subdirectory(dynarmic) +if (ARCHITECTURE_x86_64) + # Dynarmic will skip defining xbyak if it's already defined, we then define it below + add_library(xbyak INTERFACE) + option(DYNARMIC_TESTS OFF) + set(DYNARMIC_NO_BUNDLED_FMT ON) + add_subdirectory(dynarmic) +endif() # libfmt add_subdirectory(fmt) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 6057b183f..f6d6fd3d4 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,10 +1,6 @@ add_library(core STATIC 3ds.h arm/arm_interface.h - arm/dynarmic/arm_dynarmic.cpp - arm/dynarmic/arm_dynarmic.h - arm/dynarmic/arm_dynarmic_cp15.cpp - arm/dynarmic/arm_dynarmic_cp15.h arm/dyncom/arm_dyncom.cpp arm/dyncom/arm_dyncom.h arm/dyncom/arm_dyncom_dec.cpp @@ -404,7 +400,17 @@ add_library(core STATIC create_target_directory_groups(core) target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core) -target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp dynarmic fmt) +target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp fmt) if (ENABLE_WEB_SERVICE) target_link_libraries(core PUBLIC json-headers web_service) endif() + +if (ARCHITECTURE_x86_64) + add_library(core STATIC + arm/dynarmic/arm_dynarmic.cpp + arm/dynarmic/arm_dynarmic.h + arm/dynarmic/arm_dynarmic_cp15.cpp + arm/dynarmic/arm_dynarmic_cp15.h + ) + target_link_libraries(core PRIVATE dynarmic) +endif() From e5a3dc2956428d5a0a65e30ffd666d845db9d286 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Mon, 8 Jan 2018 17:58:24 +0100 Subject: [PATCH 3/4] Core: Disable the JIT when dynarmic is not available --- src/core/CMakeLists.txt | 2 +- src/core/core.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index f6d6fd3d4..54df27193 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -406,7 +406,7 @@ if (ENABLE_WEB_SERVICE) endif() if (ARCHITECTURE_x86_64) - add_library(core STATIC + target_sources(core PRIVATE arm/dynarmic/arm_dynarmic.cpp arm/dynarmic/arm_dynarmic.h arm/dynarmic/arm_dynarmic_cp15.cpp diff --git a/src/core/core.cpp b/src/core/core.cpp index 0c658d1ff..ad7474ff4 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -7,7 +7,9 @@ #include "audio_core/audio_core.h" #include "common/logging/log.h" #include "core/arm/arm_interface.h" +#ifdef ARCHITECTURE_x86_64 #include "core/arm/dynarmic/arm_dynarmic.h" +#endif #include "core/arm/dyncom/arm_dyncom.h" #include "core/core.h" #include "core/core_timing.h" @@ -147,7 +149,12 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { LOG_DEBUG(HW_Memory, "initialized OK"); if (Settings::values.use_cpu_jit) { +#ifdef ARCHITECTURE_x86_64 cpu_core = std::make_unique(USER32MODE); +#else + cpu_core = std::make_unique(USER32MODE); + LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available"); +#endif } else { cpu_core = std::make_unique(USER32MODE); } From 7f9fae5f7c2d4d4e4ad385fc48c397d8761fd13a Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Mon, 8 Jan 2018 17:59:42 +0100 Subject: [PATCH 4/4] =?UTF-8?q?Telemetry:=20Disable=20CPU=20detection=20on?= =?UTF-8?q?=20=C2=ACx86=5F64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/telemetry_session.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index ca517ff44..92abbeb5e 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -8,7 +8,9 @@ #include "common/assert.h" #include "common/file_util.h" #include "common/scm_rev.h" +#ifdef ARCHITECTURE_x86_64 #include "common/x64/cpu_detect.h" +#endif #include "core/core.h" #include "core/settings.h" #include "core/telemetry_session.h" @@ -20,6 +22,7 @@ namespace Core { +#ifdef ARCHITECTURE_x86_64 static const char* CpuVendorToStr(Common::CPUVendor vendor) { switch (vendor) { case Common::CPUVendor::INTEL: @@ -31,6 +34,7 @@ static const char* CpuVendorToStr(Common::CPUVendor vendor) { } UNREACHABLE(); } +#endif static u64 GenerateTelemetryId() { u64 telemetry_id{}; @@ -121,7 +125,8 @@ TelemetrySession::TelemetrySession() { AddField(Telemetry::FieldType::App, "BuildDate", Common::g_build_date); AddField(Telemetry::FieldType::App, "BuildName", Common::g_build_name); - // Log user system information +// Log user system information +#ifdef ARCHITECTURE_x86_64 AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); AddField(Telemetry::FieldType::UserSystem, "CPU_BrandString", Common::GetCPUCaps().brand_string); @@ -143,6 +148,9 @@ TelemetrySession::TelemetrySession() { Common::GetCPUCaps().sse4_1); AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_SSE42", Common::GetCPUCaps().sse4_2); +#else + AddField(Telemetry::FieldType::UserSystem, "CPU_Model", "Other"); +#endif #ifdef __APPLE__ AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Apple"); #elif defined(_WIN32)