Add ARM qa dockerfile and script

Allows testing ARM-based linux QA for system-specific issues
This commit is contained in:
Seth Hillbrand
2026-02-04 12:34:17 -08:00
parent 7eacd7c809
commit 486b1d1fe7
2 changed files with 157 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
FROM arm64v8/debian:trixie
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
ninja-build \
pkg-config \
git \
ca-certificates \
libwxgtk3.2-dev \
libwxgtk-webview3.2-dev \
libboost-all-dev \
libglew-dev \
libcairo2-dev \
libcurl4-openssl-dev \
libgit2-dev \
libsecret-1-dev \
libsqlite3-dev \
unixodbc-dev \
swig \
python3-dev \
python3-wxgtk4.0 \
libprotobuf-dev \
protobuf-compiler \
libngspice0-dev \
ngspice \
libocct-data-exchange-dev \
libocct-draw-dev \
libocct-foundation-dev \
libocct-modeling-algorithms-dev \
libocct-modeling-data-dev \
libocct-ocaf-dev \
libocct-visualization-dev \
nlohmann-json3-dev \
libharfbuzz-dev \
libfontconfig1-dev \
libfreetype-dev \
libglib2.0-dev \
libnng-dev \
libglm-dev \
libspnav-dev \
libegl-dev \
libgles-dev \
libpixman-1-dev \
libgtk-3-dev \
libpoppler-glib-dev \
libwayland-dev \
wayland-protocols \
ccache \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
+103
View File
@@ -0,0 +1,103 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SRC_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
IMAGE_NAME="kicad-arm64-qa"
CONTAINER_BUILD_DIR="/src/build/arm64"
# QA test names matching CI configuration (skip python/cli which need wxPython)
QA_TESTS=(kimath sexpr common eeschema pcbnew pns_regressions gerbview kicad2step spice api)
usage() {
echo "Usage: $0 [build-image|build|test|shell|all]"
echo ""
echo "Commands:"
echo " build-image Build the ARM64 Docker image"
echo " build Configure and build QA tests inside container"
echo " test Run QA tests inside container"
echo " shell Open interactive shell in container"
echo " all Build image, build tests, run tests (default)"
exit 0
}
docker_run() {
docker run --rm --platform linux/arm64 \
-v "${SRC_DIR}:/src:rw" \
-w /src \
-e CCACHE_DIR=/src/build/arm64-ccache \
"$IMAGE_NAME" \
bash -c "$1"
}
cmd_build_image() {
echo "=== Building ARM64 Docker image ==="
docker build --platform linux/arm64 -t "$IMAGE_NAME" "$SCRIPT_DIR"
}
cmd_build() {
echo "=== Configuring and building QA tests for ARM64 ==="
docker_run "
mkdir -p ${CONTAINER_BUILD_DIR} && cd ${CONTAINER_BUILD_DIR} &&
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=QABUILD \
-DKICAD_BUILD_QA_TESTS=ON \
-DKICAD_SCRIPTING=OFF \
-DKICAD_SCRIPTING_WXPYTHON=OFF \
-DKICAD_BUILD_I18N=OFF \
-DKICAD_UPDATE_CHECK=OFF \
-DKICAD_USE_CMAKE_FINDPROTOBUF=ON \
/src 2>&1 | tee cmake_log.txt &&
echo '=== CMake configuration complete ===' &&
echo 'KICAD_BUILD_ARCH detection:' &&
grep -i 'KICAD_BUILD_ARCH' CMakeCache.txt || true &&
ninja 2>&1 | tee build_log.txt
"
}
cmd_test() {
echo "=== Running QA tests for ARM64 ==="
local failed=()
for t in "${QA_TESTS[@]}"; do
echo "--- Running qa_${t} ---"
if docker_run "cd ${CONTAINER_BUILD_DIR}/qa && ctest -R qa_${t} --output-on-failure 2>&1"; then
echo "--- qa_${t}: PASSED ---"
else
echo "--- qa_${t}: FAILED ---"
failed+=("$t")
fi
done
echo ""
echo "=== Test Summary ==="
if [ ${#failed[@]} -eq 0 ]; then
echo "All tests passed."
else
echo "Failed tests: ${failed[*]}"
exit 1
fi
}
cmd_shell() {
echo "=== Opening shell in ARM64 container ==="
docker run --rm -it --platform linux/arm64 \
-v "${SRC_DIR}:/src:rw" \
-w /src \
"$IMAGE_NAME" \
bash
}
CMD="${1:-all}"
case "$CMD" in
build-image) cmd_build_image ;;
build) cmd_build ;;
test) cmd_test ;;
shell) cmd_shell ;;
all) cmd_build_image && cmd_build && cmd_test ;;
-h|--help) usage ;;
*) echo "Unknown command: $CMD"; usage ;;
esac