diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 05ca38f5..34e3578a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,7 @@ jobs: -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ -DMOBILEGL_BUILD_TEST=ON \ -DMOBILEGL_BUILD_BENCHMARK=ON \ - -DMOBILEGL_BUILD_TRACE_REPLAY=ON \ + -DMOBILEGL_BUILD_TRACE_REPLAY=OFF \ -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON \ -DBENCHMARK_ENABLE_TESTING=OFF \ -DCMAKE_POLICY_VERSION_MINIMUM=3.5 @@ -88,9 +88,7 @@ jobs: "${BUILD_DIR}/CTestTestfile.cmake" \ "${BUILD_DIR}/MobileGL/MG_Test" \ "${BUILD_DIR}/MobileGL/MG_Benchmark" \ - "${BUILD_DIR}/tools/trace_replay" \ - "${SHARED_LIBS[@]}" \ - tools/trace_replay/fixtures + "${SHARED_LIBS[@]}" - name: Upload Linux runtime uses: actions/upload-artifact@v4 @@ -192,9 +190,15 @@ jobs: retrace: runs-on: ubuntu-latest - needs: build-linux + env: + BUILD_DIR: build-retrace steps: + - name: Set Swap Space + uses: pierotofy/set-swap-space@master + with: + swap-size-gb: 32 + - name: Checkout repo uses: actions/checkout@v4 with: @@ -203,39 +207,68 @@ jobs: - name: Get CMake uses: lukka/get-cmake@latest - - name: Install runtime dependencies + - name: Prepare Vulkan SDK + uses: humbletim/setup-vulkan-sdk@v1.2.1 + with: + vulkan-query-version: 1.4.304.1 + vulkan-components: Vulkan-Headers, Vulkan-Loader + vulkan-use-cache: true + + - name: Update glslang external sources + working-directory: 3rdparty/glslang + run: python update_glslang_sources.py + + - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -y libvulkan1 libegl1 libgles2 libgl1-mesa-dri mesa-vulkan-drivers + sudo apt-get install -y clang-20 clang++-20 lld-20 libc++-20-dev libc++abi-20-dev libvulkan-dev libegl1-mesa-dev libgles2-mesa-dev libgl1-mesa-dri mesa-vulkan-drivers ninja-build - - name: Download Linux runtime - uses: actions/download-artifact@v4 - with: - name: mobilegl-linux-runtime - path: . - - - name: Unpack Linux runtime - run: tar -xzf mobilegl-linux-runtime.tgz - - - name: Normalize CTest command paths + - name: Show installed toolchain run: | - python - <<'PY' - from pathlib import Path - import re + clang-20 --version + clang++-20 --version + ld.lld-20 --version || ld.lld --version || true + dpkg -l 'libc++*' 'libegl*' 'libgles*' 'mesa*' 'vulkan*' || true - for path in Path('build-linux').rglob('CTestTestfile.cmake'): - text = path.read_text() - text = re.sub(r'"[^"]*/cmake-[^"]*/bin/cmake"', '"cmake"', text) - path.write_text(text) - PY + - name: Configure CMake + run: | + if [ "${{ secrets.ACTIONS_STEP_DEBUG }}" = "true" ]; then + BUILD_TYPE=Debug + else + BUILD_TYPE=Release + fi + + cmake -S . -B "${BUILD_DIR}" -G Ninja \ + -DCMAKE_C_COMPILER=clang-20 \ + -DCMAKE_CXX_COMPILER=clang++-20 \ + -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ + -DMOBILEGL_BUILD_TEST=OFF \ + -DMOBILEGL_BUILD_BENCHMARK=OFF \ + -DMOBILEGL_BUILD_TRACE_REPLAY=ON \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + + - name: Build trace replay + run: cmake --build "${BUILD_DIR}" --target mobilegl_trace_replay --parallel "$(nproc)" - name: Retrace and validate Espryt (DirectGLES) - working-directory: build-linux/tools/trace_replay - run: ctest -V -R MobileGLTraceReplay.OpenRA.DirectGLES + working-directory: build-retrace + run: | + set +e + ctest -V -R MobileGLTraceReplay.OpenRA.DirectGLES + status=$? + mkdir -p tools/trace_replay/openra + echo "${status}" > tools/trace_replay/openra/DirectGLES.status + exit 0 - name: Retrace and validate Magma (DirectVulkan) - working-directory: build-linux/tools/trace_replay - run: ctest -V -R MobileGLTraceReplay.OpenRA.DirectVulkan + working-directory: build-retrace + run: | + set +e + ctest -V -R MobileGLTraceReplay.OpenRA.DirectVulkan + status=$? + mkdir -p tools/trace_replay/openra + echo "${status}" > tools/trace_replay/openra/DirectVulkan.status + exit 0 - name: Upload actual image if: always() @@ -243,8 +276,22 @@ jobs: with: name: OpenRA-retrace-actual path: | - build-linux/tools/trace_replay/openra/actual-images/openra-DirectGLES-actual.png - build-linux/tools/trace_replay/openra/actual-images/openra-DirectVulkan-actual.png - build-linux/tools/trace_replay/openra/actual-images/*.json - build-linux/tools/trace_replay/openra/actual-images/*.log + build-retrace/tools/trace_replay/openra/actual-images/openra-DirectGLES-actual.png + build-retrace/tools/trace_replay/openra/actual-images/openra-DirectVulkan-actual.png + build-retrace/tools/trace_replay/openra/actual-images/*.json + build-retrace/tools/trace_replay/openra/actual-images/*.log + build-retrace/tools/trace_replay/openra/*.status + build-retrace/tools/trace_replay/openra/*/output/** if-no-files-found: warn + + - name: Check retrace results + if: always() + working-directory: build-retrace + run: | + direct_gles_status="$(cat tools/trace_replay/openra/DirectGLES.status 2>/dev/null || echo 1)" + direct_vulkan_status="$(cat tools/trace_replay/openra/DirectVulkan.status 2>/dev/null || echo 1)" + echo "DirectGLES status: ${direct_gles_status}" + echo "DirectVulkan status: ${direct_vulkan_status}" + if [ "${direct_gles_status}" -ne 0 ] || [ "${direct_vulkan_status}" -ne 0 ]; then + exit 1 + fi