From c9c5d140b84685a03dc59b930cebb802b4c14892 Mon Sep 17 00:00:00 2001
From: Danila Malyutin <d.maljutin@yandex.ru>
Date: Sat, 13 May 2023 23:58:17 +0400
Subject: [PATCH 1/2] Use TARGET_FILE_DIR generator expression

Use $<TARGET_FILE_DIR:...> where appropriate instead of trying to guess where the binary will end up.
---
 CMakeModules/CopyYuzuFFmpegDeps.cmake | 2 +-
 CMakeModules/CopyYuzuQt5Deps.cmake    | 2 +-
 CMakeModules/CopyYuzuSDLDeps.cmake    | 2 +-
 src/yuzu/CMakeLists.txt               | 6 +-----
 4 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/CMakeModules/CopyYuzuFFmpegDeps.cmake b/CMakeModules/CopyYuzuFFmpegDeps.cmake
index c6231737e3..7aaa073ee6 100644
--- a/CMakeModules/CopyYuzuFFmpegDeps.cmake
+++ b/CMakeModules/CopyYuzuFFmpegDeps.cmake
@@ -3,7 +3,7 @@
 
 function(copy_yuzu_FFmpeg_deps target_dir)
     include(WindowsCopyFiles)
-    set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
+    set(DLL_DEST "$<TARGET_FILE_DIR:${target_dir}>/")
     file(READ "${FFmpeg_PATH}/requirements.txt" FFmpeg_REQUIRED_DLLS)
     string(STRIP "${FFmpeg_REQUIRED_DLLS}" FFmpeg_REQUIRED_DLLS)
     windows_copy_files(${target_dir} ${FFmpeg_DLL_DIR} ${DLL_DEST} ${FFmpeg_REQUIRED_DLLS})
diff --git a/CMakeModules/CopyYuzuQt5Deps.cmake b/CMakeModules/CopyYuzuQt5Deps.cmake
index ab56de4440..b3a65c3476 100644
--- a/CMakeModules/CopyYuzuQt5Deps.cmake
+++ b/CMakeModules/CopyYuzuQt5Deps.cmake
@@ -4,7 +4,7 @@
 function(copy_yuzu_Qt5_deps target_dir)
     include(WindowsCopyFiles)
     if (MSVC)
-        set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
+        set(DLL_DEST "$<TARGET_FILE_DIR:${target_dir}>/")
         set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin")
     else()
         set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/")
diff --git a/CMakeModules/CopyYuzuSDLDeps.cmake b/CMakeModules/CopyYuzuSDLDeps.cmake
index 7ffdd8a1d5..464eed5e9c 100644
--- a/CMakeModules/CopyYuzuSDLDeps.cmake
+++ b/CMakeModules/CopyYuzuSDLDeps.cmake
@@ -3,6 +3,6 @@
 
 function(copy_yuzu_SDL_deps target_dir)
     include(WindowsCopyFiles)
-    set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
+    set(DLL_DEST "$<TARGET_FILE_DIR:${target_dir}>/")
     windows_copy_files(${target_dir} ${SDL2_DLL_DIR} ${DLL_DEST} SDL2.dll)
 endfunction(copy_yuzu_SDL_deps)
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt
index 2d7b9ab65f..84d9ca796b 100644
--- a/src/yuzu/CMakeLists.txt
+++ b/src/yuzu/CMakeLists.txt
@@ -378,11 +378,7 @@ if(UNIX AND NOT APPLE)
 endif()
 
 if (WIN32 AND QT_VERSION VERSION_GREATER_EQUAL 6)
-    if (MSVC AND NOT ${CMAKE_GENERATOR} STREQUAL "Ninja")
-        set(YUZU_EXE_DIR "${CMAKE_BINARY_DIR}/bin/$<CONFIG>")
-    else()
-        set(YUZU_EXE_DIR "${CMAKE_BINARY_DIR}/bin")
-    endif()
+    set(YUZU_EXE_DIR "$<TARGET_FILE_DIR:yuzu>")
     add_custom_command(TARGET yuzu POST_BUILD COMMAND ${WINDEPLOYQT_EXECUTABLE} "${YUZU_EXE_DIR}/yuzu.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()
 

From 7325fb054dda17fb56f4485806af3fa06a16c9a5 Mon Sep 17 00:00:00 2001
From: Danila Malyutin <danilaml@users.noreply.github.com>
Date: Sun, 14 May 2023 01:23:07 +0300
Subject: [PATCH 2/2] Fixup upload.ps1 for GHA

No extra folders are created with ninja generator after previous CMake fixes.
---
 .ci/scripts/windows/upload.ps1 | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/.ci/scripts/windows/upload.ps1 b/.ci/scripts/windows/upload.ps1
index 21abcd752e..492763420e 100644
--- a/.ci/scripts/windows/upload.ps1
+++ b/.ci/scripts/windows/upload.ps1
@@ -26,7 +26,11 @@ $env:BUILD_ZIP = $MSVC_BUILD_ZIP
 $env:BUILD_SYMBOLS = $MSVC_BUILD_PDB
 $env:BUILD_UPDATE = $MSVC_SEVENZIP
 
-$BUILD_DIR = ".\build\bin\Release"
+if (Test-Path -Path ".\build\bin\Release") {
+    $BUILD_DIR = ".\build\bin\Release"
+} else {
+    $BUILD_DIR = ".\build\bin\"
+}
 
 # Cleanup unneeded data in submodules
 git submodule foreach git clean -fxd