diff --git a/.ci/build-mac-arm64.sh b/.ci/build-mac-arm64.sh new file mode 100644 index 0000000000..89ed66fd95 --- /dev/null +++ b/.ci/build-mac-arm64.sh @@ -0,0 +1,142 @@ +#!/bin/sh -ex + +# shellcheck disable=SC2086 +brew_arm64_install_packages() { + for pkg in "$@"; do + echo "Fetching bottle for $pkg..." + bottle_path="$("$BREW_ARM64_PATH/bin/brew" --cache --bottle-tag=arm64_sonoma "$pkg")" + if [ ! -f "$bottle_path" ]; then + if ! "$BREW_ARM64_PATH/bin/brew" fetch --force --bottle-tag=arm64_sonoma "$pkg"; then + echo "Failed to fetch bottle for $pkg" + return 1 + fi + bottle_path="$("$BREW_ARM64_PATH/bin/brew" --cache --bottle-tag=arm64_sonoma "$pkg")" + fi + + echo "Installing $pkg..." + "$BREW_ARM64_PATH/bin/brew" install --ignore-dependencies "$bottle_path" || true + done +} + +export HOMEBREW_NO_AUTO_UPDATE=1 +export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 +export HOMEBREW_NO_INSTALL_CLEANUP=1 + +/usr/local/bin/brew update +/usr/local/bin/brew uninstall -f --ignore-dependencies ffmpeg +/usr/local/bin/brew install -f --build-from-source ffmpeg@5 || true +/usr/local/bin/brew install -f --overwrite nasm ninja p7zip ccache pipenv #create-dmg +/usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils +/usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5 || true + +export BREW_ARM64_PATH="/opt/homebrew1" +sudo mkdir -p "$BREW_ARM64_PATH" +sudo chmod 777 "$BREW_ARM64_PATH" +curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C "$BREW_ARM64_PATH" + +"$BREW_ARM64_PATH/bin/brew" update +brew_arm64_install_packages 0mq aom aribb24 ca-certificates cjson curl dav1d ffmpeg@5 fontconfig freetype freetype2 gettext glew gmp gnutls lame libbluray libidn2 libnettle libogg libpng librist libsodium libsoxr libtasn libtasn1 libunistring libvmaf libvorbis libvpx libx11 libxau libxcb libxdmcp llvm@$LLVM_COMPILER_VER mbedtls molten-vk nettle opencore-amr openjpeg openssl opus p11-kit pkg-config pkgconfig pzstd rav1e sdl2 snappy speex srt svt-av1 theora vulkan-headers webp x264 x265 xz z3 zeromq zmq zstd +"$BREW_ARM64_PATH/bin/brew" link -f ffmpeg@5 + +# moltenvk based on commit for 1.2.10 release +wget https://raw.githubusercontent.com/Homebrew/homebrew-core/0d9f25fbd1658e975d00bd0e8cccd20a0c2cb74b/Formula/m/molten-vk.rb +/usr/local/bin/brew install -f --overwrite ./molten-vk.rb +export CXX=clang++ +export CC=clang + +export BREW_PATH; +BREW_PATH="$(brew --prefix)" +export BREW_X64_PATH; +BREW_X64_PATH="$("/usr/local/bin/brew" --prefix)" +export BREW_BIN="/usr/local/bin" +export BREW_SBIN="/usr/local/sbin" +export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=arm64' + +export WORKDIR; +WORKDIR="$(pwd)" + +# Get Qt +if [ ! -d "/tmp/Qt/$QT_VER" ]; then + mkdir -p "/tmp/Qt" + git clone https://github.com/engnr/qt-downloader.git + cd qt-downloader + git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597 + cd "/tmp/Qt" + "$BREW_X64_PATH/bin/pipenv" run pip3 install py7zr requests semantic_version lxml + mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64" + "$BREW_X64_PATH/bin/pipenv" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia +fi + +cd "$WORKDIR" +ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER" + +export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN" +export SDL2_DIR="$BREW_ARM64_PATH/opt/sdl2/lib/cmake/SDL2" + +export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH" +export LDFLAGS="-L$BREW_ARM64_PATH/lib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_ARM64_PATH/lib/libSDL2.dylib $BREW_ARM64_PATH/lib/libGLEW.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/libunwind.1.dylib -Wl,-rpath,$BREW_ARM64_PATH/lib" +export CPPFLAGS="-I$BREW_ARM64_PATH/include -I$BREW_X64_PATH/include -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" +export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" +export LIBRARY_PATH="$BREW_ARM64_PATH/lib" +export LD_LIBRARY_PATH="$BREW_ARM64_PATH/lib" + +export VULKAN_SDK +VULKAN_SDK="$BREW_ARM64_PATH/opt/molten-vk" +ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib" || true +export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json" + +export LLVM_DIR +LLVM_DIR="$BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER" +# exclude ffmpeg, SPIRV and LLVM, and sdl from submodule update +# shellcheck disable=SC2046 +git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/SPIRV/ && !/SDL/ { print $3 }' .gitmodules) + +# 3rdparty fixes +sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c + +rm -rf build +mkdir build && cd build || exit 1 + +export MACOSX_DEPLOYMENT_TARGET=13.0 + +"$BREW_X64_PATH/bin/cmake" .. \ + -DUSE_SDL=ON \ + -DUSE_DISCORD_RPC=OFF \ + -DUSE_VULKAN=ON \ + -DUSE_ALSA=OFF \ + -DUSE_PULSE=OFF \ + -DUSE_AUDIOUNIT=ON \ + -DUSE_SYSTEM_FFMPEG=ON \ + -DLLVM_CCACHE_BUILD=OFF \ + -DLLVM_BUILD_RUNTIME=OFF \ + -DLLVM_BUILD_TOOLS=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_INCLUDE_TOOLS=OFF \ + -DLLVM_INCLUDE_UTILS=OFF \ + -DLLVM_USE_PERF=OFF \ + -DLLVM_ENABLE_Z3_SOLVER=OFF \ + -DUSE_NATIVE_INSTRUCTIONS=OFF \ + -DUSE_SYSTEM_MVK=ON \ + -DUSE_SYSTEM_FAUDIO=OFF \ + -DUSE_SYSTEM_SDL=ON \ + $CMAKE_EXTRA_OPTS \ + -DLLVM_TARGET_ARCH=arm64 \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_IGNORE_PATH="$BREW_X64_PATH/lib" \ + -DCMAKE_SYSTEM_PROCESSOR=arm64 \ + -DCMAKE_TOOLCHAIN_FILE=buildfiles/cmake/TCDarwinARM64.cmake \ + -DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" \ + -G Ninja + +"$BREW_PATH/bin/ninja"; build_status=$?; + +cd .. + +{ [ "$CI_HAS_ARTIFACTS" = "true" ]; +} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false" + +if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then + .ci/deploy-mac-arm64.sh +fi diff --git a/.ci/build-mac.sh b/.ci/build-mac.sh old mode 100755 new mode 100644 index 65a35ce949..ef8a008967 --- a/.ci/build-mac.sh +++ b/.ci/build-mac.sh @@ -1,5 +1,6 @@ #!/bin/sh -ex +# shellcheck disable=SC2086 export HOMEBREW_NO_AUTO_UPDATE=1 export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew unlink certifi @@ -7,18 +8,17 @@ brew install -f --overwrite nasm ninja p7zip ccache pipenv #create-dmg #/usr/sbin/softwareupdate --install-rosetta --agree-to-license arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -arch -x86_64 /usr/local/bin/brew install -f --overwrite python@3.12 || arch -x86_64 /usr/local/bin/brew link --overwrite python@3.12 arch -x86_64 /usr/local/bin/brew update +arch -x86_64 /usr/local/bin/brew install -f --overwrite python@3.12 || arch -x86_64 /usr/local/bin/brew link --overwrite python@3.12 arch -x86_64 /usr/local/bin/brew uninstall -f --ignore-dependencies ffmpeg arch -x86_64 /usr/local/bin/brew install -f --build-from-source ffmpeg@5 arch -x86_64 /usr/local/bin/brew reinstall -f --build-from-source gnutls freetype -arch -x86_64 /usr/local/bin/brew install llvm@16 glew cmake sdl2 vulkan-headers coreutils -arch -x86_64 /usr/local/bin/brew link -f llvm@16 ffmpeg@5 +arch -x86_64 /usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils +arch -x86_64 /usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5 # moltenvk based on commit for 1.2.10 release wget https://raw.githubusercontent.com/Homebrew/homebrew-core/0d9f25fbd1658e975d00bd0e8cccd20a0c2cb74b/Formula/m/molten-vk.rb arch -x86_64 /usr/local/bin/brew install -f --overwrite ./molten-vk.rb -#export MACOSX_DEPLOYMENT_TARGET=12.0 export CXX=clang++ export CC=clang @@ -51,9 +51,10 @@ ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER" export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN" export SDL2_DIR="$BREW_X64_PATH/opt/sdl2/lib/cmake/SDL2" -export PATH="$BREW_X64_PATH/opt/llvm@16/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH" +export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH" export LDFLAGS="-L$BREW_X64_PATH/lib -Wl,-rpath,$BREW_X64_PATH/lib" -export CPPFLAGS="-I$BREW_X64_PATH/include -msse -msse2 -mcx16 -no-pie" +export CPPFLAGS="-I$BREW_X64_PATH/include -msse -msse2 -mcx16 -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" +export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" export LIBRARY_PATH="$BREW_X64_PATH/lib" export LD_LIBRARY_PATH="$BREW_X64_PATH/lib" @@ -63,7 +64,7 @@ ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib" export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json" export LLVM_DIR -LLVM_DIR="BREW_X64_PATH/opt/llvm@16" +LLVM_DIR="BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER" # exclude ffmpeg, SPIRV and LLVM, and sdl from submodule update # shellcheck disable=SC2046 git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/SPIRV/ && !/SDL/ { print $3 }' .gitmodules) @@ -73,6 +74,8 @@ sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVer mkdir build && cd build || exit 1 +export MACOSX_DEPLOYMENT_TARGET=13.0 + "$BREW_X64_PATH/bin/cmake" .. \ -DUSE_SDL=ON \ -DUSE_DISCORD_RPC=ON \ @@ -99,6 +102,7 @@ mkdir build && cd build || exit 1 -DLLVM_TARGET_ARCH=X86_64 \ -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -DCMAKE_IGNORE_PATH="$BREW_PATH/lib" \ + -DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" \ -G Ninja "$BREW_PATH/bin/ninja"; build_status=$?; diff --git a/.ci/deploy-mac-arm64.sh b/.ci/deploy-mac-arm64.sh new file mode 100644 index 0000000000..0baedfa99d --- /dev/null +++ b/.ci/deploy-mac-arm64.sh @@ -0,0 +1,76 @@ +#!/bin/sh -ex + +# shellcheck disable=SC2086 +cd build || exit 1 + +# Gather explicit version number and number of commits +COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ../rpcs3/rpcs3_version.cpp) +COMM_COUNT=$(git rev-list --count HEAD) +COMM_HASH=$(git rev-parse --short=8 HEAD) + +AVVER="${COMM_TAG}-${COMM_COUNT}" + +# AVVER is used for GitHub releases, it is the version number. +echo "AVVER=$AVVER" >> ../.ci/ci-vars.env + +cd bin +mkdir "rpcs3.app/Contents/lib/" || true + +cp "$(realpath /opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib" +cp "$(realpath /opt/homebrew1/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib" +cp "$(realpath /opt/homebrew1/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib" + +rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \ +"rpcs3.app/Contents/Frameworks/QtQml.framework" \ +"rpcs3.app/Contents/Frameworks/QtQmlModels.framework" \ +"rpcs3.app/Contents/Frameworks/QtQuick.framework" \ +"rpcs3.app/Contents/Frameworks/QtVirtualKeyboard.framework" \ +"rpcs3.app/Contents/Plugins/platforminputcontexts" \ +"rpcs3.app/Contents/Plugins/virtualkeyboard" \ +"rpcs3.app/Contents/Resources/git" + +../../.ci/optimize-mac.sh rpcs3.app + +# Hack +install_name_tool \ +-delete_rpath /opt/homebrew1/lib \ +-delete_rpath /opt/homebrew/lib \ +-delete_rpath /opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib \ +-delete_rpath /usr/local/lib RPCS3.app/Contents/MacOS/rpcs3 +#-delete_rpath /opt/homebrew1/Cellar/sdl2/2.30.7/lib + +# Need to do this rename hack due to case insensitive filesystem +mv rpcs3.app RPCS3_.app +mv RPCS3_.app RPCS3.app + +# NOTE: "--deep" is deprecated +codesign --deep -fs - RPCS3.app + +echo "[InternetShortcut]" > Quickstart.url +echo "URL=https://rpcs3.net/quickstart" >> Quickstart.url +echo "IconIndex=0" >> Quickstart.url + +#DMG_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos_arm64.dmg" +#"$BREW_X64_PATH/bin/create-dmg" --volname RPCS3 \ +#--window-size 800 400 \ +#--icon-size 100 \ +#--icon rpcs3.app 200 190 \ +#--add-file Quickstart.url Quickstart.url 400 20 \ +#--hide-extension rpcs3.app \ +#--hide-extension Quickstart.url \ +#--app-drop-link 600 185 \ +#--skip-jenkins \ +#--format ULMO \ +#"$DMG_FILEPATH" \ +#RPCS3.app +#FILESIZE=$(stat -f %z "$DMG_FILEPATH") +#SHA256SUM=$(shasum -a 256 "$DMG_FILEPATH" | awk '{ print $1 }') + +ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos_arm64.7z" +"$BREW_X64_PATH/bin/7z" a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url +FILESIZE=$(stat -f %z "$ARCHIVE_FILEPATH") +SHA256SUM=$(shasum -a 256 "$ARCHIVE_FILEPATH" | awk '{ print $1 }') + +cd .. +echo "${SHA256SUM};${FILESIZE}B" > "$RELEASE_MESSAGE" +cd bin diff --git a/.ci/deploy-mac.sh b/.ci/deploy-mac.sh old mode 100755 new mode 100644 index 20de7023ea..91eb253589 --- a/.ci/deploy-mac.sh +++ b/.ci/deploy-mac.sh @@ -1,5 +1,6 @@ #!/bin/sh -ex +# shellcheck disable=SC2086 cd build || exit 1 # Gather explicit version number and number of commits @@ -15,7 +16,7 @@ echo "AVVER=$AVVER" >> ../.ci/ci-vars.env cd bin mkdir "rpcs3.app/Contents/lib/" -cp "/usr/local/opt/llvm@16/lib/c++/libc++abi.1.0.dylib" "rpcs3.app/Contents/lib/libc++abi.1.dylib" +cp "/usr/local/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib" "rpcs3.app/Contents/lib/libc++abi.1.dylib" cp "$(realpath /usr/local/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib" cp "$(realpath /usr/local/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib" @@ -28,10 +29,21 @@ rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \ "rpcs3.app/Contents/Plugins/virtualkeyboard" \ "rpcs3.app/Contents/Resources/git" +../../.ci/optimize-mac.sh rpcs3.app + # Need to do this rename hack due to case insensitive filesystem mv rpcs3.app RPCS3_.app mv RPCS3_.app RPCS3.app +# Hack +install_name_tool \ +-delete_rpath /usr/local/lib \ +-delete_rpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3 +#-delete_rpath /usr/local/Cellar/sdl2/2.30.3/lib + +# NOTE: "--deep" is deprecated +codesign --deep -fs - RPCS3.app + echo "[InternetShortcut]" > Quickstart.url echo "URL=https://rpcs3.net/quickstart" >> Quickstart.url echo "IconIndex=0" >> Quickstart.url diff --git a/.ci/optimize-mac.sh b/.ci/optimize-mac.sh new file mode 100644 index 0000000000..5fea7877f4 --- /dev/null +++ b/.ci/optimize-mac.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +file_path=$(find "$1/Contents/MacOS" -type f -print0 | head -n 1) + +if [ -z "$file_path" ]; then + echo "No executable file found in $1/Contents/MacOS" >&2 + exit 1 +fi + + +target_architecture="$(lipo "$file_path" -archs)" + +if [ -z "$target_architecture" ]; then + exit 1 +fi + +# shellcheck disable=SC3045 +find "$1" -type f -print0 | while IFS= read -r -d '' file; do + echo Thinning "$file" -> "$target_architecture" + lipo "$file" -thin "$target_architecture" -output "$file" || true +done diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2b1526a515..e2beb92a84 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -122,7 +122,7 @@ jobs: env: RPCS3_TOKEN: $(RPCS3-Token) -- job: Mac_Build +- job: Mac_Build_x86_64 timeoutInMinutes: 180 variables: CCACHE_DIR: "/tmp/ccache_dir" @@ -134,9 +134,10 @@ jobs: ARTDIR: $(Build.ArtifactStagingDirectory) QT_VER: '6.6.3' QT_VER_MAIN: '6' + LLVM_COMPILER_VER: '16' pool: - vmImage: "macOS-12" + vmImage: "macOS-13" steps: - task: Cache@2 @@ -155,23 +156,85 @@ jobs: qt | "$(Agent.OS)" | "$(QT_VER)" displayName: Qt cache - - task: Cache@2 - inputs: - key: brew | "$(Agent.OS)" - path: /Users/runner/Library/Caches/Homebrew - restoreKeys: | - brew | "$(Agent.OS)" - displayName: Homebrew cache + # - task: Cache@2 + # inputs: + # key: brew | "$(Agent.OS)" + # path: /Users/runner/Library/Caches/Homebrew + # restoreKeys: | + # brew | "$(Agent.OS)" + # displayName: Homebrew cache - bash: | chmod +x ".ci/build-mac.sh" chmod +x ".ci/deploy-mac.sh" + chmod +x ".ci/optimize-mac.sh" ".ci/build-mac.sh" - displayName: Build MacOS + displayName: Build macOS (x86_64) - publish: $(Build.ArtifactStagingDirectory) condition: succeeded() - artifact: RPCS3 for Mac + artifact: RPCS3 for Mac (Intel) + + - bash: | + source './.ci/export-cirrus-vars.sh' + .ci/github-upload.sh + condition: and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.Repository.Name'], 'RPCS3/rpcs3'), eq(variables['Build.SourceBranch'], 'refs/heads/master')) + displayName: Push build to GitHub + env: + RPCS3_TOKEN: $(RPCS3-Token) + +- job: Mac_Build_arm64 + timeoutInMinutes: 180 + variables: + CCACHE_DIR: "/tmp/ccache_dir" + CCACHE_MAXSIZE: 300M + CI_HAS_ARTIFACTS: true + UPLOAD_COMMIT_HASH: 8e21bdbc40711a3fccd18fbf17b742348b0f4281 + UPLOAD_REPO_FULL_NAME: "RPCS3/rpcs3-binaries-mac-arm64" + RELEASE_MESSAGE: "../GitHubReleaseMessage.txt" + ARTDIR: $(Build.ArtifactStagingDirectory) + QT_VER: '6.6.3' + QT_VER_MAIN: '6' + LLVM_COMPILER_VER: '16' + + pool: + vmImage: "macOS-13" + + steps: + - task: Cache@2 + inputs: + key: ccache | "$(Agent.OS)" + path: $(CCACHE_DIR) + restoreKeys: | + ccache | "$(Agent.OS)" + displayName: Ccache cache + + - task: Cache@2 + inputs: + key: qt | "$(Agent.OS)" | "$(QT_VER)" + path: /tmp/Qt + restoreKeys: | + qt | "$(Agent.OS)" | "$(QT_VER)" + displayName: Qt cache + + # - task: Cache@2 + # inputs: + # key: brew | "$(Agent.OS)" + # path: /Users/runner/Library/Caches/Homebrew + # restoreKeys: | + # brew | "$(Agent.OS)" + # displayName: Homebrew cache + + - bash: | + chmod +x ".ci/build-mac-arm64.sh" + chmod +x ".ci/deploy-mac-arm64.sh" + chmod +x ".ci/optimize-mac.sh" + ".ci/build-mac-arm64.sh" + displayName: Build macOS (arm64) + + - publish: $(Build.ArtifactStagingDirectory) + condition: succeeded() + artifact: RPCS3 for Mac (Apple Silicon) - bash: | source './.ci/export-cirrus-vars.sh' diff --git a/buildfiles/cmake/ConfigureCompiler.cmake b/buildfiles/cmake/ConfigureCompiler.cmake index 0f76944556..172ba9545e 100644 --- a/buildfiles/cmake/ConfigureCompiler.cmake +++ b/buildfiles/cmake/ConfigureCompiler.cmake @@ -88,6 +88,7 @@ else() add_compile_options(-Wno-unused-lambda-capture) add_compile_options(-Wno-unused-private-field) add_compile_options(-Wno-unused-command-line-argument) + add_compile_options(-Wno-elaborated-enum-base) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") add_compile_options(-Wno-class-memaccess) endif() diff --git a/buildfiles/cmake/TCDarwinARM64.cmake b/buildfiles/cmake/TCDarwinARM64.cmake new file mode 100644 index 0000000000..d38b237910 --- /dev/null +++ b/buildfiles/cmake/TCDarwinARM64.cmake @@ -0,0 +1,2 @@ +set(CMAKE_SYSTEM_NAME Darwin) +set(CMAKE_SYSTEM_PROCESSOR arm64) diff --git a/rpcs3/main.cpp b/rpcs3/main.cpp index 3abec89104..65df4c6cdc 100644 --- a/rpcs3/main.cpp +++ b/rpcs3/main.cpp @@ -61,6 +61,7 @@ DYNAMIC_IMPORT("ntdll.dll", NtSetTimerResolution, NTSTATUS(ULONG DesiredResoluti #if defined(__APPLE__) #include +#if defined (__x86_64__) // sysinfo_darwin.mm namespace Darwin_Version { @@ -69,6 +70,7 @@ namespace Darwin_Version extern int getNSpatchVersion(); } #endif +#endif #include "Utilities/Config.h" #include "Utilities/Thread.h" @@ -538,7 +540,7 @@ int main(int argc, char** argv) } #endif -#ifdef __APPLE__ +#if defined(__APPLE__) && defined(__x86_64__) const int osx_ver_major = Darwin_Version::getNSmajorVersion(); const int osx_ver_minor = Darwin_Version::getNSminorVersion(); if ((osx_ver_major == 14 && osx_ver_minor < 3) && (utils::get_cpu_brand().rfind("VirtualApple", 0) == 0)) diff --git a/rpcs3/rpcs3.plist.in b/rpcs3/rpcs3.plist.in index 1d97a4b834..31df6d03a1 100644 --- a/rpcs3/rpcs3.plist.in +++ b/rpcs3/rpcs3.plist.in @@ -33,7 +33,7 @@ LSApplicationCategoryType public.app-category.games LSMinimumSystemVersion - 12.0 + 13.0 NSCameraUsageDescription The camera will be used for PlayStation Eye emulation NSMicrophoneUsageDescription diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index 47ab0d069a..ade4cf5c80 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -278,7 +278,7 @@ bool main_window::Init([[maybe_unused]] bool with_cli_boot) } }); -#if !defined(ARCH_ARM64) && (defined(_WIN32) || defined(__linux__) || defined(__APPLE__)) +#if (!defined(ARCH_ARM64) || defined(__APPLE__)) && (defined(_WIN32) || defined(__linux__) || defined(__APPLE__)) if (const auto update_value = m_gui_settings->GetValue(gui::m_check_upd_start).toString(); update_value != gui::update_off) { const bool in_background = with_cli_boot || update_value == gui::update_bkg; @@ -3163,7 +3163,7 @@ void main_window::CreateConnects() connect(ui->updateAct, &QAction::triggered, this, [this]() { -#if (!defined(_WIN32) && !defined(__linux__) && !defined(__APPLE__)) || defined(ARCH_ARM64) +#if (!defined(_WIN32) && !defined(__linux__) && !defined(__APPLE__)) || (defined(ARCH_ARM64) && !defined(__APPLE__)) QMessageBox::warning(this, tr("Auto-updater"), tr("The auto-updater isn't available for your OS currently.")); return; #endif