diff --git a/.ci/scripts/clang/docker.sh b/.ci/scripts/clang/docker.sh index 885d74e97f..792ef4aa80 100755 --- a/.ci/scripts/clang/docker.sh +++ b/.ci/scripts/clang/docker.sh @@ -1,16 +1,27 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2021 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + # Exit on error, rather than continuing with the rest of the script. set -e -cd /yuzu - ccache -s mkdir build || true && cd build -cmake .. -DDISPLAY_VERSION=$1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/clang -DCMAKE_CXX_COMPILER=/usr/lib/ccache/clang++ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON -DCMAKE_INSTALL_PREFIX="/usr" +cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_COMPILER=/usr/lib/ccache/clang++ \ + -DCMAKE_C_COMPILER=/usr/lib/ccache/clang \ + -DCMAKE_INSTALL_PREFIX="/usr" \ + -DDISPLAY_VERSION=$1 \ + -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON \ + -DENABLE_QT_TRANSLATION=ON \ + -DUSE_DISCORD_PRESENCE=ON \ + -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \ + -GNinja -make -j$(nproc) +ninja ccache -s diff --git a/.ci/scripts/clang/exec.sh b/.ci/scripts/clang/exec.sh index e56cd4325a..664fce5f84 100644 --- a/.ci/scripts/clang/exec.sh +++ b/.ci/scripts/clang/exec.sh @@ -1,8 +1,11 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2021 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + mkdir -p "ccache" || true chmod a+x ./.ci/scripts/clang/docker.sh # the UID for the container yuzu user is 1027 sudo chown -R 1027 ./ -docker run -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v $(pwd):/yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/clang/docker.sh $1 +docker run -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v "$(pwd):/yuzu" -w /yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/clang/docker.sh "$1" sudo chown -R $UID ./ diff --git a/.ci/scripts/clang/upload.sh b/.ci/scripts/clang/upload.sh old mode 100644 new mode 100755 index fe4e6b2acd..0b4b3e330b --- a/.ci/scripts/clang/upload.sh +++ b/.ci/scripts/clang/upload.sh @@ -1,5 +1,8 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2021 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + . .ci/scripts/common/pre-upload.sh REV_NAME="yuzu-linux-${GITDATE}-${GITREV}" diff --git a/.ci/scripts/common/post-upload.sh b/.ci/scripts/common/post-upload.sh index 387431564a..0930b7a7bd 100644 --- a/.ci/scripts/common/post-upload.sh +++ b/.ci/scripts/common/post-upload.sh @@ -1,11 +1,18 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + # Copy documentation -cp license.txt "$DIR_NAME" +cp LICENSE.txt "$DIR_NAME" cp README.md "$DIR_NAME" -tar -cJvf "${REV_NAME}-source.tar.xz" src externals CMakeLists.txt README.md license.txt -cp "${REV_NAME}-source.tar.xz" "$DIR_NAME" +if [[ -z "${NO_SOURCE_PACK}" ]]; then + git clone --depth 1 file://$(readlink -e .) ${REV_NAME}-source + tar -cJvf "${REV_NAME}-source.tar.xz" ${REV_NAME}-source + cp -v "${REV_NAME}-source.tar.xz" "$DIR_NAME" + cp -v "${REV_NAME}-source.tar.xz" "${ARTIFACTS_DIR}/" +fi tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$DIR_NAME" diff --git a/.ci/scripts/common/pre-upload.sh b/.ci/scripts/common/pre-upload.sh index a49e3fff3b..705362a3c0 100644 --- a/.ci/scripts/common/pre-upload.sh +++ b/.ci/scripts/common/pre-upload.sh @@ -1,5 +1,8 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" GITREV="`git show -s --format='%h'`" ARTIFACTS_DIR="artifacts" diff --git a/.ci/scripts/format/docker.sh b/.ci/scripts/format/docker.sh index 778411e4a4..a0f7a61cce 100644 --- a/.ci/scripts/format/docker.sh +++ b/.ci/scripts/format/docker.sh @@ -1,5 +1,8 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + # Run clang-format cd /yuzu chmod a+x ./.ci/scripts/format/script.sh diff --git a/.ci/scripts/format/exec.sh b/.ci/scripts/format/exec.sh index e9e9d2e170..40ab41abda 100644 --- a/.ci/scripts/format/exec.sh +++ b/.ci/scripts/format/exec.sh @@ -1,7 +1,10 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + chmod a+x ./.ci/scripts/format/docker.sh # the UID for the container yuzu user is 1027 sudo chown -R 1027 ./ -docker run -v $(pwd):/yuzu yuzuemu/build-environments:linux-clang-format /bin/bash -ex /yuzu/.ci/scripts/format/docker.sh +docker run -v "$(pwd):/yuzu" -w /yuzu yuzuemu/build-environments:linux-clang-format /bin/bash -ex /yuzu/.ci/scripts/format/docker.sh sudo chown -R $UID ./ diff --git a/.ci/scripts/format/script.sh b/.ci/scripts/format/script.sh index c2550c9666..119abae6ad 100644 --- a/.ci/scripts/format/script.sh +++ b/.ci/scripts/format/script.sh @@ -1,5 +1,8 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + if grep -nrI '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .ci* dist/*.desktop \ dist/*.svg dist/*.xml; then echo Trailing whitespace found, aborting diff --git a/.ci/scripts/linux/docker.sh b/.ci/scripts/linux/docker.sh index 5070b92d1f..35c4a43687 100755 --- a/.ci/scripts/linux/docker.sh +++ b/.ci/scripts/linux/docker.sh @@ -1,10 +1,11 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + # Exit on error, rather than continuing with the rest of the script. set -e -cd /yuzu - ccache -s mkdir build || true && cd build @@ -19,28 +20,27 @@ cmake .. \ -DENABLE_QT_TRANSLATION=ON \ -DUSE_DISCORD_PRESENCE=ON \ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \ - -DYUZU_USE_BUNDLED_FFMPEG=ON + -DYUZU_USE_BUNDLED_FFMPEG=ON \ + -GNinja -make -j$(nproc) +ninja ccache -s ctest -VV -C Release -make install DESTDIR=AppDir +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://github.com/yuzu-emu/ext-linux-bin/raw/main/appimage/linuxdeploy-x86_64.AppImage -wget -nc https://github.com/yuzu-emu/ext-linux-bin/raw/main/appimage/linuxdeploy-plugin-qt-x86_64.AppImage -wget -nc https://github.com/yuzu-emu/ext-linux-bin/raw/main/appimage/AppRun-patched-x86_64 +wget -nc https://raw.githubusercontent.com/yuzu-emu/ext-linux-bin/main/gcc/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 # Set executable bit chmod 755 \ - AppRun-patched-x86_64 \ + deploy-linux.sh \ + AppRun.sh \ exec-x86_64.so \ - linuxdeploy-x86_64.AppImage \ - linuxdeploy-plugin-qt-x86_64.AppImage # Workaround for https://github.com/AppImage/AppImageKit/issues/828 export APPIMAGE_EXTRACT_AND_RUN=1 @@ -50,11 +50,14 @@ mkdir -p AppDir/usr/optional/libstdc++ mkdir -p AppDir/usr/optional/libgcc_s # Deploy yuzu's needed dependencies -./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin qt +DEPLOY_QT=1 ./deploy-linux.sh AppDir/usr/bin/yuzu AppDir + +# Workaround for libQt5MultimediaGstTools indirectly requiring libwayland-client and breaking Vulkan usage on end-user systems +find AppDir -type f -regex '.*libwayland-client\.so.*' -delete -print # Workaround for building yuzu with GCC 10 but also trying to distribute it to Ubuntu 18.04 et al. # See https://github.com/darealshinji/AppImageKit-checkrt cp exec-x86_64.so AppDir/usr/optional/exec.so -cp AppRun-patched-x86_64 AppDir/AppRun +cp AppRun.sh AppDir/AppRun cp --dereference /usr/lib/x86_64-linux-gnu/libstdc++.so.6 AppDir/usr/optional/libstdc++/libstdc++.so.6 cp --dereference /lib/x86_64-linux-gnu/libgcc_s.so.1 AppDir/usr/optional/libgcc_s/libgcc_s.so.1 diff --git a/.ci/scripts/linux/exec.sh b/.ci/scripts/linux/exec.sh index a7deddeb35..fa3d78cc26 100644 --- a/.ci/scripts/linux/exec.sh +++ b/.ci/scripts/linux/exec.sh @@ -1,8 +1,16 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + mkdir -p "ccache" || true chmod a+x ./.ci/scripts/linux/docker.sh # the UID for the container yuzu user is 1027 sudo chown -R 1027 ./ -docker run -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v $(pwd):/yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/linux/docker.sh $1 + +# The environment variables listed below: +# AZURECIREPO TITLEBARFORMATIDLE TITLEBARFORMATRUNNING DISPLAYVERSION +# are requested in src/common/CMakeLists.txt and appear to be provided somewhere in Azure DevOps + +docker run -e AZURECIREPO -e TITLEBARFORMATIDLE -e TITLEBARFORMATRUNNING -e DISPLAYVERSION -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v "$(pwd):/yuzu" -w /yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/linux/docker.sh "$1" sudo chown -R $UID ./ diff --git a/.ci/scripts/linux/upload.sh b/.ci/scripts/linux/upload.sh old mode 100644 new mode 100755 index 208cd0d049..e0f336427b --- a/.ci/scripts/linux/upload.sh +++ b/.ci/scripts/linux/upload.sh @@ -1,22 +1,28 @@ #!/bin/bash -ex +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + . .ci/scripts/common/pre-upload.sh -APPIMAGE_NAME="yuzu-${GITDATE}-${GITREV}.AppImage" -REV_NAME="yuzu-linux-${GITDATE}-${GITREV}" +APPIMAGE_NAME="yuzu-${RELEASE_NAME}-${GITDATE}-${GITREV}.AppImage" +BASE_NAME="yuzu-linux" +REV_NAME="${BASE_NAME}-${GITDATE}-${GITREV}" ARCHIVE_NAME="${REV_NAME}.tar.xz" COMPRESSION_FLAGS="-cJvf" -if [ "${RELEASE_NAME}" = "mainline" ]; then - DIR_NAME="${REV_NAME}" +if [ "${RELEASE_NAME}" = "mainline" ] || [ "${RELEASE_NAME}" = "early-access" ]; then + DIR_NAME="${BASE_NAME}-${RELEASE_NAME}" else - DIR_NAME="${REV_NAME}_${RELEASE_NAME}" + DIR_NAME="${REV_NAME}-${RELEASE_NAME}" fi mkdir "$DIR_NAME" cp build/bin/yuzu-cmd "$DIR_NAME" -cp build/bin/yuzu "$DIR_NAME" +if [ "${RELEASE_NAME}" != "early-access" ] && [ "${RELEASE_NAME}" != "mainline" ]; then + cp build/bin/yuzu "$DIR_NAME" +fi # Build an AppImage cd build @@ -24,6 +30,16 @@ cd build wget -nc https://github.com/yuzu-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 +if ! ./appimagetool-x86_64.AppImage --version; then + export APPIMAGE_EXTRACT_AND_RUN=1 +fi + +# Don't let AppImageLauncher ask to integrate EA +if [ "${RELEASE_NAME}" = "mainline" ] || [ "${RELEASE_NAME}" = "early-access" ]; then + echo "X-AppImage-Integrate=false" >> AppDir/org.yuzu_emu.yuzu.desktop +fi + if [ "${RELEASE_NAME}" = "mainline" ]; then # Generate update information if releasing to mainline ./appimagetool-x86_64.AppImage -u "gh-releases-zsync|yuzu-emu|yuzu-${RELEASE_NAME}|latest|yuzu-*.AppImage.zsync" AppDir "${APPIMAGE_NAME}" @@ -38,4 +54,9 @@ if [ -f "build/${APPIMAGE_NAME}.zsync" ]; then cp "build/${APPIMAGE_NAME}.zsync" "${ARTIFACTS_DIR}/" fi +# Copy the AppImage to the general release directory and remove git revision info +if [ "${RELEASE_NAME}" = "mainline" ] || [ "${RELEASE_NAME}" = "early-access" ]; then + cp "build/${APPIMAGE_NAME}" "${DIR_NAME}/yuzu-${RELEASE_NAME}.AppImage" +fi + . .ci/scripts/common/post-upload.sh diff --git a/.ci/scripts/merge/apply-patches-by-label-private.py b/.ci/scripts/merge/apply-patches-by-label-private.py index 16b45043ed..c640c4c4da 100644 --- a/.ci/scripts/merge/apply-patches-by-label-private.py +++ b/.ci/scripts/merge/apply-patches-by-label-private.py @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + # Download all pull requests as patches that match a specific label # Usage: python download-patches-by-label.py