From 486b1d1fe7db4b5b73d16cae2eb8cedfa27e65dc Mon Sep 17 00:00:00 2001 From: Seth Hillbrand Date: Wed, 4 Feb 2026 12:34:17 -0800 Subject: [PATCH] Add ARM qa dockerfile and script Allows testing ARM-based linux QA for system-specific issues --- qa/arm64/Dockerfile | 54 +++++++++++++++++++ qa/arm64/build-and-test.sh | 103 +++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 qa/arm64/Dockerfile create mode 100755 qa/arm64/build-and-test.sh diff --git a/qa/arm64/Dockerfile b/qa/arm64/Dockerfile new file mode 100644 index 0000000000..821923e011 --- /dev/null +++ b/qa/arm64/Dockerfile @@ -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 diff --git a/qa/arm64/build-and-test.sh b/qa/arm64/build-and-test.sh new file mode 100755 index 0000000000..bffadf402d --- /dev/null +++ b/qa/arm64/build-and-test.sh @@ -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