From 6ed6731b8bd631b55339ff4b5f4f43ea4f6d3af0 Mon Sep 17 00:00:00 2001 From: Vince Ricci Date: Sat, 20 Feb 2021 23:09:39 +0100 Subject: [PATCH] playground for arm backend --- externals/CMakeLists.txt | 2 +- src/common/CMakeLists.txt | 8 +++++++- src/core/CMakeLists.txt | 2 +- src/core/hle/kernel/physical_core.cpp | 2 +- src/video_core/CMakeLists.txt | 18 +++++++++++++++--- src/video_core/macro/macro.cpp | 3 +++ 6 files changed, 28 insertions(+), 7 deletions(-) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index c629bbc5c2..e3b39c3cc4 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -16,7 +16,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 788516dedc..a8365bfa28 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -214,7 +214,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) + message(WARNING "Arm64 (aarch64) is a work in progress") +endif() + if (MSVC) target_link_libraries(common PRIVATE zstd::zstd) else() diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 17f251c37b..57e5fdf876 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -678,7 +678,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 9b931976a1..371c538e7f 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 @@ -262,10 +260,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) + message(WARNING "Arm64 (aarch64) is a work in progress") +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 cd21a21120..db9522d9c1 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)