diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 891a47c3cc..7267319bb4 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -9,6 +9,10 @@ if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) add_library(xbyak INTERFACE) target_include_directories(xbyak SYSTEM INTERFACE ./xbyak/xbyak) target_compile_definitions(xbyak INTERFACE XBYAK_NO_OP_NAMES) +elseif(ARCHITECTURE_ARM64) + add_library(xbyak_aarch64 INTERFACE) + target_include_directories(xbyak_aarch64 SYSTEM INTERFACE ./xbyak_aarch64/xbyak_aarch64) + target_compile_definitions(xbyak_aarch64 INTERFACE XBYAK_NO_OP_NAMES) endif() # Catch @@ -16,7 +20,7 @@ add_library(catch-single-include INTERFACE) target_include_directories(catch-single-include INTERFACE catch/single_include) # Dynarmic -if (ARCHITECTURE_x86_64) +if (ARCHITECTURE_x86_64 OR ARCHITECTURE_ARM64) set(DYNARMIC_TESTS OFF) set(DYNARMIC_NO_BUNDLED_FMT ON) add_subdirectory(dynarmic) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 88644eeb69..75cc28bedc 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -220,7 +220,13 @@ endif() create_target_directory_groups(common) target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile) -target_link_libraries(common PRIVATE lz4::lz4 xbyak) +target_link_libraries(common PRIVATE lz4::lz4) +if (ARCHITECTURE_x86_64) + target_link_libraries(common PRIVATE xbyak) +elseif(ARCHITECTURE_ARM64) + target_link_libraries(common PRIVATE xbyak_aarch64) +endif() + if (MSVC) target_link_libraries(common PRIVATE zstd::zstd) else() diff --git a/src/common/uint128.h b/src/common/uint128.h index 4780b2f9d3..18aa6d6672 100644 --- a/src/common/uint128.h +++ b/src/common/uint128.h @@ -7,6 +7,7 @@ #include #include +#ifdef ARCHITECTURE_x86_64 #ifdef _MSC_VER #include #pragma intrinsic(__umulh) @@ -15,6 +16,7 @@ #else #include #endif +#endif #include "common/common_types.h" diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 532e418b0e..fc386bdda4 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -684,7 +684,7 @@ if (ENABLE_WEB_SERVICE) target_link_libraries(core PRIVATE web_service) endif() -if (ARCHITECTURE_x86_64) +if (ARCHITECTURE_x86_64 OR ARCHITECTURE_ARM64) target_sources(core PRIVATE arm/dynarmic/arm_dynarmic_32.cpp arm/dynarmic/arm_dynarmic_32.h diff --git a/src/core/hle/kernel/physical_core.cpp b/src/core/hle/kernel/physical_core.cpp index 7fea45f96c..b9da4a9907 100644 --- a/src/core/hle/kernel/physical_core.cpp +++ b/src/core/hle/kernel/physical_core.cpp @@ -21,7 +21,7 @@ PhysicalCore::PhysicalCore(std::size_t core_index, Core::System& system, PhysicalCore::~PhysicalCore() = default; void PhysicalCore::Initialize([[maybe_unused]] bool is_64_bit) { -#ifdef ARCHITECTURE_x86_64 +#if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_ARM64) auto& kernel = system.Kernel(); if (is_64_bit) { arm_interface = std::make_unique( diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 47190c4643..da351fd7e0 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -54,8 +54,6 @@ add_library(video_core STATIC macro/macro_hle.h macro/macro_interpreter.cpp macro/macro_interpreter.h - macro/macro_jit_x64.cpp - macro/macro_jit_x64.h fence_manager.h gpu.cpp gpu.h @@ -261,10 +259,24 @@ add_library(video_core STATIC vulkan_common/nsight_aftermath_tracker.h ) +if(ARCHITECTURE_x86_64) + target_sources(video_core + PRIVATE + macro/macro_jit_x64.cpp + macro/macro_jit_x64.h + ) +endif() + create_target_directory_groups(video_core) target_link_libraries(video_core PUBLIC common core) -target_link_libraries(video_core PRIVATE glad xbyak) +target_link_libraries(video_core PRIVATE glad) +if (ARCHITECTURE_x86_64) + target_link_libraries(video_core PRIVATE xbyak) +elseif(ARCHITECTURE_ARM64) + target_link_libraries(video_core PRIVATE xbyak_aarch64) +endif() + if (YUZU_USE_BUNDLED_FFMPEG AND NOT WIN32) add_dependencies(video_core ffmpeg-build) diff --git a/src/video_core/macro/macro.cpp b/src/video_core/macro/macro.cpp index d7fabe6055..871019734c 100644 --- a/src/video_core/macro/macro.cpp +++ b/src/video_core/macro/macro.cpp @@ -11,8 +11,11 @@ #include "video_core/macro/macro.h" #include "video_core/macro/macro_hle.h" #include "video_core/macro/macro_interpreter.h" +#ifdef ARCHITECTURE_x86_64 #include "video_core/macro/macro_jit_x64.h" +#elif ARCHITECTURE_ARM64 +#endif namespace Tegra { MacroEngine::MacroEngine(Engines::Maxwell3D& maxwell3d)