diff --git a/.ci/scripts/linux/docker.sh b/.ci/scripts/linux/docker.sh index 7bba01d62a..f253e398c4 100755 --- a/.ci/scripts/linux/docker.sh +++ b/.ci/scripts/linux/docker.sh @@ -17,8 +17,8 @@ cmake .. \ -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc \ -DCMAKE_INSTALL_PREFIX="/usr" \ -DDISPLAY_VERSION=$1 \ - -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON \ - -DENABLE_QT_TRANSLATION=ON \ + -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF \ + -DENABLE_QT_TRANSLATION=OFF \ -DUSE_DISCORD_PRESENCE=ON \ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \ -DYUZU_USE_BUNDLED_FFMPEG=ON \ @@ -49,9 +49,10 @@ DESTDIR="$PWD/AppDir" ninja install rm -vf AppDir/usr/bin/yuzu-cmd AppDir/usr/bin/yuzu-tester # Download tools needed to build an AppImage -wget -nc https://raw.githubusercontent.com/yuzu-emu/ext-linux-bin/main/appimage/deploy-linux.sh -wget -nc https://raw.githubusercontent.com/yuzu-emu/AppImageKit-checkrt/old/AppRun.sh -wget -nc https://github.com/yuzu-emu/ext-linux-bin/raw/main/appimage/exec-x86_64.so +wget -nc https://gitlab.com/suyu-emu/ext-linux-bin/-/raw/main/appimage/deploy-linux.sh +wget -nc https://gitlab.com/suyu-emu/ext-linux-bin/-/raw/main/appimage/exec-x86_64.so +wget -nc https://gitlab.com/suyu-emu/AppImageKit-checkrt/-/raw/old/AppRun.sh + # Set executable bit chmod 755 \ deploy-linux.sh \ diff --git a/.ci/scripts/linux/upload.sh b/.ci/scripts/linux/upload.sh index 90e1d78bc3..e99d6cafbc 100755 --- a/.ci/scripts/linux/upload.sh +++ b/.ci/scripts/linux/upload.sh @@ -27,7 +27,7 @@ fi # Build an AppImage cd build -wget -nc https://github.com/yuzu-emu/ext-linux-bin/raw/main/appimage/appimagetool-x86_64.AppImage +wget -nc https://gitlab.com/suyu-emu/ext-linux-bin/-/raw/main/appimage/appimagetool-x86_64.AppImage chmod 755 appimagetool-x86_64.AppImage # if FUSE is not available, then fallback to extract and run diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2a47a72a60..3aef932eee 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,45 +1,19 @@ -# This file is a template, and might need editing before it works on your project. -# This is a sample GitLab CI/CD configuration file that should run without any modifications. -# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts, -# it uses echo commands to simulate the pipeline execution. -# -# A pipeline is composed of independent jobs that run scripts, grouped into stages. -# Stages run in sequential order, but jobs within stages run in parallel. -# -# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages -# -# You can copy and paste this template into a new `.gitlab-ci.yml` file. -# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword. -# -# To contribute improvements to CI/CD templates, please follow the Development guide at: -# https://docs.gitlab.com/ee/development/cicd/templates.html -# This specific template is located at: -# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml - -stages: # List of stages for jobs, and their order of execution +stages: - build -build-ubuntu: # This job runs in the build stage, which runs first. +build-linux: stage: build - image: ubuntu:latest # Maybe replace with image with more required dependencies + image: debian:trixie # Maybe replace with image with more required dependencies + resource_group: linux-ci + variables: + RELEASE_NAME: mainline before_script: - - apt update --yes - - apt install --yes cmake gcc g++ git + - apt-get update --yes + - apt-get install --yes wget ccache cmake gcc g++ nasm git patchelf xz-utils ninja-build autoconf glslang-tools pkg-config catch2 libtool nlohmann-json3-dev qtbase5-dev qtbase5-private-dev qtmultimedia5-dev libqt5gui5 libva-dev libavcodec-dev libavfilter-dev libboost-dev libboost-context-dev libfmt-dev zlib1g-dev libzstd-dev libcurl4-openssl-dev liblz4-dev llvm-17-dev libedit-dev libssl-dev mesa-common-dev libzydis-dev libusb-dev libpulse-dev script: - - echo "Compiling the code..." - - git submodule update --init --recursive - - ls -la - # TODO: Add build instructions for linux - - echo "Compile complete." - -build-win: - stage: build - tags: - - shared-windows - - windows - - windows-1809 - script: - - echo "Compiling the code..." - - dir - # TODO: Add build instructions for windows - - echo "Compile complete." \ No newline at end of file + - git submodule update --init --depth 1 --recursive + - bash .ci/scripts/linux/docker.sh + - bash .ci/scripts/linux/upload.sh + artifacts: + paths: + - artifacts/* diff --git a/dist/org.suyu_emu.suyu.desktop b/dist/org.suyu_emu.suyu.desktop index 0f619d7e7e..c877c556ca 100644 --- a/dist/org.suyu_emu.suyu.desktop +++ b/dist/org.suyu_emu.suyu.desktop @@ -8,8 +8,8 @@ Name=suyu GenericName=Switch Emulator Comment=Nintendo Switch video game console emulator Icon=org.suyu_emu.suyu -TryExec=suyu -Exec=suyu %f +TryExec=yuzu +Exec=yuzu %f Categories=Game;Emulator;Qt; MimeType=application/x-nx-nro;application/x-nx-nso;application/x-nx-nsp;application/x-nx-xci; Keywords=Nintendo;Switch; diff --git a/src/yuzu/breakpad.cpp b/src/yuzu/breakpad.cpp index 394cf7a76e..0c27de117f 100644 --- a/src/yuzu/breakpad.cpp +++ b/src/yuzu/breakpad.cpp @@ -50,8 +50,8 @@ static void PruneDumpDirectory(const std::filesystem::path& dump_path) { } #if defined(__linux__) -[[noreturn]] bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, - bool succeeded) { +[[noreturn]] static bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, + bool succeeded) { // Prevent time- and space-consuming core dumps from being generated, as we have // already generated a minidump and a core file will not be useful anyway. _exit(1); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 4797adf895..63994424e5 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -54,14 +54,6 @@ #include "yuzu/multiplayer/state.h" #include "yuzu/util/controller_navigation.h" -// These are wrappers to avoid the calls to CreateFile because of the Windows -// defines. - -static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::VirtualDir& dir, - const std::string& path) { - return dir->CreateFile(path); -} - #include #include @@ -2374,68 +2366,6 @@ void GMainWindow::OnTransferableShaderCacheOpenFile(u64 program_id) { QDesktopServices::openUrl(QUrl::fromLocalFile(qt_shader_cache_path)); } -static bool RomFSRawCopy(size_t total_size, size_t& read_size, QProgressDialog& dialog, - const FileSys::VirtualDir& src, const FileSys::VirtualDir& dest, - bool full) { - if (src == nullptr || dest == nullptr || !src->IsReadable() || !dest->IsWritable()) - return false; - if (dialog.wasCanceled()) - return false; - - std::vector buffer(CopyBufferSize); - auto last_timestamp = std::chrono::steady_clock::now(); - - const auto QtRawCopy = [&](const FileSys::VirtualFile& src_file, - const FileSys::VirtualFile& dest_file) { - if (src_file == nullptr || dest_file == nullptr) { - return false; - } - if (!dest_file->Resize(src_file->GetSize())) { - return false; - } - - for (std::size_t i = 0; i < src_file->GetSize(); i += buffer.size()) { - if (dialog.wasCanceled()) { - dest_file->Resize(0); - return false; - } - - using namespace std::literals::chrono_literals; - const auto new_timestamp = std::chrono::steady_clock::now(); - - if ((new_timestamp - last_timestamp) > 33ms) { - last_timestamp = new_timestamp; - dialog.setValue( - static_cast(std::min(read_size, total_size) * 100 / total_size)); - QCoreApplication::processEvents(); - } - - const auto read = src_file->Read(buffer.data(), buffer.size(), i); - dest_file->Write(buffer.data(), read, i); - - read_size += read; - } - - return true; - }; - - if (full) { - for (const auto& file : src->GetFiles()) { - const auto out = VfsDirectoryCreateFileWrapper(dest, file->GetName()); - if (!QtRawCopy(file, out)) - return false; - } - } - - for (const auto& dir : src->GetSubdirectories()) { - const auto out = dest->CreateSubdirectory(dir->GetName()); - if (!RomFSRawCopy(total_size, read_size, dialog, dir, out, full)) - return false; - } - - return true; -} - QString GMainWindow::GetGameListErrorRemoving(InstalledEntryType type) const { switch (type) { case InstalledEntryType::Game: