mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	build: Update to support multi-arch builds.
This commit is contained in:
		
							parent
							
								
									0e325255f3
								
							
						
					
					
						commit
						a8848cce43
					
				
					 25 changed files with 114 additions and 66 deletions
				
			
		|  | @ -146,14 +146,14 @@ function(detect_architecture symbol arch) | ||||||
|         # CMake's crazy scope rules will keep it defined |         # CMake's crazy scope rules will keep it defined | ||||||
|         if (ARCHITECTURE_${arch}) |         if (ARCHITECTURE_${arch}) | ||||||
|             set(ARCHITECTURE "${arch}" PARENT_SCOPE) |             set(ARCHITECTURE "${arch}" PARENT_SCOPE) | ||||||
|             set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) |  | ||||||
|             add_definitions(-DARCHITECTURE_${arch}=1) |  | ||||||
|         endif() |         endif() | ||||||
|     endif() |     endif() | ||||||
| endfunction() | endfunction() | ||||||
| 
 | 
 | ||||||
| if (NOT ENABLE_GENERIC) | if (NOT ENABLE_GENERIC) | ||||||
|     if (MSVC) |     if (CMAKE_OSX_ARCHITECTURES) | ||||||
|  |         set(ARCHITECTURE "${CMAKE_OSX_ARCHITECTURES}") | ||||||
|  |     elseif (MSVC) | ||||||
|         detect_architecture("_M_AMD64" x86_64) |         detect_architecture("_M_AMD64" x86_64) | ||||||
|         detect_architecture("_M_IX86" x86) |         detect_architecture("_M_IX86" x86) | ||||||
|         detect_architecture("_M_ARM" arm) |         detect_architecture("_M_ARM" arm) | ||||||
|  | @ -167,8 +167,6 @@ if (NOT ENABLE_GENERIC) | ||||||
| endif() | endif() | ||||||
| if (NOT DEFINED ARCHITECTURE) | if (NOT DEFINED ARCHITECTURE) | ||||||
|     set(ARCHITECTURE "GENERIC") |     set(ARCHITECTURE "GENERIC") | ||||||
|     set(ARCHITECTURE_GENERIC 1) |  | ||||||
|     add_definitions(-DARCHITECTURE_GENERIC=1) |  | ||||||
| endif() | endif() | ||||||
| message(STATUS "Target architecture: ${ARCHITECTURE}") | message(STATUS "Target architecture: ${ARCHITECTURE}") | ||||||
| 
 | 
 | ||||||
|  | @ -194,7 +192,7 @@ find_package(Threads REQUIRED) | ||||||
| 
 | 
 | ||||||
| if (ENABLE_QT) | if (ENABLE_QT) | ||||||
|     if (CITRA_USE_BUNDLED_QT) |     if (CITRA_USE_BUNDLED_QT) | ||||||
|         if (MSVC_VERSION GREATER_EQUAL 1920 AND ARCHITECTURE_x86_64) |         if (MSVC_VERSION GREATER_EQUAL 1920 AND "x86_64" IN_LIST ARCHITECTURE) | ||||||
|             set(QT_VER qt-5.15.7-msvc2019_64) |             set(QT_VER qt-5.15.7-msvc2019_64) | ||||||
|         else() |         else() | ||||||
|             message(FATAL_ERROR "No bundled Qt binaries for your toolchain. Disable CITRA_USE_BUNDLED_QT and provide your own.") |             message(FATAL_ERROR "No bundled Qt binaries for your toolchain. Disable CITRA_USE_BUNDLED_QT and provide your own.") | ||||||
|  | @ -231,7 +229,7 @@ endif() | ||||||
| 
 | 
 | ||||||
| if (ENABLE_FFMPEG) | if (ENABLE_FFMPEG) | ||||||
|     if (CITRA_USE_BUNDLED_FFMPEG) |     if (CITRA_USE_BUNDLED_FFMPEG) | ||||||
|         if ((MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1940) AND ARCHITECTURE_x86_64) |         if ((MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1940) AND "x86_64" IN_LIST ARCHITECTURE) | ||||||
|             set(FFmpeg_VER "ffmpeg-4.1-win64") |             set(FFmpeg_VER "ffmpeg-4.1-win64") | ||||||
|         else() |         else() | ||||||
|             message(FATAL_ERROR "No bundled FFmpeg binaries for your toolchain. Disable CITRA_USE_BUNDLED_FFMPEG and provide your own.") |             message(FATAL_ERROR "No bundled FFmpeg binaries for your toolchain. Disable CITRA_USE_BUNDLED_FFMPEG and provide your own.") | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							|  | @ -37,12 +37,12 @@ option(FMT_INSTALL "" ON) | ||||||
| add_subdirectory(fmt) | add_subdirectory(fmt) | ||||||
| 
 | 
 | ||||||
