diff --git a/.ci/linux/build.sh b/.ci/linux/build.sh
index aa15333ac2..093b30a7ea 100755
--- a/.ci/linux/build.sh
+++ b/.ci/linux/build.sh
@@ -36,15 +36,16 @@ case "$1" in
ARCH=armv9
ARCH_FLAGS="-march=armv9-a -mtune=generic -w"
;;
+ *)
+ echo "Invalid target $1 specified, must be one of amd64, steamdeck, allyx, rog-ally, legacy, aarch64, armv9"
+ exit 1
+ ;;
esac
export ARCH_FLAGS="$ARCH_FLAGS -O3"
-NPROC="$2"
if [ -z "$NPROC" ]; then
NPROC="$(nproc)"
-else
- shift
fi
if [ "$1" != "" ]; then shift; fi
@@ -72,11 +73,15 @@ else
MULTIMEDIA=ON
fi
+if [ -z "$BUILD_TYPE" ]; then
+ export BUILD_TYPE="Release"
+fi
+
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
mkdir -p build && cd build
cmake .. -G Ninja \
- -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
-DENABLE_QT_TRANSLATION=ON \
-DUSE_DISCORD_PRESENCE=ON \
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS" \
diff --git a/.ci/patch/0002-quazip-fetchcontent.patch b/.ci/patch/0002-quazip-fetchcontent.patch
new file mode 100644
index 0000000000..3554b7dbb6
--- /dev/null
+++ b/.ci/patch/0002-quazip-fetchcontent.patch
@@ -0,0 +1,13 @@
+diff --git a/cmake/clone-repo.cmake b/cmake/clone-repo.cmake
+index 2ffb4b2..77974dc 100644
+--- a/cmake/clone-repo.cmake
++++ b/cmake/clone-repo.cmake
+@@ -26,7 +26,7 @@ macro(clone_repo name url)
+ FetchContent_GetProperties(${name} POPULATED ${name_lower}_POPULATED)
+
+ if(NOT ${name_lower}_POPULATED)
+- FetchContent_Populate(${name})
++ FetchContent_MakeAvailable(${name})
+ endif()
+
+ set(${name_upper}_SOURCE_DIR ${${name_lower}_SOURCE_DIR})
diff --git a/.ci/windows/build.sh b/.ci/windows/build.sh
index 667fd316fa..d0c697655a 100644
--- a/.ci/windows/build.sh
+++ b/.ci/windows/build.sh
@@ -17,6 +17,10 @@ else
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_BUNDLED_QT=OFF)
fi
+if [ -z "$BUILD_TYPE" ]; then
+ export BUILD_TYPE="Release"
+fi
+
if [ "$WINDEPLOYQT" == "" ]; then
echo "You must supply the WINDEPLOYQT environment variable."
exit 1
@@ -38,7 +42,7 @@ export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
mkdir -p build && cd build
cmake .. -G Ninja \
- -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
-DENABLE_QT_TRANSLATION=ON \
-DUSE_DISCORD_PRESENCE=ON \
-DYUZU_USE_BUNDLED_SDL2=OFF \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1b8f60089d..bc6e4d4355 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,9 +33,9 @@ endif()
option(ENABLE_SDL2 "Enable the SDL2 frontend" ON)
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON "ENABLE_SDL2;MSVC" OFF)
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
- CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "ENABLE_SDL2;NOT MSVC" OFF)
+ CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "ENABLE_SDL2" OFF)
else()
- CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF)
+ CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT YUZU_USE_BUNDLED_SDL2" OFF)
endif()
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
@@ -60,7 +60,7 @@ endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" OFF)
else()
- option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
+ option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
@@ -462,7 +462,7 @@ if (ENABLE_QT)
if (NOT Qt6_DIR)
set(Qt6_DIR "" CACHE PATH "Additional path to search for Qt6 libraries like C:/Qt/6.8.3/msvc2022_64/lib/cmake/Qt6")
endif()
- list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}")
+ list(PREPEND CMAKE_PREFIX_PATH "${Qt6_DIR}")
endif()
# QT6 Multimedia pulls in unneeded audio systems (ALSA, Pulseaudio) for FreeBSD
diff --git a/externals/ffmpeg/CMakeLists.txt b/externals/ffmpeg/CMakeLists.txt
index 9eb71418a0..46380f217d 100644
--- a/externals/ffmpeg/CMakeLists.txt
+++ b/externals/ffmpeg/CMakeLists.txt
@@ -80,148 +80,148 @@ if (NOT WIN32 AND NOT ANDROID)
${LIBVA-X11_INCLUDE_DIRS}
${LIBVA_INCLUDE_DIRS}
)
- message(STATUS "VA-API found")
- else()
- set(FFmpeg_HWACCEL_FLAGS --disable-vaapi)
- endif()
+ message(STATUS "VA-API found")
+else()
+ set(FFmpeg_HWACCEL_FLAGS --disable-vaapi)
+endif()
- if (FFNVCODEC_FOUND)
- list(APPEND FFmpeg_HWACCEL_FLAGS
- --enable-cuvid
- --enable-ffnvcodec
- --enable-nvdec
- --enable-hwaccel=h264_nvdec
- --enable-hwaccel=vp8_nvdec
- --enable-hwaccel=vp9_nvdec
- )
- list(APPEND FFmpeg_HWACCEL_LIBRARIES ${FFNVCODEC_LIBRARIES})
- list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${FFNVCODEC_INCLUDE_DIRS})
- list(APPEND FFmpeg_HWACCEL_LDFLAGS ${FFNVCODEC_LDFLAGS})
- message(STATUS "ffnvcodec libraries version ${FFNVCODEC_VERSION} found")
- # ffnvenc could load CUDA libraries at the runtime using dlopen/dlsym or LoadLibrary/GetProcAddress
- # here we handle the hard-linking senario where CUDA is linked during compilation
- if (CUDA_FOUND)
- # This line causes build error if CUDA_INCLUDE_DIRS is anything but a single non-empty value
- #list(APPEND FFmpeg_HWACCEL_FLAGS --extra-cflags=-I${CUDA_INCLUDE_DIRS})
- list(APPEND FFmpeg_HWACCEL_LIBRARIES ${CUDA_LIBRARIES})
- list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS})
- list(APPEND FFmpeg_HWACCEL_LDFLAGS ${CUDA_LDFLAGS})
- message(STATUS "CUDA libraries found, hard-linking will be performed")
- endif(CUDA_FOUND)
- endif()
-
- if (VDPAU_FOUND)
- list(APPEND FFmpeg_HWACCEL_FLAGS
- --enable-vdpau
- --enable-hwaccel=h264_vdpau
- --enable-hwaccel=vp9_vdpau
- )
- list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VDPAU_LIBRARIES})
- list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VDPAU_INCLUDE_DIRS})
- list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VDPAU_LDFLAGS})
- message(STATUS "vdpau libraries version ${VDPAU_VERSION} found")
- else()
- list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau)
- endif()
-
- find_program(BASH_PROGRAM bash REQUIRED)
-
- set(FFmpeg_CROSS_COMPILE_FLAGS "")
- if (ANDROID)
- string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME)
- set(TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}")
- set(SYSROOT "${TOOLCHAIN}/sysroot")
- set(FFmpeg_CPU "armv8-a")
- list(APPEND FFmpeg_CROSS_COMPILE_FLAGS
- --arch=arm64
- #--cpu=${FFmpeg_CPU}
- --enable-cross-compile
- --cross-prefix=${TOOLCHAIN}/bin/aarch64-linux-android-
- --sysroot=${SYSROOT}
- --target-os=android
- --extra-ldflags="--ld-path=${TOOLCHAIN}/bin/ld.lld"
- --extra-ldflags="-nostdlib"
- )
- endif()
-
- # `configure` parameters builds only exactly what yuzu needs from FFmpeg
- # `--disable-vdpau` is needed to avoid linking issues
- set(FFmpeg_CC ${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER})
- set(FFmpeg_CXX ${CMAKE_CXX_COMPILER_LAUNCHER} ${CMAKE_CXX_COMPILER})
- add_custom_command(
- OUTPUT
- ${FFmpeg_MAKEFILE}
- COMMAND
- ${BASH_PROGRAM} ${FFmpeg_PREFIX}/configure
- --disable-avdevice
- --disable-avformat
- --disable-doc
- --disable-everything
- --disable-ffmpeg
- --disable-ffprobe
- --disable-network
- --disable-postproc
- --disable-swresample
- --enable-decoder=h264
- --enable-decoder=vp8
- --enable-decoder=vp9
- --enable-filter=yadif,scale
- --cc="${FFmpeg_CC}"
- --cxx="${FFmpeg_CXX}"
- ${FFmpeg_HWACCEL_FLAGS}
- ${FFmpeg_CROSS_COMPILE_FLAGS}
- WORKING_DIRECTORY
- ${FFmpeg_BUILD_DIR}
+if (FFNVCODEC_FOUND)
+ list(APPEND FFmpeg_HWACCEL_FLAGS
+ --enable-cuvid
+ --enable-ffnvcodec
+ --enable-nvdec
+ --enable-hwaccel=h264_nvdec
+ --enable-hwaccel=vp8_nvdec
+ --enable-hwaccel=vp9_nvdec
)
- unset(FFmpeg_CC)
- unset(FFmpeg_CXX)
- unset(FFmpeg_HWACCEL_FLAGS)
- unset(FFmpeg_CROSS_COMPILE_FLAGS)
+list(APPEND FFmpeg_HWACCEL_LIBRARIES ${FFNVCODEC_LIBRARIES})
+list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${FFNVCODEC_INCLUDE_DIRS})
+list(APPEND FFmpeg_HWACCEL_LDFLAGS ${FFNVCODEC_LDFLAGS})
+message(STATUS "ffnvcodec libraries version ${FFNVCODEC_VERSION} found")
+# ffnvenc could load CUDA libraries at the runtime using dlopen/dlsym or LoadLibrary/GetProcAddress
+# here we handle the hard-linking senario where CUDA is linked during compilation
+if (CUDA_FOUND)
+ # This line causes build error if CUDA_INCLUDE_DIRS is anything but a single non-empty value
+ #list(APPEND FFmpeg_HWACCEL_FLAGS --extra-cflags=-I${CUDA_INCLUDE_DIRS})
+ list(APPEND FFmpeg_HWACCEL_LIBRARIES ${CUDA_LIBRARIES})
+ list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS})
+ list(APPEND FFmpeg_HWACCEL_LDFLAGS ${CUDA_LDFLAGS})
+ message(STATUS "CUDA libraries found, hard-linking will be performed")
+endif(CUDA_FOUND)
+endif()
- # Workaround for Ubuntu 18.04's older version of make not being able to call make as a child
- # with context of the jobserver. Also helps ninja users.
- execute_process(
- COMMAND
- nproc
- OUTPUT_VARIABLE
- SYSTEM_THREADS)
-
- set(FFmpeg_BUILD_LIBRARIES ${FFmpeg_LIBRARIES})
- add_custom_command(
- OUTPUT
- ${FFmpeg_BUILD_LIBRARIES}
- COMMAND
- make -j${SYSTEM_THREADS}
- WORKING_DIRECTORY
- ${FFmpeg_BUILD_DIR}
+if (VDPAU_FOUND)
+ list(APPEND FFmpeg_HWACCEL_FLAGS
+ --enable-vdpau
+ --enable-hwaccel=h264_vdpau
+ --enable-hwaccel=vp9_vdpau
)
+list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VDPAU_LIBRARIES})
+list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VDPAU_INCLUDE_DIRS})
+list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VDPAU_LDFLAGS})
+message(STATUS "vdpau libraries version ${VDPAU_VERSION} found")
+else()
+ list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau)
+endif()
- set(FFmpeg_INCLUDE_DIR
- "${FFmpeg_PREFIX};${FFmpeg_BUILD_DIR};${FFmpeg_HWACCEL_INCLUDE_DIRS}"
- CACHE PATH "Path to FFmpeg headers" FORCE)
+find_program(BASH_PROGRAM bash REQUIRED)
- set(FFmpeg_LDFLAGS
- "${FFmpeg_HWACCEL_LDFLAGS}"
- CACHE STRING "FFmpeg linker flags" FORCE)
+set(FFmpeg_CROSS_COMPILE_FLAGS "")
+if (ANDROID)
+ string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME)
+ set(TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}")
+ set(SYSROOT "${TOOLCHAIN}/sysroot")
+ set(FFmpeg_CPU "armv8-a")
+ list(APPEND FFmpeg_CROSS_COMPILE_FLAGS
+ --arch=arm64
+ #--cpu=${FFmpeg_CPU}
+ --enable-cross-compile
+ --cross-prefix=${TOOLCHAIN}/bin/aarch64-linux-android-
+ --sysroot=${SYSROOT}
+ --target-os=android
+ --extra-ldflags="--ld-path=${TOOLCHAIN}/bin/ld.lld"
+ --extra-ldflags="-nostdlib"
+ )
+endif()
- # ALL makes this custom target build every time
- # but it won't actually build if the DEPENDS parameter is up to date
- add_custom_target(ffmpeg-configure ALL DEPENDS ${FFmpeg_MAKEFILE})
- add_custom_target(ffmpeg-build ALL DEPENDS ${FFmpeg_BUILD_LIBRARIES} ffmpeg-configure)
- link_libraries(${FFmpeg_LIBVA_LIBRARIES})
- set(FFmpeg_LIBRARIES ${FFmpeg_BUILD_LIBRARIES} ${FFmpeg_HWACCEL_LIBRARIES}
- CACHE PATH "Paths to FFmpeg libraries" FORCE)
- unset(FFmpeg_BUILD_LIBRARIES)
- unset(FFmpeg_HWACCEL_FLAGS)
- unset(FFmpeg_HWACCEL_INCLUDE_DIRS)
- unset(FFmpeg_HWACCEL_LDFLAGS)
- unset(FFmpeg_HWACCEL_LIBRARIES)
+# `configure` parameters builds only exactly what yuzu needs from FFmpeg
+# `--disable-vdpau` is needed to avoid linking issues
+set(FFmpeg_CC ${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER})
+set(FFmpeg_CXX ${CMAKE_CXX_COMPILER_LAUNCHER} ${CMAKE_CXX_COMPILER})
+add_custom_command(
+ OUTPUT
+ ${FFmpeg_MAKEFILE}
+ COMMAND
+ ${BASH_PROGRAM} ${FFmpeg_PREFIX}/configure
+ --disable-avdevice
+ --disable-avformat
+ --disable-doc
+ --disable-everything
+ --disable-ffmpeg
+ --disable-ffprobe
+ --disable-network
+ --disable-postproc
+ --disable-swresample
+ --enable-decoder=h264
+ --enable-decoder=vp8
+ --enable-decoder=vp9
+ --enable-filter=yadif,scale
+ --cc="${FFmpeg_CC}"
+ --cxx="${FFmpeg_CXX}"
+ ${FFmpeg_HWACCEL_FLAGS}
+ ${FFmpeg_CROSS_COMPILE_FLAGS}
+ WORKING_DIRECTORY
+ ${FFmpeg_BUILD_DIR}
+)
+unset(FFmpeg_CC)
+unset(FFmpeg_CXX)
+unset(FFmpeg_HWACCEL_FLAGS)
+unset(FFmpeg_CROSS_COMPILE_FLAGS)
- if (FFmpeg_FOUND)
- message(STATUS "Found FFmpeg version ${FFmpeg_VERSION}")
- else()
- message(FATAL_ERROR "FFmpeg not found")
- endif()
+# Workaround for Ubuntu 18.04's older version of make not being able to call make as a child
+# with context of the jobserver. Also helps ninja users.
+execute_process(
+ COMMAND
+ nproc
+ OUTPUT_VARIABLE
+ SYSTEM_THREADS)
+
+set(FFmpeg_BUILD_LIBRARIES ${FFmpeg_LIBRARIES})
+add_custom_command(
+ OUTPUT
+ ${FFmpeg_BUILD_LIBRARIES}
+ COMMAND
+ make -j${SYSTEM_THREADS}
+ WORKING_DIRECTORY
+ ${FFmpeg_BUILD_DIR}
+)
+
+set(FFmpeg_INCLUDE_DIR
+ "${FFmpeg_PREFIX};${FFmpeg_BUILD_DIR};${FFmpeg_HWACCEL_INCLUDE_DIRS}"
+ CACHE PATH "Path to FFmpeg headers" FORCE)
+
+set(FFmpeg_LDFLAGS
+ "${FFmpeg_HWACCEL_LDFLAGS}"
+ CACHE STRING "FFmpeg linker flags" FORCE)
+
+# ALL makes this custom target build every time
+# but it won't actually build if the DEPENDS parameter is up to date
+add_custom_target(ffmpeg-configure ALL DEPENDS ${FFmpeg_MAKEFILE})
+add_custom_target(ffmpeg-build ALL DEPENDS ${FFmpeg_BUILD_LIBRARIES} ffmpeg-configure)
+link_libraries(${FFmpeg_LIBVA_LIBRARIES})
+set(FFmpeg_LIBRARIES ${FFmpeg_BUILD_LIBRARIES} ${FFmpeg_HWACCEL_LIBRARIES}
+ CACHE PATH "Paths to FFmpeg libraries" FORCE)
+unset(FFmpeg_BUILD_LIBRARIES)
+unset(FFmpeg_HWACCEL_FLAGS)
+unset(FFmpeg_HWACCEL_INCLUDE_DIRS)
+unset(FFmpeg_HWACCEL_LDFLAGS)
+unset(FFmpeg_HWACCEL_LIBRARIES)
+
+if (FFmpeg_FOUND)
+ message(STATUS "Found FFmpeg version ${FFmpeg_VERSION}")
+else()
+ message(FATAL_ERROR "FFmpeg not found")
+endif()
elseif(ANDROID)
# Use yuzu FFmpeg binaries
if (ARCHITECTURE_arm64)
@@ -256,18 +256,21 @@ elseif(ANDROID)
elseif(WIN32)
# Use yuzu FFmpeg binaries
set(FFmpeg_EXT_NAME "ffmpeg-7.1.1")
- set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}")
- download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "")
+ if (ARCHITECTURE_x86_64)
+ download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "")
+ set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}")
+ endif()
+
set(FFmpeg_FOUND YES)
set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE)
set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg library directory" FORCE)
set(FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE)
set(FFmpeg_LIBRARIES
- ${FFmpeg_LIBRARY_DIR}/swscale.lib
- ${FFmpeg_LIBRARY_DIR}/avcodec.lib
- ${FFmpeg_LIBRARY_DIR}/avfilter.lib
- ${FFmpeg_LIBRARY_DIR}/avutil.lib
- CACHE PATH "Paths to FFmpeg libraries" FORCE)
+ ${FFmpeg_LIBRARY_DIR}/swscale.lib
+ ${FFmpeg_LIBRARY_DIR}/avcodec.lib
+ ${FFmpeg_LIBRARY_DIR}/avfilter.lib
+ ${FFmpeg_LIBRARY_DIR}/avutil.lib
+ CACHE PATH "Paths to FFmpeg libraries" FORCE)
# exported variables
set(FFmpeg_PATH "${FFmpeg_PATH}" PARENT_SCOPE)
set(FFmpeg_LDFLAGS "${FFmpeg_LDFLAGS}" PARENT_SCOPE)
diff --git a/externals/sirit/CMakeLists.txt b/externals/sirit/CMakeLists.txt
index d98a8b5ba5..782ce8f660 100644
--- a/externals/sirit/CMakeLists.txt
+++ b/externals/sirit/CMakeLists.txt
@@ -1,6 +1,6 @@
# This file has been adapted from dynarmic
-cmake_minimum_required(VERSION 3.8)
+cmake_minimum_required(VERSION 3.12)
project(sirit CXX)
# Determine if we're built as a subproject (using add_subdirectory)
diff --git a/src/android/app/src/main/res/drawable/ic_icon_bg.png b/src/android/app/src/main/res/drawable/ic_icon_bg.png
new file mode 100644
index 0000000000..30b29a32d8
Binary files /dev/null and b/src/android/app/src/main/res/drawable/ic_icon_bg.png differ
diff --git a/src/android/app/src/main/res/drawable/ic_icon_bg.xml b/src/android/app/src/main/res/drawable/ic_icon_bg.xml
deleted file mode 100644
index df62dde92e..0000000000
--- a/src/android/app/src/main/res/drawable/ic_icon_bg.xml
+++ /dev/null
@@ -1,751 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/android/app/src/main/res/drawable/ic_icon_bg_orig.png b/src/android/app/src/main/res/drawable/ic_icon_bg_orig.png
new file mode 100644
index 0000000000..9ebc6ce17c
Binary files /dev/null and b/src/android/app/src/main/res/drawable/ic_icon_bg_orig.png differ
diff --git a/src/core/arm/dynarmic/dynarmic_cp15.cpp b/src/core/arm/dynarmic/dynarmic_cp15.cpp
index c663adda19..0d5e5912ae 100644
--- a/src/core/arm/dynarmic/dynarmic_cp15.cpp
+++ b/src/core/arm/dynarmic/dynarmic_cp15.cpp
@@ -58,6 +58,8 @@ CallbackOrAccessOneWord DynarmicCP15::CompileSendOneWord(bool two, unsigned opc1
_mm_lfence();
#elif defined(ARCHITECTURE_x86_64)
asm volatile("mfence\n\tlfence\n\t" : : : "memory");
+#elif defined(_MSC_VER) && defined(ARCHITECTURE_arm64)
+ _Memory_barrier();
#elif defined(ARCHITECTURE_arm64)
asm volatile("dsb sy\n\t" : : : "memory");
#else
@@ -75,6 +77,8 @@ CallbackOrAccessOneWord DynarmicCP15::CompileSendOneWord(bool two, unsigned opc1
_mm_mfence();
#elif defined(ARCHITECTURE_x86_64)
asm volatile("mfence\n\t" : : : "memory");
+#elif defined(_MSC_VER) && defined(ARCHITECTURE_arm64)
+ _Memory_barrier();
#elif defined(ARCHITECTURE_arm64)
asm volatile("dmb sy\n\t" : : : "memory");
#else
diff --git a/src/video_core/host1x/ffmpeg/ffmpeg.cpp b/src/video_core/host1x/ffmpeg/ffmpeg.cpp
index 9b718f2591..d6eff2bdd7 100644
--- a/src/video_core/host1x/ffmpeg/ffmpeg.cpp
+++ b/src/video_core/host1x/ffmpeg/ffmpeg.cpp
@@ -26,13 +26,14 @@ namespace {
constexpr AVPixelFormat PreferredGpuFormat = AV_PIX_FMT_NV12;
constexpr AVPixelFormat PreferredCpuFormat = AV_PIX_FMT_YUV420P;
constexpr std::array PreferredGpuDecoders = {
- AV_HWDEVICE_TYPE_CUDA,
#ifdef _WIN32
+ AV_HWDEVICE_TYPE_CUDA,
AV_HWDEVICE_TYPE_D3D11VA,
AV_HWDEVICE_TYPE_DXVA2,
+#elif defined(__FreeBSD__)
+ AV_HWDEVICE_TYPE_VDPAU,
#elif defined(__unix__)
AV_HWDEVICE_TYPE_VAAPI,
- AV_HWDEVICE_TYPE_VDPAU,
#endif
AV_HWDEVICE_TYPE_VULKAN,
};
@@ -215,18 +216,16 @@ bool DecoderContext::OpenContext(const Decoder& decoder) {
bool DecoderContext::SendPacket(const Packet& packet) {
m_temp_frame = std::make_shared();
-
- if (const int ret = avcodec_send_packet(m_codec_context, packet.GetPacket()); ret < 0) {
+ if (const int ret = avcodec_send_packet(m_codec_context, packet.GetPacket()); ret < 0 && ret != AVERROR_EOF) {
LOG_ERROR(HW_GPU, "avcodec_send_packet error: {}", AVError(ret));
return false;
}
-
return true;
}
std::shared_ptr DecoderContext::ReceiveFrame() {
auto ReceiveImpl = [&](AVFrame* frame) -> bool {
- if (const int ret = avcodec_receive_frame(m_codec_context, frame); ret < 0) {
+ if (const int ret = avcodec_receive_frame(m_codec_context, frame); ret < 0 && ret != AVERROR_EOF) {
LOG_ERROR(HW_GPU, "avcodec_receive_frame error: {}", AVError(ret));
return false;
}
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt
index 88f25aa42e..05a24e7c04 100644
--- a/src/yuzu/CMakeLists.txt
+++ b/src/yuzu/CMakeLists.txt
@@ -458,6 +458,7 @@ endif()
if (WIN32 AND NOT YUZU_USE_BUNDLED_QT AND QT_VERSION VERSION_GREATER_EQUAL 6)
set(YUZU_EXE_DIR "$")
+ message(STATUS "WINDEPLOYQT EXECUTABLE: ${WINDEPLOYQT_EXECUTABLE}")
add_custom_command(TARGET yuzu POST_BUILD COMMAND ${WINDEPLOYQT_EXECUTABLE} "${YUZU_EXE_DIR}/eden.exe" --dir "${YUZU_EXE_DIR}" --libdir "${YUZU_EXE_DIR}" --plugindir "${YUZU_EXE_DIR}/plugins" --no-compiler-runtime --no-opengl-sw --no-system-d3d-compiler --no-translations --verbose 0)
endif()
@@ -473,9 +474,11 @@ endif()
if (MSVC)
include(CopyYuzuSDLDeps)
- include(CopyYuzuFFmpegDeps)
copy_yuzu_SDL_deps(yuzu)
- copy_yuzu_FFmpeg_deps(yuzu)
+ if (ARCHITECTURE_x86_64)
+ include(CopyYuzuFFmpegDeps)
+ copy_yuzu_FFmpeg_deps(yuzu)
+ endif()
endif()
if (NOT APPLE AND ENABLE_OPENGL)
@@ -495,25 +498,7 @@ if (YUZU_ROOM)
endif()
# Extra deps
-set(BUILD_SHARED_LIBS OFF)
-
-include(CPM)
-set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
-
-set(QUAZIP_QT_MAJOR_VERSION 6)
-CPMAddPackage(
- URI "gh:stachenov/quazip@1.5"
- PATCHES
- ${CMAKE_SOURCE_DIR}/.ci/patch/0001-quazip-strict.patch
-)
-
-if (NOT MSVC)
- target_compile_options(QuaZip PRIVATE
- -Wno-error=shadow
- -Wno-error=missing-declarations
- )
-endif()
-
+add_subdirectory(externals)
target_link_libraries(yuzu PRIVATE QuaZip::QuaZip)
create_target_directory_groups(yuzu)
diff --git a/src/yuzu/externals/CMakeLists.txt b/src/yuzu/externals/CMakeLists.txt
new file mode 100644
index 0000000000..ac17308e09
--- /dev/null
+++ b/src/yuzu/externals/CMakeLists.txt
@@ -0,0 +1,31 @@
+# Disable tests in all externals supporting the standard option name
+set(BUILD_TESTING OFF)
+
+# Build only static externals
+set(BUILD_SHARED_LIBS OFF)
+
+# QuaZip
+set(QUAZIP_QT_MAJOR_VERSION 6)
+set(QUAZIP_BZIP2 OFF)
+
+include(CPM)
+set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
+set(CPM_USE_LOCAL_PACKAGES ON)
+
+CPMAddPackage(
+ NAME QuaZip-Qt6
+ VERSION 1.3
+ GIT_REPOSITORY "https://github.com/stachenov/quazip.git"
+ GIT_TAG v1.5
+ PATCHES
+ ${CMAKE_SOURCE_DIR}/.ci/patch/0001-quazip-strict.patch
+ ${CMAKE_SOURCE_DIR}/.ci/patch/0002-quazip-fetchcontent.patch
+)
+
+if (NOT MSVC AND NOT "QuaZip-Qt6" IN_LIST CPM_PACKAGES)
+ message(STATUS "QUAZIP DIR: ${CPM_PACKAGES}")
+ target_compile_options(QuaZip PRIVATE
+ -Wno-error=shadow
+ -Wno-error=missing-declarations
+ )
+endif()
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 634c11bdce..6a575cfa87 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -4443,7 +4443,7 @@ void GMainWindow::OnInstallFirmwareFromZIP()
QMessageBox::warning(this, tr("Firmware cleanup failed"),
tr("Failed to clean up extracted firmware cache.\n"
"Check write permissions in the system temp directory and try again.\nOS reported error: %1")
- .arg(ec.message()));
+ .arg(QString::fromStdString(ec.message())));
}
return;