From a5cb5376e07396aaeffb6b6e09da46ebc138dded Mon Sep 17 00:00:00 2001 From: Live session user Date: Sat, 29 Nov 2025 06:10:15 -0800 Subject: [PATCH] Windows ARM build --- .ci/build-mac-arm64.sh | 6 ++-- .ci/build-windows-clang.sh | 11 +++++--- .ci/deploy-windows-clang.sh | 3 +- .github/workflows/rpcs3.yml | 56 +++++++++++++++++++++---------------- Utilities/StrFmt.h | 4 +-- rpcs3/Emu/Memory/vm.cpp | 2 +- 6 files changed, 47 insertions(+), 35 deletions(-) diff --git a/.ci/build-mac-arm64.sh b/.ci/build-mac-arm64.sh index b69c634f48..4af777f758 100755 --- a/.ci/build-mac-arm64.sh +++ b/.ci/build-mac-arm64.sh @@ -6,7 +6,7 @@ export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 export HOMEBREW_NO_ENV_HINTS=1 export HOMEBREW_NO_INSTALL_CLEANUP=1 -brew install -f --overwrite --quiet pipenv googletest ffmpeg@5 "llvm@$LLVM_COMPILER_VER" glew sdl3 vulkan-headers +brew install -f --overwrite --quiet pipenv ffmpeg@5 "llvm@$LLVM_COMPILER_VER" glew sdl3 vulkan-headers brew link -f --quiet "llvm@$LLVM_COMPILER_VER" ffmpeg@5 # moltenvk based on commit for 1.4.0 release @@ -83,8 +83,8 @@ mkdir build && cd build || exit 1 export MACOSX_DEPLOYMENT_TARGET=14.0 "$BREW_PATH/bin/cmake" .. \ - -DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \ - -DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \ + -DBUILD_RPCS3_TESTS=OFF \ + -DRUN_RPCS3_TESTS=OFF \ -DUSE_SDL=ON \ -DUSE_DISCORD_RPC=ON \ -DUSE_VULKAN=ON \ diff --git a/.ci/build-windows-clang.sh b/.ci/build-windows-clang.sh index 0880e7f5ed..4f07688ee5 100644 --- a/.ci/build-windows-clang.sh +++ b/.ci/build-windows-clang.sh @@ -2,6 +2,9 @@ git config --global --add safe.directory '*' +CPU_ARCH="${1:-x86_64}" +MSYS2="${2:-clang64}" + # Pull all the submodules except some # Note: Tried to use git submodule status, but it takes over 20 seconds # shellcheck disable=SC2046 @@ -23,7 +26,7 @@ else fi cmake .. \ - -DCMAKE_PREFIX_PATH=/clang64 \ + -DCMAKE_PREFIX_PATH=/"${MSYS2}" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DUSE_NATIVE_INSTRUCTIONS=OFF \ -DUSE_PRECOMPILED_HEADERS=OFF \ @@ -44,8 +47,8 @@ cmake .. \ -DUSE_DISCORD_RPC=ON \ -DOpenGL_GL_PREFERENCE=LEGACY \ -DWITH_LLVM=ON \ - -DLLVM_DIR=/clang64/lib/cmake/llvm \ - -DVulkan_LIBRARY=/clang64/lib/libvulkan-1.dll.a \ + -DLLVM_DIR=/"${MSYS2}"/lib/cmake/llvm \ + -DVulkan_LIBRARY=/"${MSYS2}"/lib/libvulkan-1.dll.a \ -DSTATIC_LINK_LLVM=ON \ -DBUILD_RPCS3_TESTS=OFF \ -DRUN_RPCS3_TESTS=OFF \ @@ -57,5 +60,5 @@ cd .. # If it compiled succesfully let's deploy. if [ "$build_status" -eq 0 ]; then - .ci/deploy-windows-clang.sh "x86_64" + .ci/deploy-windows-clang.sh "${CPU_ARCH}" "${MSYS2}" fi diff --git a/.ci/deploy-windows-clang.sh b/.ci/deploy-windows-clang.sh index c95f82e7b8..b11953d7b1 100644 --- a/.ci/deploy-windows-clang.sh +++ b/.ci/deploy-windows-clang.sh @@ -7,12 +7,13 @@ cd build || exit 1 CPU_ARCH="${1:-x86_64}" +MSYS2="${2:-clang64}" echo "Deploying rpcs3 windows clang $CPU_ARCH" # BUILD_blablabla is CI specific, so we wrap it for portability ARTIFACT_DIR=$(cygpath -u "$BUILD_ARTIFACTSTAGINGDIRECTORY") -MSYS2_CLANG_BIN=$(cygpath -w /clang64/bin) +MSYS2_CLANG_BIN=$(cygpath -w /"${MSYS2}"/bin) MSYS2_USR_BIN=$(cygpath -w /usr/bin) echo "Installing dependencies of: ./bin/rpcs3.exe (MSYS2 dir is '$MSYS2_CLANG_BIN', usr dir is '$MSYS2_USR_BIN')" diff --git a/.github/workflows/rpcs3.yml b/.github/workflows/rpcs3.yml index 9964c045f5..22a9103acf 100644 --- a/.github/workflows/rpcs3.yml +++ b/.github/workflows/rpcs3.yml @@ -328,16 +328,24 @@ jobs: Windows_Build_Clang: # Only run push event on master branch of main repo, but run all PRs if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master') - name: RPCS3 Windows Clang - runs-on: windows-2025 strategy: + fail-fast: false matrix: include: - msys2: clang64 compiler: clang - arch: win64 + arch: x86_64 + os: windows-2025 + name: X64 + - msys2: clangarm64 + compiler: clang + arch: aarch64 + os: windows-11-arm + name: ARM64 env: CCACHE_DIR: 'C:\ccache' + name: RPCS3 Windows Clang ${{ matrix.arch }} + runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@main @@ -351,23 +359,23 @@ jobs: update: true cache: true install: | - mingw-w64-clang-x86_64-clang - mingw-w64-clang-x86_64-ccache - mingw-w64-clang-x86_64-cmake - mingw-w64-clang-x86_64-lld - mingw-w64-clang-x86_64-ninja - mingw-w64-clang-x86_64-llvm - mingw-w64-clang-x86_64-ffmpeg - mingw-w64-clang-x86_64-opencv - mingw-w64-clang-x86_64-glew - mingw-w64-clang-x86_64-vulkan - mingw-w64-clang-x86_64-vulkan-headers - mingw-w64-clang-x86_64-vulkan-loader - mingw-w64-clang-x86_64-gtest - mingw-w64-clang-x86_64-qt6-base - mingw-w64-clang-x86_64-qt6-declarative - mingw-w64-clang-x86_64-qt6-multimedia - mingw-w64-clang-x86_64-qt6-svg + mingw-w64-clang-${{ matrix.arch }}-clang + mingw-w64-clang-${{ matrix.arch }}-ccache + mingw-w64-clang-${{ matrix.arch }}-cmake + mingw-w64-clang-${{ matrix.arch }}-lld + mingw-w64-clang-${{ matrix.arch }}-ninja + mingw-w64-clang-${{ matrix.arch }}-llvm + mingw-w64-clang-${{ matrix.arch }}-ffmpeg + mingw-w64-clang-${{ matrix.arch }}-opencv + mingw-w64-clang-${{ matrix.arch }}-glew + mingw-w64-clang-${{ matrix.arch }}-vulkan + mingw-w64-clang-${{ matrix.arch }}-vulkan-headers + mingw-w64-clang-${{ matrix.arch }}-vulkan-loader + mingw-w64-clang-${{ matrix.arch }}-gtest + mingw-w64-clang-${{ matrix.arch }}-qt6-base + mingw-w64-clang-${{ matrix.arch }}-qt6-declarative + mingw-w64-clang-${{ matrix.arch }}-qt6-multimedia + mingw-w64-clang-${{ matrix.arch }}-qt6-svg base-devel curl git @@ -378,8 +386,8 @@ jobs: id: restore-build-ccache with: path: ${{ env.CCACHE_DIR }} - key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-${{ github.run_id }} - restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}- + key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ matrix.arch }}-${{ github.run_id }} + restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ matrix.arch }}- - name: Build RPCS3 shell: msys2 {0} @@ -387,7 +395,7 @@ jobs: export CCACHE_DIR=$(cygpath -u "$CCACHE_DIR") echo "CCACHE_DIR=$CCACHE_DIR" .ci/setup-windows-ci-vars.sh ${{ matrix.arch }} ${{ matrix.compiler }} - .ci/build-windows-clang.sh + .ci/build-windows-clang.sh ${{ matrix.arch }} ${{ matrix.msys2 }} - name: Save build Ccache if: github.ref == 'refs/heads/master' @@ -399,7 +407,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@main with: - name: RPCS3 for Windows (${{ runner.arch }}, ${{ matrix.compiler }}) + name: RPCS3 for Windows (${{ matrix.name }}, clang) path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }} compression-level: 0 if-no-files-found: error diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 6d9ea05c9e..a984ebe212 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -393,8 +393,8 @@ namespace fmt raw_throw_exception(src_loc, reinterpret_cast(fmt), type_info_v, fmt_args_t{fmt_unveil::get(args)...}); } -#if !defined(_MSC_VER) || defined(__clang__) - [[noreturn]] ~throw_exception() = default; +#if defined(__FreeBSD__) + [[noreturn]] ~throw_exception(); #endif }; diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index 6181c2c6bb..75e610a9f2 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -2254,7 +2254,7 @@ namespace vm std::memset(g_range_lock_set, 0, sizeof(g_range_lock_set)); std::memset(g_range_lock_bits, 0, sizeof(g_range_lock_bits)); -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__arm64__) utils::memory_release(g_hook_addr, 0x800000000); #endif ensure(s_hook.map(g_hook_addr, utils::protection::rw, true));