From 21fe65c29c4a78e5b09624c1e5911f56e9ee2367 Mon Sep 17 00:00:00 2001 From: SachinVin Date: Fri, 30 Dec 2022 12:47:51 +0530 Subject: [PATCH 1/4] externals: bump xbyak to v6.68 --- externals/CMakeLists.txt | 6 +----- externals/xbyak | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index c2385c48e..10d5f0920 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -37,11 +37,7 @@ add_subdirectory(fmt) # Xbyak if (ARCHITECTURE_x86_64) - add_library(xbyak INTERFACE) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/xbyak/include) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/xbyak/xbyak DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/xbyak/include) - target_include_directories(xbyak SYSTEM INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/xbyak/include) - target_compile_definitions(xbyak INTERFACE XBYAK_NO_OP_NAMES) + add_subdirectory(xbyak) endif() # Dynarmic diff --git a/externals/xbyak b/externals/xbyak index 48457bfa0..a1ac3750f 160000 --- a/externals/xbyak +++ b/externals/xbyak @@ -1 +1 @@ -Subproject commit 48457bfa0ded67bb4ae2d4c141c36b35469257ee +Subproject commit a1ac3750f9a639b5a6c6d6c7da4259b8d6790989 From 0e325255f3a76700daa4bbc17ba8b8826bb46581 Mon Sep 17 00:00:00 2001 From: SachinVin Date: Fri, 30 Dec 2022 12:33:43 +0530 Subject: [PATCH 2/4] externals: point to upstream dynarmic --- .gitmodules | 2 +- externals/CMakeLists.txt | 2 +- externals/dynarmic | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 993394310..d1b35425d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -12,7 +12,7 @@ url = https://github.com/catchorg/Catch2 [submodule "dynarmic"] path = externals/dynarmic - url = https://github.com/citra-emu/dynarmic.git + url = https://github.com/merryhime/dynarmic.git [submodule "xbyak"] path = externals/xbyak url = https://github.com/herumi/xbyak.git diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 10d5f0920..4a94c4ed9 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -33,6 +33,7 @@ add_subdirectory(cryptopp) # fmt and Xbyak need to be added before dynarmic # libfmt +option(FMT_INSTALL "" ON) add_subdirectory(fmt) # Xbyak @@ -43,7 +44,6 @@ endif() # Dynarmic if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) set(DYNARMIC_TESTS OFF) - set(DYNARMIC_NO_BUNDLED_FMT ON) set(DYNARMIC_FRONTENDS "A32") add_subdirectory(dynarmic) endif() diff --git a/externals/dynarmic b/externals/dynarmic index 7a926d689..cd2bee17f 160000 --- a/externals/dynarmic +++ b/externals/dynarmic @@ -1 +1 @@ -Subproject commit 7a926d689bcc1cc39dd26d5bba379dffcc6815a3 +Subproject commit cd2bee17f20d8ec1df09f458c0f75114b65ed470 From a8848cce4355598ede645a67f40a00ac0ab08f38 Mon Sep 17 00:00:00 2001 From: Steveice10 <1269164+Steveice10@users.noreply.github.com> Date: Fri, 6 Jan 2023 07:28:02 -0800 Subject: [PATCH 3/4] build: Update to support multi-arch builds. --- CMakeLists.txt | 12 ++++----- externals/CMakeLists.txt | 4 +-- externals/dynarmic | 2 +- src/citra_qt/main.cpp | 5 ++-- src/common/CMakeLists.txt | 25 ++++++------------- src/common/aarch64/cpu_detect.cpp | 5 ++++ src/common/aarch64/cpu_detect.h | 5 ++++ src/common/arch.h | 13 ++++++++++ src/common/common_funcs.h | 5 ++-- src/common/telemetry.cpp | 5 ++-- src/common/x64/cpu_detect.cpp | 5 ++++ src/common/x64/cpu_detect.h | 5 ++++ src/common/x64/xbyak_abi.h | 5 ++++ src/common/x64/xbyak_util.h | 5 ++++ src/core/CMakeLists.txt | 2 +- src/core/arm/exclusive_monitor.cpp | 5 ++-- src/core/core.cpp | 5 ++-- src/tests/CMakeLists.txt | 8 +----- .../shader/shader_jit_x64_compiler.cpp | 5 ++++ src/video_core/CMakeLists.txt | 17 ++++--------- src/video_core/shader/shader.cpp | 17 +++++++------ src/video_core/shader/shader_jit_x64.cpp | 5 ++++ src/video_core/shader/shader_jit_x64.h | 5 ++++ .../shader/shader_jit_x64_compiler.cpp | 5 ++++ .../shader/shader_jit_x64_compiler.h | 5 ++++ 25 files changed, 114 insertions(+), 66 deletions(-) create mode 100644 src/common/arch.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d98b74fa..c98cc3a09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,14 +146,14 @@ function(detect_architecture symbol arch) # CMake's crazy scope rules will keep it defined if (ARCHITECTURE_${arch}) set(ARCHITECTURE "${arch}" PARENT_SCOPE) - set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) - add_definitions(-DARCHITECTURE_${arch}=1) endif() endif() endfunction() 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_IX86" x86) detect_architecture("_M_ARM" arm) @@ -167,8 +167,6 @@ if (NOT ENABLE_GENERIC) endif() if (NOT DEFINED ARCHITECTURE) set(ARCHITECTURE "GENERIC") - set(ARCHITECTURE_GENERIC 1) - add_definitions(-DARCHITECTURE_GENERIC=1) endif() message(STATUS "Target architecture: ${ARCHITECTURE}") @@ -194,7 +192,7 @@ find_package(Threads REQUIRED) if (ENABLE_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) else() 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 (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") else() message(FATAL_ERROR "No bundled FFmpeg binaries for your toolchain. Disable CITRA_USE_BUNDLED_FFMPEG and provide your own.") diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 4a94c4ed9..dba0f3cfc 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -37,12 +37,12 @@ option(FMT_INSTALL "" ON) add_subdirectory(fmt) # Xbyak -if (ARCHITECTURE_x86_64) +if ("x86_64" IN_LIST ARCHITECTURE) add_subdirectory(xbyak) endif() # 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_FRONTENDS "A32") add_subdirectory(dynarmic) diff --git a/externals/dynarmic b/externals/dynarmic index cd2bee17f..9af4b970d 160000 --- a/externals/dynarmic +++ b/externals/dynarmic @@ -1 +1 @@ -Subproject commit cd2bee17f20d8ec1df09f458c0f75114b65ed470 +Subproject commit 9af4b970d302389829448a30608c7cb4fce9b662 diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index a3273cdb6..719ae0d12 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -60,6 +60,7 @@ #include "citra_qt/uisettings.h" #include "citra_qt/updater/updater.h" #include "citra_qt/util/clickable_label.h" +#include "common/arch.h" #include "common/common_paths.h" #include "common/detached_tasks.h" #include "common/file_util.h" @@ -73,7 +74,7 @@ #include "common/scm_rev.h" #include "common/scope_exit.h" #include "common/string_util.h" -#ifdef ARCHITECTURE_x86_64 +#if CITRA_ARCH(x86_64) #include "common/x64/cpu_detect.h" #endif #include "common/settings.h" @@ -204,7 +205,7 @@ GMainWindow::GMainWindow() LOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch, Common::g_scm_desc); -#ifdef ARCHITECTURE_x86_64 +#if CITRA_ARCH(x86_64) const auto& caps = Common::GetCPUCaps(); std::string cpu_string = caps.cpu_string; if (caps.avx || caps.avx2 || caps.avx512) { diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 0cdb362fe..43b1e1bad 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -54,6 +54,8 @@ add_custom_command(OUTPUT scm_rev.cpp ) add_library(common STATIC + aarch64/cpu_detect.cpp + aarch64/cpu_detect.h alignment.h announce_multiplayer_room.h archives.h @@ -124,34 +126,21 @@ add_library(common STATIC timer.h vector_math.h web_result.h + x64/cpu_detect.cpp + x64/cpu_detect.h + x64/xbyak_abi.h + x64/xbyak_util.h zstd_compression.cpp zstd_compression.h ) -if(ARCHITECTURE_x86_64) - target_sources(common - PRIVATE - x64/cpu_detect.cpp - - x64/cpu_detect.h - x64/xbyak_abi.h - x64/xbyak_util.h - ) -elseif(ARCHITECTURE_arm64) - target_sources(common - PRIVATE - aarch64/cpu_detect.cpp - aarch64/cpu_detect.h - ) -endif() - create_target_directory_groups(common) target_link_libraries(common PUBLIC fmt::fmt microprofile Boost::boost Boost::serialization) target_link_libraries(common PRIVATE libzstd_static) 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) endif() diff --git a/src/common/aarch64/cpu_detect.cpp b/src/common/aarch64/cpu_detect.cpp index 84eb8608e..52373bdef 100644 --- a/src/common/aarch64/cpu_detect.cpp +++ b/src/common/aarch64/cpu_detect.cpp @@ -2,6 +2,9 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include "common/arch.h" +#if CITRA_ARCH(arm64) + #include #include #include @@ -110,3 +113,5 @@ const CPUCaps& GetCPUCaps() { } } // namespace Common + +#endif // CITRA_ARCH(arm64) diff --git a/src/common/aarch64/cpu_detect.h b/src/common/aarch64/cpu_detect.h index 79c54c2f1..8c037a528 100644 --- a/src/common/aarch64/cpu_detect.h +++ b/src/common/aarch64/cpu_detect.h @@ -4,6 +4,9 @@ #pragma once +#include "common/arch.h" +#if CITRA_ARCH(arm64) + #include namespace Common { @@ -29,3 +32,5 @@ struct CPUCaps { const CPUCaps& GetCPUCaps(); } // namespace Common + +#endif // CITRA_ARCH(arm64) diff --git a/src/common/arch.h b/src/common/arch.h new file mode 100644 index 000000000..5c70b8dca --- /dev/null +++ b/src/common/arch.h @@ -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 + +#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) diff --git a/src/common/common_funcs.h b/src/common/common_funcs.h index 446965e90..c29a33b09 100644 --- a/src/common/common_funcs.h +++ b/src/common/common_funcs.h @@ -5,8 +5,9 @@ #pragma once #include +#include "common/arch.h" -#if !defined(ARCHITECTURE_x86_64) +#if !CITRA_ARCH(x86_64) #include // for exit #endif #include "common/common_types.h" @@ -36,7 +37,7 @@ #ifndef _MSC_VER -#ifdef ARCHITECTURE_x86_64 +#if CITRA_ARCH(x86_64) #define Crash() __asm__ __volatile__("int $3") #else #define Crash() exit(1) diff --git a/src/common/telemetry.cpp b/src/common/telemetry.cpp index 6241d08b3..e5fd193ef 100644 --- a/src/common/telemetry.cpp +++ b/src/common/telemetry.cpp @@ -4,11 +4,12 @@ #include #include +#include "common/arch.h" #include "common/assert.h" #include "common/scm_rev.h" #include "common/telemetry.h" -#ifdef ARCHITECTURE_x86_64 +#if CITRA_ARCH(x86_64) #include "common/x64/cpu_detect.h" #endif @@ -54,7 +55,7 @@ void AppendBuildInfo(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_BrandString", Common::GetCPUCaps().brand_string); fc.AddField(FieldType::UserSystem, "CPU_Extension_x64_AES", Common::GetCPUCaps().aes); diff --git a/src/common/x64/cpu_detect.cpp b/src/common/x64/cpu_detect.cpp index f6677d5a0..2e301d377 100644 --- a/src/common/x64/cpu_detect.cpp +++ b/src/common/x64/cpu_detect.cpp @@ -2,6 +2,9 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include #include "common/common_types.h" #include "common/x64/cpu_detect.h" @@ -144,3 +147,5 @@ const CPUCaps& GetCPUCaps() { } } // namespace Common + +#endif // CITRA_ARCH(x86_64) diff --git a/src/common/x64/cpu_detect.h b/src/common/x64/cpu_detect.h index 92c85c2ec..31ed1c584 100644 --- a/src/common/x64/cpu_detect.h +++ b/src/common/x64/cpu_detect.h @@ -4,6 +4,9 @@ #pragma once +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + namespace Common { /// x86/x64 CPU capabilities that may be detected by this module @@ -33,3 +36,5 @@ struct CPUCaps { const CPUCaps& GetCPUCaps(); } // namespace Common + +#endif // CITRA_ARCH(x86_64) diff --git a/src/common/x64/xbyak_abi.h b/src/common/x64/xbyak_abi.h index 2326c87c0..9c3615346 100644 --- a/src/common/x64/xbyak_abi.h +++ b/src/common/x64/xbyak_abi.h @@ -4,6 +4,9 @@ #pragma once +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include #include #include @@ -228,3 +231,5 @@ inline void ABI_PopRegistersAndAdjustStack(Xbyak::CodeGenerator& code, std::bits } } // namespace Common::X64 + +#endif // CITRA_ARCH(x86_64) diff --git a/src/common/x64/xbyak_util.h b/src/common/x64/xbyak_util.h index 461ca0516..32621b59d 100644 --- a/src/common/x64/xbyak_util.h +++ b/src/common/x64/xbyak_util.h @@ -4,6 +4,9 @@ #pragma once +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include #include #include "common/x64/xbyak_abi.h" @@ -45,3 +48,5 @@ inline void CallFarFunction(Xbyak::CodeGenerator& code, const T f) { } } // namespace Common::X64 + +#endif // CITRA_ARCH(x86_64) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ddf905577..0f473f6fc 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -488,7 +488,7 @@ if (ENABLE_WEB_SERVICE) endif() endif() -if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) +if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE) target_sources(core PRIVATE arm/dynarmic/arm_dynarmic.cpp arm/dynarmic/arm_dynarmic.h diff --git a/src/core/arm/exclusive_monitor.cpp b/src/core/arm/exclusive_monitor.cpp index 53906eff9..5ba6dc9a8 100644 --- a/src/core/arm/exclusive_monitor.cpp +++ b/src/core/arm/exclusive_monitor.cpp @@ -1,7 +1,8 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // 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" #endif #include "common/settings.h" @@ -14,7 +15,7 @@ ExclusiveMonitor::~ExclusiveMonitor() = default; std::unique_ptr MakeExclusiveMonitor(Memory::MemorySystem& memory, 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) { return std::make_unique(memory, num_cores); } diff --git a/src/core/core.cpp b/src/core/core.cpp index 2249a41aa..c99f17a7f 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -10,11 +10,12 @@ #include "audio_core/dsp_interface.h" #include "audio_core/hle/hle.h" #include "audio_core/lle/lle.h" +#include "common/arch.h" #include "common/logging/log.h" #include "common/texture.h" #include "core/arm/arm_interface.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" #endif #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); 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) { cpu_cores.push_back(std::make_shared( this, *memory, i, timing->GetTimer(i), *exclusive_monitor)); diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 118e2c9cf..5158d1348 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -12,15 +12,9 @@ add_executable(tests precompiled_headers.h audio_core/audio_fixures.h audio_core/decoder_tests.cpp + video_core/shader/shader_jit_x64_compiler.cpp ) -if (ARCHITECTURE_x86_64) - target_sources(tests - PRIVATE - video_core/shader/shader_jit_x64_compiler.cpp - ) -endif() - create_target_directory_groups(tests) target_link_libraries(tests PRIVATE common core video_core audio_core) diff --git a/src/tests/video_core/shader/shader_jit_x64_compiler.cpp b/src/tests/video_core/shader/shader_jit_x64_compiler.cpp index 464b2c276..79daca422 100644 --- a/src/tests/video_core/shader/shader_jit_x64_compiler.cpp +++ b/src/tests/video_core/shader/shader_jit_x64_compiler.cpp @@ -2,6 +2,9 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include #include #include @@ -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)); } } + +#endif // CITRA_ARCH(x86_64) diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 6685e26d3..17d7149da 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -87,6 +87,10 @@ add_library(video_core STATIC shader/shader.h shader/shader_interpreter.cpp 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.h swrasterizer/framebuffer.cpp @@ -144,24 +148,13 @@ add_dependencies(video_core shaders) 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) target_link_libraries(video_core PUBLIC common core) target_link_libraries(video_core PRIVATE glad nihstro-headers Boost::serialization) 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) endif() diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index e757d2185..2e6f5d436 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -4,6 +4,7 @@ #include #include +#include "common/arch.h" #include "common/bit_set.h" #include "common/logging/log.h" #include "common/microprofile.h" @@ -12,9 +13,9 @@ #include "video_core/regs_shader.h" #include "video_core/shader/shader.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" -#endif // ARCHITECTURE_x86_64 +#endif // CITRA_ARCH(x86_64) #include "video_core/video_core.h" namespace Pica::Shader { @@ -134,13 +135,13 @@ void GSUnitState::ConfigOutput(const ShaderRegs& config) { MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240)); -#ifdef ARCHITECTURE_x86_64 +#if CITRA_ARCH(x86_64) static std::unique_ptr jit_engine; -#endif // ARCHITECTURE_x86_64 +#endif // CITRA_ARCH(x86_64) static InterpreterEngine interpreter_engine; ShaderEngine* GetEngine() { -#ifdef ARCHITECTURE_x86_64 +#if CITRA_ARCH(x86_64) // TODO(yuriks): Re-initialize on each change rather than being persistent if (VideoCore::g_shader_jit_enabled) { if (jit_engine == nullptr) { @@ -148,15 +149,15 @@ ShaderEngine* GetEngine() { } return jit_engine.get(); } -#endif // ARCHITECTURE_x86_64 +#endif // CITRA_ARCH(x86_64) return &interpreter_engine; } void Shutdown() { -#ifdef ARCHITECTURE_x86_64 +#if CITRA_ARCH(x86_64) jit_engine = nullptr; -#endif // ARCHITECTURE_x86_64 +#endif // CITRA_ARCH(x86_64) } } // namespace Pica::Shader diff --git a/src/video_core/shader/shader_jit_x64.cpp b/src/video_core/shader/shader_jit_x64.cpp index e70d6fdad..513e128cb 100644 --- a/src/video_core/shader/shader_jit_x64.cpp +++ b/src/video_core/shader/shader_jit_x64.cpp @@ -2,6 +2,9 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include "common/microprofile.h" #include "video_core/shader/shader.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 + +#endif // CITRA_ARCH(x86_64) diff --git a/src/video_core/shader/shader_jit_x64.h b/src/video_core/shader/shader_jit_x64.h index 3f6b52cd6..b6bbdf317 100644 --- a/src/video_core/shader/shader_jit_x64.h +++ b/src/video_core/shader/shader_jit_x64.h @@ -4,6 +4,9 @@ #pragma once +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include #include #include "common/common_types.h" @@ -26,3 +29,5 @@ private: }; } // namespace Pica::Shader + +#endif // CITRA_ARCH(x86_64) diff --git a/src/video_core/shader/shader_jit_x64_compiler.cpp b/src/video_core/shader/shader_jit_x64_compiler.cpp index bcf3d21ec..126596357 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.cpp +++ b/src/video_core/shader/shader_jit_x64_compiler.cpp @@ -2,6 +2,9 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include #include #include @@ -1131,3 +1134,5 @@ Xbyak::Label JitShader::CompilePrelude_Exp2() { } } // namespace Pica::Shader + +#endif // CITRA_ARCH(x86_64) diff --git a/src/video_core/shader/shader_jit_x64_compiler.h b/src/video_core/shader/shader_jit_x64_compiler.h index b6e62f01e..96dbfe82a 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.h +++ b/src/video_core/shader/shader_jit_x64_compiler.h @@ -4,6 +4,9 @@ #pragma once +#include "common/arch.h" +#if CITRA_ARCH(x86_64) + #include #include #include @@ -138,3 +141,5 @@ private: }; } // namespace Pica::Shader + +#endif From 5d0e60a6aada7b3ff42700b1ed08da518f7d604b Mon Sep 17 00:00:00 2001 From: Steveice10 <1269164+Steveice10@users.noreply.github.com> Date: Thu, 5 Jan 2023 15:16:40 -0800 Subject: [PATCH 4/4] ci: Generate universal macOS build. --- .ci/macos/build.sh | 5 ++++- .ci/macos/deps.sh | 19 ++++++++----------- .ci/macos/upload.sh | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.ci/macos/build.sh b/.ci/macos/build.sh index b6c5873e1..1f1868b61 100755 --- a/.ci/macos/build.sh +++ b/.ci/macos/build.sh @@ -2,7 +2,6 @@ set -o pipefail -export Qt5_DIR=$(brew --prefix)/opt/qt5 export PATH="/usr/local/opt/ccache/libexec:$PATH" # ccache configurations export CCACHE_CPP2=yes @@ -16,13 +15,17 @@ export ASM="clang" ccache -s mkdir build && cd build +# TODO: CryptoPP and LibreSSL ASM disabled due to platform detection issues in build. cmake .. -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \ -DENABLE_QT_TRANSLATION=ON \ -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \ -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON \ -DUSE_DISCORD_PRESENCE=ON \ -DENABLE_FFMPEG_AUDIO_DECODER=ON \ -DENABLE_FFMPEG_VIDEO_DUMPER=ON \ + -DCRYPTOPP_OPT_DISABLE_ASM=ON \ + -DENABLE_ASM=OFF \ -GNinja ninja diff --git a/.ci/macos/deps.sh b/.ci/macos/deps.sh index e000f84ba..cba18ffa7 100755 --- a/.ci/macos/deps.sh +++ b/.ci/macos/deps.sh @@ -1,23 +1,20 @@ #!/bin/sh -ex -brew update -brew unlink python@2 || true -rm '/usr/local/bin/2to3' || true -brew install qt5 p7zip ccache ninja || true +brew install ccache ninja || true pip3 install macpack -export SDL_VER=2.0.16 -export FFMPEG_VER=4.4 +export FFMPEG_VER=5.1 +export QT_VER=5.15.8 mkdir tmp cd tmp/ -# install SDL -wget https://github.com/SachinVin/ext-macos-bin/raw/main/sdl2/sdl-${SDL_VER}.7z -7z x sdl-${SDL_VER}.7z -cp -rv $(pwd)/sdl-${SDL_VER}/* / - # install FFMPEG wget https://github.com/SachinVin/ext-macos-bin/raw/main/ffmpeg/ffmpeg-${FFMPEG_VER}.7z 7z x ffmpeg-${FFMPEG_VER}.7z cp -rv $(pwd)/ffmpeg-${FFMPEG_VER}/* / + +# install Qt +wget https://github.com/SachinVin/ext-macos-bin/raw/main/qt/qt-${QT_VER}.7z +7z x qt-${QT_VER}.7z +sudo cp -rv $(pwd)/qt-${QT_VER}/* /usr/local/ diff --git a/.ci/macos/upload.sh b/.ci/macos/upload.sh index 392cc9c0a..3170673e9 100755 --- a/.ci/macos/upload.sh +++ b/.ci/macos/upload.sh @@ -15,7 +15,7 @@ cp build/bin/Release/citra-room "$REV_NAME" # move libs into folder for deployment macpack "${REV_NAME}/citra-qt.app/Contents/MacOS/citra-qt" -d "../Frameworks" # move qt frameworks into app bundle for deployment -$(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" -executable="${REV_NAME}/citra-qt.app/Contents/MacOS/citra-qt" +macdeployqt "${REV_NAME}/citra-qt.app" -executable="${REV_NAME}/citra-qt.app/Contents/MacOS/citra-qt" # move libs into folder for deployment macpack "${REV_NAME}/citra" -d "libs"