diff --git a/.ci/build-linux-aarch64.sh b/.ci/build-linux-aarch64.sh old mode 100644 new mode 100755 index a0c4724bff89..38829ea130ba --- a/.ci/build-linux-aarch64.sh +++ b/.ci/build-linux-aarch64.sh @@ -12,8 +12,16 @@ git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ { print $3 mkdir build && cd build || exit 1 -export CC="${CLANG_BINARY}" -export CXX="${CLANGXX_BINARY}" +if [ "$COMPILER" = "gcc" ]; then + # These are set in the dockerfile + export CC="${GCC_BINARY}" + export CXX="${GXX_BINARY}" + export LINKER=gold + export CFLAGS="-fuse-linker-plugin -fuse-ld=${LINKER}" +else + export CC="${CLANG_BINARY}" + export CXX="${CLANGXX_BINARY}" +fi cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr \ diff --git a/.ci/setup-windows.sh b/.ci/setup-windows.sh index e75154ae012a..825dc0b8f822 100755 --- a/.ci/setup-windows.sh +++ b/.ci/setup-windows.sh @@ -103,16 +103,24 @@ COMM_HASH=$(git rev-parse --short=8 HEAD) # Format the above into filenames if [ -n "$PR_NUMBER" ]; then AVVER="${COMM_TAG}-${COMM_HASH}" - BUILD="rpcs3-v${AVVER}_win64.7z" + BUILD_RAW="rpcs3-v${AVVER}_win64" + BUILD="${BUILD_RAW}.7z" else AVVER="${COMM_TAG}-${COMM_COUNT}" - BUILD="rpcs3-v${AVVER}-${COMM_HASH}_win64.7z" + BUILD_RAW="rpcs3-v${AVVER}-${COMM_HASH}_win64" + BUILD="${BUILD_RAW}.7z" fi # BRANCH is used for experimental build warnings for pr builds, used in main_window.cpp. # BUILD is the name of the release artifact +# BUILD_RAW is just filename # AVVER is used for GitHub releases, it is the version number. BRANCH="${REPO_NAME}/${REPO_BRANCH}" -echo "BRANCH=$BRANCH" > .ci/ci-vars.env -echo "BUILD=$BUILD" >> .ci/ci-vars.env -echo "AVVER=$AVVER" >> .ci/ci-vars.env + +# SC2129 +{ + echo "BRANCH=$BRANCH" + echo "BUILD=$BUILD" + echo "BUILD_RAW=$BUILD_RAW" + echo "AVVER=$AVVER" +} >> .ci/ci-vars.env diff --git a/.github/workflows/rpcs3.yml b/.github/workflows/rpcs3.yml new file mode 100644 index 000000000000..2f08b4e32dba --- /dev/null +++ b/.github/workflows/rpcs3.yml @@ -0,0 +1,165 @@ +name: Build RPCS3 + +on: + push: + paths-ignore: + - '.cirrus.yml' + - '.azure-pipelines.yml' + - 'README.md' + pull_request: + paths-ignore: + - '.cirrus.yml' + - '.azure-pipelines.yml' + - 'README.md' + workflow_dispatch: + +concurrency: + group: ${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true + +env: + BUILD_REPOSITORY_NAME: ${{ github.repository }} + BUILD_SOURCEBRANCHNAME: ${{ github.ref_name }} + BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/build + +jobs: + Linux_Build: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-24.04 + docker_img: "rpcs3/rpcs3-ci-jammy:1.0" + build_sh: "/rpcs3/.ci/build-linux.sh" + compiler: clang + - os: ubuntu-24.04 + docker_img: "rpcs3/rpcs3-ci-jammy:1.0" + build_sh: "/rpcs3/.ci/build-linux.sh" + compiler: gcc + - os: ubuntu-24.04-arm + docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.0" + build_sh: "/rpcs3/.ci/build-linux-aarch64.sh" + compiler: clang + runs-on: ${{ matrix.os }} + env: + CCACHE_DIR: ${{ github.workspace }}/ccache + CI_HAS_ARTIFACTS: true + DEPLOY_APPIMAGE: true + APPDIR: "/rpcs3/build/appdir" + ARTDIR: "/root/artifacts" + RELEASE_MESSAGE: "/rpcs3/GitHubReleaseMessage.txt" + COMPILER: ${{ matrix.compiler }} + + steps: + - name: Checkout repository + uses: actions/checkout@main + with: + fetch-depth: 0 + + - name: Setup Cache + uses: actions/cache@main + with: + path: ${{ env.CCACHE_DIR }} + key: ${{ runner.os }}-ccache-${{ matrix.compiler }} + + - name: Docker setup and build + run: | + docker pull --quiet ${{ matrix.docker_img }} + docker run \ + -v $PWD:/rpcs3 \ + --env-file .ci/docker.env \ + -v ${{ env.CCACHE_DIR }}:/root/.ccache \ + -v ${{ github.workspace }}/artifacts:/root/artifacts \ + ${{ matrix.docker_img }} \ + ${{ matrix.build_sh }} + + - name: Upload artifacts + #TODO: Upload artifact to release repository + #condition for release + #if: | + # github.event_name != 'pull_request' && + # github.repository == 'RPCS3/rpcs3' && + # github.ref == 'refs/heads/master' && + # matrix.compiler == 'clang' + uses: actions/upload-artifact@main + with: + name: RPCS3 for Linux (${{ runner.arch }}, ${{ matrix.compiler }}) + path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}/*.AppImage + compression-level: 0 + + Windows_Build: + runs-on: windows-latest + env: + COMPILER: msvc + QT_VER_MAIN: '6' + QT_VER: '6.8.1' + QT_VER_MSVC: 'msvc2022' + QT_DATE: '202411221531' + VULKAN_VER: '1.3.268.0' + VULKAN_SDK_SHA: '8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5' + CACHE_DIR: ./cache + steps: + + - name: Checkout repository + uses: actions/checkout@main + with: + fetch-depth: 0 + + - name: Setup env + run: | + echo "QTDIR=C:\Qt\${{ env.QT_VER }}\${{ env.QT_VER_MSVC }}_64" >> ${{ github.env }} + echo "VULKAN_SDK=C:\VulkanSDK\${{ env.VULKAN_VER }}" >> ${{ github.env }} + + - name: Get Cache Keys + shell: bash + run: .ci/get_keys-windows.sh + + - name: Setup Cache + uses: actions/cache@main + with: + path: ${{ env.CACHE_DIR }} + key: ${{ runner.os }}-${{ env.COMPILER }}-${{ env.QT_VER }}-${{ env.VULKAN_SDK_SHA }}-llvm.lock-glslang.lock + restore-keys: ${{ runner.os }}-${{ env.COMPILER }} + + - name: Download and unpack dependencies + shell: bash + run: .ci/setup-windows.sh + + - name: Export Variables + shell: bash + run: | + while IFS='=' read -r key val; do + # Skip lines that are empty or start with '#' + [[ -z "$key" || "$key" =~ ^# ]] && continue + echo "$key=$val" >> "${{ github.env }}" + done < .ci/ci-vars.env + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@main + + - name: Compile RPCS3 + run: msbuild rpcs3.sln /p:Configuration=Release /p:Platform=x64 + + - name: Pack up build artifacts + shell: bash + run: | + mkdir -p ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }} + .ci/deploy-windows.sh + + - name: Upload artifacts (7z) + #TODO: Upload artifact to release repository + #condition for release + #if: | + # github.event_name != 'pull_request' && + # github.repository == 'RPCS3/rpcs3' && + # github.ref == 'refs/heads/master' + uses: actions/upload-artifact@main + with: + name: RPCS3 for Windows (MSVC) + # 7z + # 7z.sha256 + path: | + ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}/${{ env.BUILD }} + ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}/${{ env.BUILD }}.sha256 + compression-level: 0 + if-no-files-found: error