mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
Merges yaps2/main (github.com/yaps2/yaps2,c16b88cb7) into ARMSX2, replacing the arm64 recompiler family with the yaps2 JITs and importing the yaps2 testing, perf, and libretro infrastructure. Common ancestor is upstream PCSX2342db5152(2026-06-19); git auto-merged all but 38 files. Replaced (deleted in this merge, recoverable from history): - arm64/aR5900*, aR3000A*, aVU* -> arm64/iR5900*/iR3000A*/microVU*-arm64: EE static-pin register file with lazy dirty tracking, dual-residence allocator, IOP block linking, native COP2 macro ops, inline unaligned fastmem, persisted VU program cache, call-ret shadow ring, VU0 spin fast-forward. - MVU_DIFF shadow-run hooks in shared VU interpreter TUs (superseded by the offline vurunner JIT-vs-interp oracle). Imported from yaps2: - tests/ctest/core/recompilers: ~80 gtest suites (EE/IOP/VU differential harnesses, fuzzers, ABI digest tripwire, capture format pins) plus the gs_vertex_tests kernel oracle. - pcsx2-vurunner / pcsx2-eerunner headless capture-replay runners. - tools/perf counter-based A/B rigs, perf jitdump productionization, PmuCounters, clang-perf/clang-handheld presets. - pcsx2-libretro core (ENABLE_LIBRETRO, default OFF; rename pending). - GS vertex-kick fast path (GV series): TBL-based packed parse, register-resident kick, scalar-outcode cull, fused draw-rect/FindMinMax. - Null renderer, VK_KHR_display direct WSI, swapchain PresentStats. - SPU2 NEON mixer vectorization, EE timer read clamp (NFL 2K5 hang), IOP ioman signed-compare fix, assorted UB fixes. Kept from ARMSX2 in the both-touched files: - iOS dual-map W^X and fastmem-unavailable resilience (Memory, HostSys, vtlb). The split data/code area model is retained; both areas now take fixed VA hints so cached VU JIT code stays deterministic on Linux. - Android thread-affinity model, VMState shutdown early-outs, all platform frontends, branding, CI, RetroAchievements identity/policy. - GSDeviceVK: ARMSX2's push-descriptor decision logic (Mali crash gate, proprietary-vs-turnip Adreno split) merged with yaps2's descriptor-pool exhaustion recovery (flush + render-pass restart instead of dropped binds). Vendor feature policy is the union: Mali fbfetch policy with MediaTek/G57/Xclipse gates from ARMSX2; Adreno stencil/ROV/ test-and-sample-depth hang avoidance and no_ps2_z_quantization from yaps2. Build-system notes: - The Qt debugger is now gated behind ENABLE_QT_DEBUGGER (default off on arm64) so handheld builds drop the KDDockWidgets dependency. - GSDeviceNone and remaining yaps2 GS code were ported to the newer upstream GSTexture Usage-flags API. The replaced backend's interpreter-fallback glue (intExecuteOneInst, AndroidEEOpHist) and the EEDiffVerify runtime differ are retained for now; dead pieces will be removed in a follow-up commit.
160 lines
5.3 KiB
CMake
160 lines
5.3 KiB
CMake
#-------------------------------------------------------------------------------
|
|
# Search all libraries on the system
|
|
#-------------------------------------------------------------------------------
|
|
find_package(Git)
|
|
|
|
# Require threads on all OSes.
|
|
find_package(Threads REQUIRED)
|
|
|
|
# Dependency libraries.
|
|
# On macOS, Mono.framework contains an ancient version of libpng. We don't want that.
|
|
# Avoid it by telling cmake to avoid finding frameworks while we search for libpng.
|
|
set(FIND_FRAMEWORK_BACKUP ${CMAKE_FIND_FRAMEWORK})
|
|
set(CMAKE_FIND_FRAMEWORK NEVER)
|
|
find_package(PNG 1.6.40 REQUIRED)
|
|
find_package(JPEG REQUIRED) # No version because flatpak uses libjpeg-turbo.
|
|
find_package(ZLIB REQUIRED) # v1.3, but Mac uses the SDK version.
|
|
find_package(Zstd 1.5.5 REQUIRED)
|
|
find_package(LZ4 REQUIRED)
|
|
find_package(WebP REQUIRED) # v1.3.2, spews an error on Linux because no pkg-config.
|
|
find_package(SDL3 3.2.6 REQUIRED)
|
|
find_package(Freetype 2.10 REQUIRED) # 2.10 is the first with COLRv0 support, which we need for rendering emoji
|
|
find_package(plutovg 1.1.0 REQUIRED)
|
|
find_package(plutosvg 0.0.7 REQUIRED)
|
|
if (WIN32)
|
|
find_package(DirectX-Headers 1.618.1 REQUIRED)
|
|
endif()
|
|
|
|
if(USE_VULKAN)
|
|
find_package(Shaderc REQUIRED)
|
|
endif()
|
|
|
|
# Platform-specific dependencies.
|
|
if (WIN32)
|
|
add_subdirectory(3rdparty/D3D12MemAlloc EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/winpixeventruntime EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/winwil EXCLUDE_FROM_ALL)
|
|
set(FFMPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/3rdparty/ffmpeg/include")
|
|
find_package(Vtune)
|
|
else()
|
|
find_package(CURL REQUIRED)
|
|
if(NOT IOS)
|
|
find_package(PCAP REQUIRED)
|
|
endif()
|
|
find_package(Vtune)
|
|
|
|
# Use bundled ffmpeg v4.x.x headers if we can't locate it in the system.
|
|
# We'll try to load it dynamically at runtime.
|
|
find_package(FFMPEG COMPONENTS avcodec avformat avutil swresample swscale)
|
|
if(NOT FFMPEG_FOUND)
|
|
message(WARNING "FFmpeg not found, using bundled headers.")
|
|
set(FFMPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/3rdparty/ffmpeg/include")
|
|
endif()
|
|
|
|
## Use CheckLib package to find module
|
|
include(CheckLib)
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
find_package(Fontconfig REQUIRED)
|
|
if(LINUX)
|
|
check_lib(LIBUDEV libudev libudev.h)
|
|
endif()
|
|
|
|
if(X11_API)
|
|
find_package(X11 REQUIRED)
|
|
if (NOT X11_Xrandr_FOUND)
|
|
message(FATAL_ERROR "XRandR extension is required")
|
|
endif()
|
|
endif()
|
|
|
|
if(WAYLAND_API)
|
|
find_package(ECM REQUIRED NO_MODULE)
|
|
list(APPEND CMAKE_MODULE_PATH "${ECM_MODULE_PATH}")
|
|
find_package(Wayland REQUIRED Egl)
|
|
endif()
|
|
|
|
if(USE_BACKTRACE)
|
|
find_package(Libbacktrace REQUIRED)
|
|
endif()
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(DBUS REQUIRED dbus-1)
|
|
endif()
|
|
endif()
|
|
|
|
set(CMAKE_FIND_FRAMEWORK ${FIND_FRAMEWORK_BACKUP})
|
|
|
|
add_subdirectory(3rdparty/fast_float EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/libretro EXCLUDE_FROM_ALL)
|
|
# rapidyaml re-vendored in-tree (fork-local; upstream 0beb18c9e un-bundled it in
|
|
# favour of a system ryml). Keeps the build self-contained for handheld/cross builds.
|
|
add_subdirectory(3rdparty/rapidyaml EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/lzma EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/libchdr EXCLUDE_FROM_ALL)
|
|
disable_compiler_warnings_for_target(libchdr)
|
|
add_subdirectory(3rdparty/soundtouch EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/simpleini EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/imgui EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/cpuinfo EXCLUDE_FROM_ALL)
|
|
disable_compiler_warnings_for_target(cpuinfo)
|
|
add_subdirectory(3rdparty/libzip EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/rcheevos EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/rapidjson EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/discord-rpc EXCLUDE_FROM_ALL)
|
|
add_subdirectory(3rdparty/freesurround EXCLUDE_FROM_ALL)
|
|
|
|
if(USE_OPENGL)
|
|
add_subdirectory(3rdparty/glad EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
if(USE_VULKAN)
|
|
add_subdirectory(3rdparty/vulkan EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
add_subdirectory(3rdparty/cubeb EXCLUDE_FROM_ALL)
|
|
disable_compiler_warnings_for_target(cubeb)
|
|
disable_compiler_warnings_for_target(speex)
|
|
|
|
# Find the Qt components that we need.
|
|
if(ENABLE_QT_UI)
|
|
find_package(Qt6 6.10.1 COMPONENTS CoreTools Core GuiTools Gui WidgetsTools Widgets LinguistTools REQUIRED)
|
|
|
|
if(NOT WIN32 AND NOT APPLE)
|
|
if (Qt6_VERSION VERSION_GREATER_EQUAL 6.10.0)
|
|
find_package(Qt6 COMPONENTS CorePrivate GuiPrivate WidgetsPrivate REQUIRED)
|
|
endif()
|
|
endif()
|
|
|
|
# The docking system for the debugger.
|
|
if(ENABLE_QT_DEBUGGER)
|
|
find_package(KDDockWidgets-qt6 2.3.0 REQUIRED)
|
|
endif()
|
|
endif()
|
|
|
|
if(WIN32)
|
|
add_subdirectory(3rdparty/rainterface EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
# Demangler for the debugger.
|
|
add_subdirectory(3rdparty/demangler EXCLUDE_FROM_ALL)
|
|
|
|
# Symbol table parser.
|
|
add_subdirectory(3rdparty/ccc EXCLUDE_FROM_ALL)
|
|
|
|
# Architecture-specific.
|
|
if(ARCH_X86)
|
|
add_subdirectory(3rdparty/zydis EXCLUDE_FROM_ALL)
|
|
elseif(ARCH_ARM64)
|
|
add_subdirectory(3rdparty/vixl EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
# Prevent fmt from being built with exceptions, or being thrown at call sites.
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFMT_USE_EXCEPTIONS=0 -DFMT_USE_RTTI=0")
|
|
add_subdirectory(3rdparty/fmt EXCLUDE_FROM_ALL)
|
|
|
|
# Deliberately at the end. We don't want to set the flag on third-party projects.
|
|
if(MSVC)
|
|
# Don't warn about "deprecated" POSIX functions.
|
|
add_definitions("-D_CRT_NONSTDC_NO_WARNINGS" "-D_CRT_SECURE_NO_WARNINGS" "-DCRT_SECURE_NO_DEPRECATE")
|
|
endif()
|