| # Xbyak | # Xbyak | ||||||
| if (ARCHITECTURE_x86_64) | if ("x86_64" IN_LIST ARCHITECTURE) | ||||||
|     add_subdirectory(xbyak) |     add_subdirectory(xbyak) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| # Dynarmic | # Dynarmic | ||||||
| if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE) | ||||||
|     set(DYNARMIC_TESTS OFF) |     set(DYNARMIC_TESTS OFF) | ||||||
|     set(DYNARMIC_FRONTENDS "A32") |     set(DYNARMIC_FRONTENDS "A32") | ||||||
|     add_subdirectory(dynarmic) |     add_subdirectory(dynarmic) | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								externals/dynarmic
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								externals/dynarmic
									
										
									
									
										vendored
									
									
								
							|  | @ -1 +1 @@ | ||||||
| Subproject commit cd2bee17f20d8ec1df09f458c0f75114b65ed470 | Subproject commit 9af4b970d302389829448a30608c7cb4fce9b662 | ||||||
|  | @ -60,6 +60,7 @@ | ||||||
| #include "citra_qt/uisettings.h" | #include "citra_qt/uisettings.h" | ||||||
| #include "citra_qt/updater/updater.h" | #include "citra_qt/updater/updater.h" | ||||||
| #include "citra_qt/util/clickable_label.h" | #include "citra_qt/util/clickable_label.h" | ||||||
|  | #include "common/arch.h" | ||||||
| #include "common/common_paths.h" | #include "common/common_paths.h" | ||||||
| #include "common/detached_tasks.h" | #include "common/detached_tasks.h" | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
|  | @ -73,7 +74,7 @@ | ||||||
| #include "common/scm_rev.h" | #include "common/scm_rev.h" | ||||||
| #include "common/scope_exit.h" | #include "common/scope_exit.h" | ||||||
| #include "common/string_util.h" | #include "common/string_util.h" | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
| #include "common/x64/cpu_detect.h" | #include "common/x64/cpu_detect.h" | ||||||
| #endif | #endif | ||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
|  | @ -204,7 +205,7 @@ GMainWindow::GMainWindow() | ||||||
| 
 | 
 | ||||||
|     LOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch, |     LOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch, | ||||||
|              Common::g_scm_desc); |              Common::g_scm_desc); | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
|     const auto& caps = Common::GetCPUCaps(); |     const auto& caps = Common::GetCPUCaps(); | ||||||
|     std::string cpu_string = caps.cpu_string; |     std::string cpu_string = caps.cpu_string; | ||||||
|     if (caps.avx || caps.avx2 || caps.avx512) { |     if (caps.avx || caps.avx2 || caps.avx512) { | ||||||
|  |  | ||||||
|  | @ -54,6 +54,8 @@ add_custom_command(OUTPUT scm_rev.cpp | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| add_library(common STATIC | add_library(common STATIC | ||||||
|  |     aarch64/cpu_detect.cpp | ||||||
|  |     aarch64/cpu_detect.h | ||||||
|     alignment.h |     alignment.h | ||||||
|     announce_multiplayer_room.h |     announce_multiplayer_room.h | ||||||
|     archives.h |     archives.h | ||||||
|  | @ -124,26 +126,13 @@ add_library(common STATIC | ||||||
|     timer.h |     timer.h | ||||||
|     vector_math.h |     vector_math.h | ||||||
|     web_result.h |     web_result.h | ||||||
|     zstd_compression.cpp |  | ||||||
|     zstd_compression.h |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| if(ARCHITECTURE_x86_64) |  | ||||||
|     target_sources(common |  | ||||||
|         PRIVATE |  | ||||||
|     x64/cpu_detect.cpp |     x64/cpu_detect.cpp | ||||||
| 
 |  | ||||||
|     x64/cpu_detect.h |     x64/cpu_detect.h | ||||||
|     x64/xbyak_abi.h |     x64/xbyak_abi.h | ||||||
|     x64/xbyak_util.h |     x64/xbyak_util.h | ||||||
|     ) |     zstd_compression.cpp | ||||||
| elseif(ARCHITECTURE_arm64) |     zstd_compression.h | ||||||
|     target_sources(common | ) | ||||||
|         PRIVATE |  | ||||||
|             aarch64/cpu_detect.cpp |  | ||||||
|             aarch64/cpu_detect.h |  | ||||||
|     ) |  | ||||||
| endif() |  | ||||||
| 
 | 
 | ||||||
| create_target_directory_groups(common) | create_target_directory_groups(common) | ||||||
| 
 | 
 | ||||||
|  | @ -151,7 +140,7 @@ target_link_libraries(common PUBLIC fmt::fmt microprofile Boost::boost Boost::se | ||||||
| target_link_libraries(common PRIVATE libzstd_static) | target_link_libraries(common PRIVATE libzstd_static) | ||||||
| set_target_properties(common PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO}) | set_target_properties(common PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO}) | ||||||
| 
 | 
 | ||||||
| if (ARCHITECTURE_x86_64) | if ("x86_64" IN_LIST ARCHITECTURE) | ||||||
|     target_link_libraries(common PRIVATE xbyak) |     target_link_libraries(common PRIVATE xbyak) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,6 +2,9 @@ | ||||||
| // Licensed under GPLv2+
 | // Licensed under GPLv2+
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(arm64) | ||||||
|  | 
 | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <fstream> | #include <fstream> | ||||||
| #include <string> | #include <string> | ||||||
|  | @ -110,3 +113,5 @@ const CPUCaps& GetCPUCaps() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Common
 | } // namespace Common
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(arm64)
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(arm64) | ||||||
|  | 
 | ||||||
| #include <string> | #include <string> | ||||||
| 
 | 
 | ||||||
| namespace Common { | namespace Common { | ||||||
|  | @ -29,3 +32,5 @@ struct CPUCaps { | ||||||
| const CPUCaps& GetCPUCaps(); | const CPUCaps& GetCPUCaps(); | ||||||
| 
 | 
 | ||||||
| } // namespace Common
 | } // namespace Common
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(arm64)
 | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								src/common/arch.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/common/arch.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | // Copyright 2023 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <boost/predef.h> | ||||||
|  | 
 | ||||||
|  | #define CITRA_ARCH(NAME) (CITRA_ARCH_##NAME) | ||||||
|  | 
 | ||||||
|  | #define CITRA_ARCH_x86_64 BOOST_ARCH_X86_64 | ||||||
|  | #define CITRA_ARCH_arm64                                                                           \ | ||||||
|  |     (BOOST_ARCH_ARM >= BOOST_VERSION_NUMBER(8, 0, 0) && BOOST_ARCH_WORD_BITS == 64) | ||||||
|  | @ -5,8 +5,9 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <string> | #include <string> | ||||||
|  | #include "common/arch.h" | ||||||
| 
 | 
 | ||||||
| #if !defined(ARCHITECTURE_x86_64) | #if !CITRA_ARCH(x86_64) | ||||||
| #include <cstdlib> // for exit
 | #include <cstdlib> // for exit
 | ||||||
| #endif | #endif | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | @ -36,7 +37,7 @@ | ||||||
| 
 | 
 | ||||||
| #ifndef _MSC_VER | #ifndef _MSC_VER | ||||||
| 
 | 
 | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
| #define Crash() __asm__ __volatile__("int $3") | #define Crash() __asm__ __volatile__("int $3") | ||||||
| #else | #else | ||||||
| #define Crash() exit(1) | #define Crash() exit(1) | ||||||
|  |  | ||||||
|  | @ -4,11 +4,12 @@ | ||||||
| 
 | 
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <cstring> | #include <cstring> | ||||||
|  | #include "common/arch.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/scm_rev.h" | #include "common/scm_rev.h" | ||||||
| #include "common/telemetry.h" | #include "common/telemetry.h" | ||||||
| 
 | 
 | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
| #include "common/x64/cpu_detect.h" | #include "common/x64/cpu_detect.h" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -54,7 +55,7 @@ void AppendBuildInfo(FieldCollection& fc) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void AppendCPUInfo(FieldCollection& fc) { | void AppendCPUInfo(FieldCollection& fc) { | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
|     fc.AddField(FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); |     fc.AddField(FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); | ||||||
|     fc.AddField(FieldType::UserSystem, "CPU_BrandString", Common::GetCPUCaps().brand_string); |     fc.AddField(FieldType::UserSystem, "CPU_BrandString", Common::GetCPUCaps().brand_string); | ||||||
|     fc.AddField(FieldType::UserSystem, "CPU_Extension_x64_AES", Common::GetCPUCaps().aes); |     fc.AddField(FieldType::UserSystem, "CPU_Extension_x64_AES", Common::GetCPUCaps().aes); | ||||||
|  |  | ||||||
|  | @ -2,6 +2,9 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/x64/cpu_detect.h" | #include "common/x64/cpu_detect.h" | ||||||
|  | @ -144,3 +147,5 @@ const CPUCaps& GetCPUCaps() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Common
 | } // namespace Common
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| namespace Common { | namespace Common { | ||||||
| 
 | 
 | ||||||
| /// x86/x64 CPU capabilities that may be detected by this module
 | /// x86/x64 CPU capabilities that may be detected by this module
 | ||||||
|  | @ -33,3 +36,5 @@ struct CPUCaps { | ||||||
| const CPUCaps& GetCPUCaps(); | const CPUCaps& GetCPUCaps(); | ||||||
| 
 | 
 | ||||||
| } // namespace Common
 | } // namespace Common
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include <bitset> | #include <bitset> | ||||||
| #include <initializer_list> | #include <initializer_list> | ||||||
| #include <xbyak/xbyak.h> | #include <xbyak/xbyak.h> | ||||||
|  | @ -228,3 +231,5 @@ inline void ABI_PopRegistersAndAdjustStack(Xbyak::CodeGenerator& code, std::bits | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Common::X64
 | } // namespace Common::X64
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include <type_traits> | #include <type_traits> | ||||||
| #include <xbyak/xbyak.h> | #include <xbyak/xbyak.h> | ||||||
| #include "common/x64/xbyak_abi.h" | #include "common/x64/xbyak_abi.h" | ||||||
|  | @ -45,3 +48,5 @@ inline void CallFarFunction(Xbyak::CodeGenerator& code, const T f) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Common::X64
 | } // namespace Common::X64
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -488,7 +488,7 @@ if (ENABLE_WEB_SERVICE) | ||||||
|     endif() |     endif() | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE) | ||||||
|     target_sources(core PRIVATE |     target_sources(core PRIVATE | ||||||
|         arm/dynarmic/arm_dynarmic.cpp |         arm/dynarmic/arm_dynarmic.cpp | ||||||
|         arm/dynarmic/arm_dynarmic.h |         arm/dynarmic/arm_dynarmic.h | ||||||
|  |  | ||||||
|  | @ -1,7 +1,8 @@ | ||||||
| // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | ||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| 
 | 
 | ||||||
| #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64) | ||||||
| #include "core/arm/dynarmic/arm_exclusive_monitor.h" | #include "core/arm/dynarmic/arm_exclusive_monitor.h" | ||||||
| #endif | #endif | ||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
|  | @ -14,7 +15,7 @@ ExclusiveMonitor::~ExclusiveMonitor() = default; | ||||||
| 
 | 
 | ||||||
| std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::MemorySystem& memory, | std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::MemorySystem& memory, | ||||||
|                                                              std::size_t num_cores) { |                                                              std::size_t num_cores) { | ||||||
| #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) | #if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64) | ||||||
|     if (Settings::values.use_cpu_jit) { |     if (Settings::values.use_cpu_jit) { | ||||||
|         return std::make_unique<Core::DynarmicExclusiveMonitor>(memory, num_cores); |         return std::make_unique<Core::DynarmicExclusiveMonitor>(memory, num_cores); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -10,11 +10,12 @@ | ||||||
| #include "audio_core/dsp_interface.h" | #include "audio_core/dsp_interface.h" | ||||||
| #include "audio_core/hle/hle.h" | #include "audio_core/hle/hle.h" | ||||||
| #include "audio_core/lle/lle.h" | #include "audio_core/lle/lle.h" | ||||||
|  | #include "common/arch.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "common/texture.h" | #include "common/texture.h" | ||||||
| #include "core/arm/arm_interface.h" | #include "core/arm/arm_interface.h" | ||||||
| #include "core/arm/exclusive_monitor.h" | #include "core/arm/exclusive_monitor.h" | ||||||
| #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) | #if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64) | ||||||
| #include "core/arm/dynarmic/arm_dynarmic.h" | #include "core/arm/dynarmic/arm_dynarmic.h" | ||||||
| #endif | #endif | ||||||
| #include "core/arm/dyncom/arm_dyncom.h" | #include "core/arm/dyncom/arm_dyncom.h" | ||||||
|  | @ -372,7 +373,7 @@ System::ResultStatus System::Init(Frontend::EmuWindow& emu_window, | ||||||
| 
 | 
 | ||||||
|     exclusive_monitor = MakeExclusiveMonitor(*memory, num_cores); |     exclusive_monitor = MakeExclusiveMonitor(*memory, num_cores); | ||||||
|     if (Settings::values.use_cpu_jit) { |     if (Settings::values.use_cpu_jit) { | ||||||
| #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) | #if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64) | ||||||
|         for (u32 i = 0; i < num_cores; ++i) { |         for (u32 i = 0; i < num_cores; ++i) { | ||||||
|             cpu_cores.push_back(std::make_shared<ARM_Dynarmic>( |             cpu_cores.push_back(std::make_shared<ARM_Dynarmic>( | ||||||
|                 this, *memory, i, timing->GetTimer(i), *exclusive_monitor)); |                 this, *memory, i, timing->GetTimer(i), *exclusive_monitor)); | ||||||
|  |  | ||||||
|  | @ -12,14 +12,8 @@ add_executable(tests | ||||||
|     precompiled_headers.h |     precompiled_headers.h | ||||||
|     audio_core/audio_fixures.h |     audio_core/audio_fixures.h | ||||||
|     audio_core/decoder_tests.cpp |     audio_core/decoder_tests.cpp | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| if (ARCHITECTURE_x86_64) |  | ||||||
|     target_sources(tests |  | ||||||
|         PRIVATE |  | ||||||
|     video_core/shader/shader_jit_x64_compiler.cpp |     video_core/shader/shader_jit_x64_compiler.cpp | ||||||
|     ) | ) | ||||||
| endif() |  | ||||||
| 
 | 
 | ||||||
| create_target_directory_groups(tests) | create_target_directory_groups(tests) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,6 +2,9 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <cmath> | #include <cmath> | ||||||
| #include <memory> | #include <memory> | ||||||
|  | @ -158,3 +161,5 @@ TEST_CASE("Nested Loop", "[video_core][shader][shader_jit]") { | ||||||
|         REQUIRE(shader_unit_jit.registers.output[0].x.ToFloat32() == Catch::Approx(expected_out)); |         REQUIRE(shader_unit_jit.registers.output[0].x.ToFloat32() == Catch::Approx(expected_out)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -87,6 +87,10 @@ add_library(video_core STATIC | ||||||
|     shader/shader.h |     shader/shader.h | ||||||
|     shader/shader_interpreter.cpp |     shader/shader_interpreter.cpp | ||||||
|     shader/shader_interpreter.h |     shader/shader_interpreter.h | ||||||
|  |     shader/shader_jit_x64.cpp | ||||||
|  |     shader/shader_jit_x64_compiler.cpp | ||||||
|  |     shader/shader_jit_x64.h | ||||||
|  |     shader/shader_jit_x64_compiler.h | ||||||
|     swrasterizer/clipper.cpp |     swrasterizer/clipper.cpp | ||||||
|     swrasterizer/clipper.h |     swrasterizer/clipper.h | ||||||
|     swrasterizer/framebuffer.cpp |     swrasterizer/framebuffer.cpp | ||||||
|  | @ -144,24 +148,13 @@ add_dependencies(video_core shaders) | ||||||
| 
 | 
 | ||||||
| target_include_directories(video_core PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) | target_include_directories(video_core PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) | ||||||
| 
 | 
 | ||||||
| if(ARCHITECTURE_x86_64) |  | ||||||
|     target_sources(video_core |  | ||||||
|         PRIVATE |  | ||||||
|             shader/shader_jit_x64.cpp |  | ||||||
|             shader/shader_jit_x64_compiler.cpp |  | ||||||
| 
 |  | ||||||
|             shader/shader_jit_x64.h |  | ||||||
|             shader/shader_jit_x64_compiler.h |  | ||||||
|     ) |  | ||||||
| endif() |  | ||||||
| 
 |  | ||||||
| create_target_directory_groups(video_core) | create_target_directory_groups(video_core) | ||||||
| 
 | 
 | ||||||
| target_link_libraries(video_core PUBLIC common core) | target_link_libraries(video_core PUBLIC common core) | ||||||
| target_link_libraries(video_core PRIVATE glad nihstro-headers Boost::serialization) | target_link_libraries(video_core PRIVATE glad nihstro-headers Boost::serialization) | ||||||
| set_target_properties(video_core PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO}) | set_target_properties(video_core PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO}) | ||||||
| 
 | 
 | ||||||
| if (ARCHITECTURE_x86_64) | if ("x86_64" IN_LIST ARCHITECTURE) | ||||||
|     target_link_libraries(video_core PUBLIC xbyak) |     target_link_libraries(video_core PUBLIC xbyak) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <cmath> | #include <cmath> | ||||||
| #include <cstring> | #include <cstring> | ||||||
|  | #include "common/arch.h" | ||||||
| #include "common/bit_set.h" | #include "common/bit_set.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "common/microprofile.h" | #include "common/microprofile.h" | ||||||
|  | @ -12,9 +13,9 @@ | ||||||
| #include "video_core/regs_shader.h" | #include "video_core/regs_shader.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| #include "video_core/shader/shader_interpreter.h" | #include "video_core/shader/shader_interpreter.h" | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
| #include "video_core/shader/shader_jit_x64.h" | #include "video_core/shader/shader_jit_x64.h" | ||||||
| #endif // ARCHITECTURE_x86_64
 | #endif // CITRA_ARCH(x86_64)
 | ||||||
| #include "video_core/video_core.h" | #include "video_core/video_core.h" | ||||||
| 
 | 
 | ||||||
| namespace Pica::Shader { | namespace Pica::Shader { | ||||||
|  | @ -134,13 +135,13 @@ void GSUnitState::ConfigOutput(const ShaderRegs& config) { | ||||||
| 
 | 
 | ||||||
| MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240)); | MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240)); | ||||||
| 
 | 
 | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
| static std::unique_ptr<JitX64Engine> jit_engine; | static std::unique_ptr<JitX64Engine> jit_engine; | ||||||
| #endif // ARCHITECTURE_x86_64
 | #endif // CITRA_ARCH(x86_64)
 | ||||||
| static InterpreterEngine interpreter_engine; | static InterpreterEngine interpreter_engine; | ||||||
| 
 | 
 | ||||||
| ShaderEngine* GetEngine() { | ShaderEngine* GetEngine() { | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
|     // TODO(yuriks): Re-initialize on each change rather than being persistent
 |     // TODO(yuriks): Re-initialize on each change rather than being persistent
 | ||||||
|     if (VideoCore::g_shader_jit_enabled) { |     if (VideoCore::g_shader_jit_enabled) { | ||||||
|         if (jit_engine == nullptr) { |         if (jit_engine == nullptr) { | ||||||
|  | @ -148,15 +149,15 @@ ShaderEngine* GetEngine() { | ||||||
|         } |         } | ||||||
|         return jit_engine.get(); |         return jit_engine.get(); | ||||||
|     } |     } | ||||||
| #endif // ARCHITECTURE_x86_64
 | #endif // CITRA_ARCH(x86_64)
 | ||||||
| 
 | 
 | ||||||
|     return &interpreter_engine; |     return &interpreter_engine; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Shutdown() { | void Shutdown() { | ||||||
| #ifdef ARCHITECTURE_x86_64 | #if CITRA_ARCH(x86_64) | ||||||
|     jit_engine = nullptr; |     jit_engine = nullptr; | ||||||
| #endif // ARCHITECTURE_x86_64
 | #endif // CITRA_ARCH(x86_64)
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Pica::Shader
 | } // namespace Pica::Shader
 | ||||||
|  |  | ||||||
|  | @ -2,6 +2,9 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include "common/microprofile.h" | #include "common/microprofile.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| #include "video_core/shader/shader_jit_x64.h" | #include "video_core/shader/shader_jit_x64.h" | ||||||
|  | @ -43,3 +46,5 @@ void JitX64Engine::Run(const ShaderSetup& setup, UnitState& state) const { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Pica::Shader
 | } // namespace Pica::Shader
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | @ -26,3 +29,5 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Pica::Shader
 | } // namespace Pica::Shader
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -2,6 +2,9 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <cmath> | #include <cmath> | ||||||
| #include <cstdint> | #include <cstdint> | ||||||
|  | @ -1131,3 +1134,5 @@ Xbyak::Label JitShader::CompilePrelude_Exp2() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Pica::Shader
 | } // namespace Pica::Shader
 | ||||||
|  | 
 | ||||||
|  | #endif // CITRA_ARCH(x86_64)
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "common/arch.h" | ||||||
|  | #if CITRA_ARCH(x86_64) | ||||||
|  | 
 | ||||||
| #include <array> | #include <array> | ||||||
| #include <bitset> | #include <bitset> | ||||||
| #include <cstddef> | #include <cstddef> | ||||||
|  | @ -138,3 +141,5 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Pica::Shader
 | } // namespace Pica::Shader
 | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue