Skip to content

Commit ddb2de1

Browse files
authored
github: support ARM linux in backend and renderdiff tests (#9817)
- Update get-mesa.sh to query dpkg --print-architecture to install the correct packages dynamically, enabling aarch64 support. - Update get-vulkan-sdk.sh to install via apt-get on Linux (libvulkan-dev, vulkan-validationlayers, glslang-tools, spirv-tools) instead of downloading LunarG's x86_64 tarball. - Add runner architecture to Mesa and Vulkan SDK GitHub Action cache keys to prevent collision. - Update test.sh and preamble.sh to detect aarch64 and point to the appropriate aarch64-linux-gnu libraries. - Fix typos and some renaming
1 parent 20aa91e commit ddb2de1

File tree

8 files changed

+47
-17
lines changed

8 files changed

+47
-17
lines changed

.github/actions/get-mesa/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ runs:
99
uses: actions/cache@v4
1010
with:
1111
path: mesa
12-
key: ${{ runner.os }}-mesa-deps-${{ env.GITHUB_MESA_VERSION }}
12+
key: ${{ runner.os }}-${{ runner.arch }}-mesa-deps-${{ env.GITHUB_MESA_VERSION }}
1313
- name: Get Mesa
1414
run: |
1515
bash build/common/get-mesa.sh

.github/actions/get-vulkan-sdk/action.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ runs:
99
id: cache-vulkan-sdk
1010
with:
1111
path: ~/VulkanSDK
12-
key: vulkansdk-${{ env.GITHUB_VULKANSDK_VERSION }}-2-${{ runner.os }}
12+
key: vulkansdk-${{ env.GITHUB_VULKANSDK_VERSION }}-2-${{ runner.os }}-${{ runner.arch }}
1313
- name: Download Vulkan SDK
1414
if: steps.cache-vulkan-sdk.outputs.cache-hit != 'true'
1515
run: |
@@ -23,6 +23,7 @@ runs:
2323
unpack_vulkan_installer
2424
shell: bash
2525
- name: Run Vulkan SDK setup
26+
if: runner.os != 'Linux'
2627
run: |
2728
pushd .
2829
cd ~/VulkanSDK/${GITHUB_VULKANSDK_VERSION}

.github/actions/web-prereq/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: 'Web Preqrequisites'
1+
name: 'Web Prerequisites'
22
runs:
33
using: "composite"
44
steps:

.github/workflows/presubmit.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ jobs:
9696
- name: Run build script
9797
run: |
9898
cd build/linux && printf "y" | ./build.sh presubmit
99-
- name: Test material parser
99+
- name: Test - material parser
100100
run: |
101101
out/cmake-release/filament/test/test_material_parser
102102
@@ -266,10 +266,10 @@ jobs:
266266
echo "accept=false" >> "$GITHUB_OUTPUT"
267267
fi
268268
shell: bash
269-
- name: Renderdiff Generate
269+
- name: Renderdiff generate
270270
if: steps.check_accept.outputs.accept != 'true'
271271
uses: ./.github/actions/renderdiff-generate
272-
- name: Render and compare
272+
- name: Compare rendered images
273273
if: steps.check_accept.outputs.accept != 'true'
274274
id: render_compare
275275
env:
@@ -301,12 +301,13 @@ jobs:
301301
echo "$DELIMITER" >> "$GITHUB_OUTPUT"
302302
fi
303303
shell: bash
304-
- uses: actions/upload-artifact@v4
304+
- name: Upload artifacts
305+
uses: actions/upload-artifact@v4
305306
if: steps.check_accept.outputs.accept != 'true'
306307
with:
307308
name: presubmit-renderdiff-result
308309
path: ./out/renderdiff
309-
- name: Compare result
310+
- name: Check results
310311
if: steps.check_accept.outputs.accept != 'true'
311312
run: |
312313
ERROR_STR="${{ steps.render_compare.outputs.err }}"
@@ -315,7 +316,7 @@ jobs:
315316
exit 1
316317
fi
317318
318-
validate-wgsl-webgpu:
319+
build-wgsl-webgpu:
319320
name: validate-wgsl-webgpu
320321
runs-on: 'arm-ubuntu-24.04-16core'
321322
needs: [check-verification]

build/common/get-mesa.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,13 @@ if [[ "$OS_NAME" == "Linux" ]]; then
5454
# is constantly being updated and sometimes not compatible with the current
5555
# linux platform.
5656
# Note that we assume this platform is compatible with ubuntu-22.04 x86_64
57+
DPKG_ARCH=$(dpkg --print-architecture)
58+
EXTRA_PACKAGES=""
59+
if [[ "$DPKG_ARCH" == "amd64" ]]; then
60+
EXTRA_PACKAGES="lib32gcc-s1 lib32stdc++6 libc6-i386"
61+
fi
5762
sudo apt-get -y install \
58-
autoconf automake autopoint autotools-dev bindgen bison build-essential bzip2 cpp cpp-11 debhelper debugedit dh-autoreconf dh-strip-nondeterminism diffstat directx-headers-dev dpkg-dev dwz flex g++ g++-11 gcc gcc-11 gcc-11-base:amd64 gettext glslang-tools icu-devtools intltool-debian lib32gcc-s1 lib32stdc++6 libarchive-zip-perl libasan6:amd64 libatomic1:amd64 libc-dev-bin libc6-dbg:amd64 libc6-dev:amd64 libc6-i386 libcc1-0:amd64 libclang-${GITHUB_CLANG_VERSION}-dev libclang-common-${GITHUB_CLANG_VERSION}-dev libclang-cpp${GITHUB_CLANG_VERSION} libclang-cpp${GITHUB_CLANG_VERSION}-dev libclang1-14 libclang1-${GITHUB_CLANG_VERSION} libclc-${GITHUB_CLANG_VERSION} libclc-${GITHUB_CLANG_VERSION}-dev libcrypt-dev:amd64 libdebhelper-perl libdpkg-perl libdrm-amdgpu1:amd64 libdrm-dev:amd64 libdrm-intel1:amd64 libdrm-nouveau2:amd64 libdrm-radeon1:amd64 libelf-dev:amd64 libexpat1-dev:amd64 libffi-dev:amd64 libfile-stripnondeterminism-perl libgc1:amd64 libgcc-11-dev:amd64 libgl1:amd64 libgl1-mesa-dri:amd64 libglapi-mesa:amd64 libglvnd-core-dev:amd64 libglvnd0:amd64 libglx-mesa0:amd64 libglx0:amd64 libgomp1:amd64 libicu-dev:amd64 libisl23:amd64 libitm1:amd64 libllvm14:amd64 libllvm${GITHUB_CLANG_VERSION}:amd64 libllvmspirvlib-${GITHUB_CLANG_VERSION}-dev:amd64 libllvmspirvlib${GITHUB_CLANG_VERSION}:amd64 liblsan0:amd64 libmpc3:amd64 libncurses-dev:amd64 libnsl-dev:amd64 libobjc-11-dev:amd64 libobjc4:amd64 libpciaccess-dev:amd64 libpciaccess0f:amd64 libpfm4:amd64 libpthread-stubs0-dev:amd64 libquadmath0:amd64 libsensors-config libsensors-dev:amd64 libsensors5:amd64 libset-scalar-perl libstd-rust-1.75:amd64 libstd-rust-dev:amd64 libstdc++-11-dev:amd64 libsub-override-perl libtinfo-dev:amd64 libtirpc-dev:amd64 libtool libtsan0:amd64 libubsan1:amd64 libva-dev:amd64 libva-drm2:amd64 libva-glx2:amd64 libva-wayland2:amd64 libva-x11-2:amd64 libva2:amd64 libvdpau-dev:amd64 libvdpau1:amd64 libvulkan-dev:amd64 libvulkan1:amd64 libwayland-bin libwayland-client0:amd64 libwayland-cursor0:amd64 libwayland-dev:amd64 libwayland-egl-backend-dev:amd64 libwayland-egl1:amd64 libwayland-server0:amd64 libx11-dev:amd64 libx11-xcb-dev:amd64 libx11-xcb1:amd64 libxau-dev:amd64 libxcb-dri2-0:amd64 libxcb-dri2-0-dev:amd64 libxcb-dri3-0:amd64 libxcb-dri3-dev:amd64 libxcb-glx0:amd64 libxcb-glx0-dev:amd64 libxcb-present-dev:amd64 libxcb-present0:amd64 libxcb-randr0:amd64 libxcb-randr0-dev:amd64 libxcb-render0:amd64 libxcb-render0-dev:amd64 libxcb-shape0:amd64 libxcb-shape0-dev:amd64 libxcb-shm0:amd64 libxcb-shm0-dev:amd64 libxcb-sync-dev:amd64 libxcb-sync1:amd64 libxcb-xfixes0:amd64 libxcb-xfixes0-dev:amd64 libxcb1-dev:amd64 libxdmcp-dev:amd64 libxext-dev:amd64 libxfixes-dev:amd64 libxfixes3:amd64 libxml2-dev:amd64 libxrandr-dev:amd64 libxrandr2:amd64 libxrender-dev:amd64 libxrender1:amd64 libxshmfence-dev:amd64 libxshmfence1:amd64 libxxf86vm-dev:amd64 libxxf86vm1:amd64 libz3-4:amd64 libz3-dev:amd64 libzstd-dev:amd64 linux-libc-dev:amd64 llvm-${LLVM_VERSION} llvm-${LLVM_VERSION}-dev llvm-${LLVM_VERSION}-linker-tools llvm-${LLVM_VERSION}-runtime llvm-${LLVM_VERSION}-tools llvm-spirv-${LLVM_VERSION} lto-disabled-list m4 make meson ninja-build pkg-config po-debconf python3-mako python3-ply python3-pygments quilt rpcsvc-proto rustc spirv-tools valgrind wayland-protocols x11proto-dev xorg-sgml-doctools xtrans-dev zlib1g-dev:amd64 \
63+
autoconf automake autopoint autotools-dev bindgen bison build-essential bzip2 cpp cpp-11 debhelper debugedit dh-autoreconf dh-strip-nondeterminism diffstat directx-headers-dev dpkg-dev dwz flex g++ g++-11 gcc gcc-11 gcc-11-base:${DPKG_ARCH} gettext glslang-tools icu-devtools intltool-debian ${EXTRA_PACKAGES} libarchive-zip-perl libasan6:${DPKG_ARCH} libatomic1:${DPKG_ARCH} libc-dev-bin libc6-dbg:${DPKG_ARCH} libc6-dev:${DPKG_ARCH} libcc1-0:${DPKG_ARCH} libclang-${GITHUB_CLANG_VERSION}-dev libclang-common-${GITHUB_CLANG_VERSION}-dev libclang-cpp${GITHUB_CLANG_VERSION} libclang-cpp${GITHUB_CLANG_VERSION}-dev libclang1-14 libclang1-${GITHUB_CLANG_VERSION} libclc-${GITHUB_CLANG_VERSION} libclc-${GITHUB_CLANG_VERSION}-dev libcrypt-dev:${DPKG_ARCH} libdebhelper-perl libdpkg-perl libdrm-amdgpu1:${DPKG_ARCH} libdrm-dev:${DPKG_ARCH} libdrm-intel1:${DPKG_ARCH} libdrm-nouveau2:${DPKG_ARCH} libdrm-radeon1:${DPKG_ARCH} libelf-dev:${DPKG_ARCH} libexpat1-dev:${DPKG_ARCH} libffi-dev:${DPKG_ARCH} libfile-stripnondeterminism-perl libgc1:${DPKG_ARCH} libgcc-11-dev:${DPKG_ARCH} libgl1:${DPKG_ARCH} libgl1-mesa-dri:${DPKG_ARCH} libglapi-mesa:${DPKG_ARCH} libglvnd-core-dev:${DPKG_ARCH} libglvnd0:${DPKG_ARCH} libglx-mesa0:${DPKG_ARCH} libglx0:${DPKG_ARCH} libgomp1:${DPKG_ARCH} libicu-dev:${DPKG_ARCH} libisl23:${DPKG_ARCH} libitm1:${DPKG_ARCH} libllvm14:${DPKG_ARCH} libllvm${GITHUB_CLANG_VERSION}:${DPKG_ARCH} libllvmspirvlib-${GITHUB_CLANG_VERSION}-dev:${DPKG_ARCH} libllvmspirvlib${GITHUB_CLANG_VERSION}:${DPKG_ARCH} liblsan0:${DPKG_ARCH} libmpc3:${DPKG_ARCH} libncurses-dev:${DPKG_ARCH} libnsl-dev:${DPKG_ARCH} libobjc-11-dev:${DPKG_ARCH} libobjc4:${DPKG_ARCH} libpciaccess-dev:${DPKG_ARCH} libpciaccess0f:${DPKG_ARCH} libpfm4:${DPKG_ARCH} libpthread-stubs0-dev:${DPKG_ARCH} libquadmath0:${DPKG_ARCH} libsensors-config libsensors-dev:${DPKG_ARCH} libsensors5:${DPKG_ARCH} libset-scalar-perl libstd-rust-1.75:${DPKG_ARCH} libstd-rust-dev:${DPKG_ARCH} libstdc++-11-dev:${DPKG_ARCH} libsub-override-perl libtinfo-dev:${DPKG_ARCH} libtirpc-dev:${DPKG_ARCH} libtool libtsan0:${DPKG_ARCH} libubsan1:${DPKG_ARCH} libva-dev:${DPKG_ARCH} libva-drm2:${DPKG_ARCH} libva-glx2:${DPKG_ARCH} libva-wayland2:${DPKG_ARCH} libva-x11-2:${DPKG_ARCH} libva2:${DPKG_ARCH} libvdpau-dev:${DPKG_ARCH} libvdpau1:${DPKG_ARCH} libvulkan-dev:${DPKG_ARCH} libvulkan1:${DPKG_ARCH} libwayland-bin libwayland-client0:${DPKG_ARCH} libwayland-cursor0:${DPKG_ARCH} libwayland-dev:${DPKG_ARCH} libwayland-egl-backend-dev:${DPKG_ARCH} libwayland-egl1:${DPKG_ARCH} libwayland-server0:${DPKG_ARCH} libx11-dev:${DPKG_ARCH} libx11-xcb-dev:${DPKG_ARCH} libx11-xcb1:${DPKG_ARCH} libxau-dev:${DPKG_ARCH} libxcb-dri2-0:${DPKG_ARCH} libxcb-dri2-0-dev:${DPKG_ARCH} libxcb-dri3-0:${DPKG_ARCH} libxcb-dri3-dev:${DPKG_ARCH} libxcb-glx0:${DPKG_ARCH} libxcb-glx0-dev:${DPKG_ARCH} libxcb-present-dev:${DPKG_ARCH} libxcb-present0:${DPKG_ARCH} libxcb-randr0:${DPKG_ARCH} libxcb-randr0-dev:${DPKG_ARCH} libxcb-render0:${DPKG_ARCH} libxcb-render0-dev:${DPKG_ARCH} libxcb-shape0:${DPKG_ARCH} libxcb-shape0-dev:${DPKG_ARCH} libxcb-shm0:${DPKG_ARCH} libxcb-shm0-dev:${DPKG_ARCH} libxcb-sync-dev:${DPKG_ARCH} libxcb-sync1:${DPKG_ARCH} libxcb-xfixes0:${DPKG_ARCH} libxcb-xfixes0-dev:${DPKG_ARCH} libxcb1-dev:${DPKG_ARCH} libxdmcp-dev:${DPKG_ARCH} libxext-dev:${DPKG_ARCH} libxfixes-dev:${DPKG_ARCH} libxfixes3:${DPKG_ARCH} libxml2-dev:${DPKG_ARCH} libxrandr-dev:${DPKG_ARCH} libxrandr2:${DPKG_ARCH} libxrender-dev:${DPKG_ARCH} libxrender1:${DPKG_ARCH} libxshmfence-dev:${DPKG_ARCH} libxshmfence1:${DPKG_ARCH} libxxf86vm-dev:${DPKG_ARCH} libxxf86vm1:${DPKG_ARCH} libz3-4:${DPKG_ARCH} libz3-dev:${DPKG_ARCH} libzstd-dev:${DPKG_ARCH} linux-libc-dev:${DPKG_ARCH} llvm-${LLVM_VERSION} llvm-${LLVM_VERSION}-dev llvm-${LLVM_VERSION}-linker-tools llvm-${LLVM_VERSION}-runtime llvm-${LLVM_VERSION}-tools llvm-spirv-${LLVM_VERSION} lto-disabled-list m4 make meson ninja-build pkg-config po-debconf python3-mako python3-ply python3-pygments quilt rpcsvc-proto rustc spirv-tools valgrind wayland-protocols x11proto-dev xorg-sgml-doctools xtrans-dev zlib1g-dev:${DPKG_ARCH} \
5964
clang-$GITHUB_CLANG_VERSION libc++-$GITHUB_CLANG_VERSION-dev libc++abi-$GITHUB_CLANG_VERSION-dev
6065

6166
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-${GITHUB_CLANG_VERSION} 100

build/common/get-vulkan-sdk.sh

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ function _preferred_os_filename() {
6363

6464
function download_vulkan_installer() {
6565
local os=$(_get_os)
66+
if [[ "$os" == "linux" ]]; then
67+
echo "Linux uses apt to install vulkan dependencies, skipping tarball download." >&2
68+
return 0
69+
fi
6670
local dl_filename=$(_os_filename ${VULKAN_SDK_VERSION})
6771
local filename=$(_preferred_os_filename)
6872
local url=https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/$os/$dl_filename?Human=true
@@ -79,15 +83,22 @@ function download_vulkan_installer() {
7983

8084
function unpack_vulkan_installer() {
8185
local os=$(_get_os)
86+
if [[ "$os" == "linux" ]]; then
87+
install_${os}
88+
return 0
89+
fi
8290
local filename=$(_preferred_os_filename $os)
8391
test -f $filename
8492
install_${os}
8593
}
8694

8795
function install_linux() {
88-
test -d $VULKAN_SDK_DIR && test -f vulkan_sdk.tar.gz
89-
echo "extract just the SDK's prebuilt binaries ($VULKAN_SDK_VERSION/x86_64) from vulkan_sdk.tar.gz into $VULKAN_SDK" >&2
90-
tar -C "$VULKAN_SDK_DIR" --strip-components 2 -xf vulkan_sdk.tar.gz $VULKAN_SDK_VERSION/x86_64
96+
echo "Installing Vulkan dependencies via apt for Linux..." >&2
97+
sudo apt-get update -y
98+
sudo apt-get install -y libvulkan-dev vulkan-validationlayers glslang-tools spirv-tools
99+
100+
# Create a dummy SDK dir to satisfy scripts expecting a VulkanSDK folder structure
101+
mkdir -p ~/VulkanSDK/${VULKAN_SDK_VERSION}
91102
}
92103

93104
function install_mac() {

test/backend/test.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,15 @@ BACKEND_TEST_TARGET=''
1717

1818
# Set environment variables to use Mesa drivers.
1919
os_name=$(uname -s)
20+
arch_name=$(uname -m)
2021
if [[ "$os_name" == "Linux" ]]; then
21-
export LD_LIBRARY_PATH="${PROJECT_ROOT_DIR}/mesa/out/lib/x86_64-linux-gnu"
22-
export VK_ICD_FILENAMES="${PROJECT_ROOT_DIR}/mesa/out/share/vulkan/icd.d/lvp_icd.x86_64.json"
22+
if [[ "$arch_name" == "aarch64" ]]; then
23+
export LD_LIBRARY_PATH="${PROJECT_ROOT_DIR}/mesa/out/lib/aarch64-linux-gnu"
24+
export VK_ICD_FILENAMES="${PROJECT_ROOT_DIR}/mesa/out/share/vulkan/icd.d/lvp_icd.aarch64.json"
25+
else
26+
export LD_LIBRARY_PATH="${PROJECT_ROOT_DIR}/mesa/out/lib/x86_64-linux-gnu"
27+
export VK_ICD_FILENAMES="${PROJECT_ROOT_DIR}/mesa/out/share/vulkan/icd.d/lvp_icd.x86_64.json"
28+
fi
2329
BACKEND_TEST_TARGET=backend_test_linux
2430
elif [[ "$os_name" == "Darwin" ]]; then
2531
export DYLD_LIBRARY_PATH="${PROJECT_ROOT_DIR}/mesa/out/lib"

test/renderdiff/src/preamble.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,15 @@ GLTF_DIR="$(pwd)/gltf/Models"
2626
BUILD_COMMON_DIR="$(pwd)/build/common"
2727

2828
os_name=$(uname -s)
29+
arch_name=$(uname -m)
2930
if [[ "$os_name" == "Linux" ]]; then
30-
MESA_LIB_DIR="${MESA_DIR}lib/x86_64-linux-gnu"
31-
MESA_VK_ICD_PATH="${MESA_DIR}share/vulkan/icd.d/lvp_icd.x86_64.json"
31+
if [[ "$arch_name" == "aarch64" ]]; then
32+
MESA_LIB_DIR="${MESA_DIR}lib/aarch64-linux-gnu"
33+
MESA_VK_ICD_PATH="${MESA_DIR}share/vulkan/icd.d/lvp_icd.aarch64.json"
34+
else
35+
MESA_LIB_DIR="${MESA_DIR}lib/x86_64-linux-gnu"
36+
MESA_VK_ICD_PATH="${MESA_DIR}share/vulkan/icd.d/lvp_icd.x86_64.json"
37+
fi
3238
elif [[ "$os_name" == "Darwin" ]]; then
3339
MESA_LIB_DIR="${MESA_DIR}lib"
3440
MESA_VK_ICD_PATH="${MESA_DIR}share/vulkan/icd.d/lvp_icd.aarch64.json"

0 commit comments

Comments
 (0)