From a66cc4408bb4fea1c9356b7d2a0e186505c27c22 Mon Sep 17 00:00:00 2001 From: Maxim Date: Wed, 15 Jul 2026 13:12:52 +0300 Subject: [PATCH] =?UTF-8?q?ci:=2003-gftest=20=D0=B8=2004-cross-build=20?= =?UTF-8?q?=D0=BD=D0=B0=20runs-on:=20armhf=20(cross-builder)=20-=2003-gfte?= =?UTF-8?q?st:=20runs-on=20host=20=E2=86=92=20armhf;=20=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D1=82=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BE=D0=B1=D0=BE=D0=B1=D1=89=D1=91=D0=BD=20=20=20(bu?= =?UTF-8?q?ild-essential=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20apk=20bu?= =?UTF-8?q?ild-base)=20-=2004-cross-build:=20runs-on=20host=20=E2=86=92=20?= =?UTF-8?q?armhf;=20=D0=BF=D1=80=D0=B8=D1=91=D0=BC=D0=BA=D0=B0=20=D1=82?= =?UTF-8?q?=D1=83=D0=BB=D1=87=D0=B5=D0=B9=D0=BD=D0=B0=20=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=91=D1=82=D1=81=D1=8F=20=20=20=D1=80=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B9=20ARM-=D0=BA=D0=BE=D0=BC=D0=BF=D0=B8?= =?UTF-8?q?=D0=BB=D1=8F=D1=86=D0=B8=D0=B5=D0=B9=20+=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=BE=D0=BC=20e=5Fmachine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 01-smoke/02-guardrails остаются на host (Alpine act_runner_tools) — не тронуты. --- .gitea/workflows/03-gftest.yml | 17 +++++++++-------- .gitea/workflows/04-cross-build.yml | 26 +++++++++++--------------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/.gitea/workflows/03-gftest.yml b/.gitea/workflows/03-gftest.yml index a936d64..f48499c 100644 --- a/.gitea/workflows/03-gftest.yml +++ b/.gitea/workflows/03-gftest.yml @@ -2,10 +2,11 @@ # Нативная (не кросс-) сборка group_fec.c с -DGF_SELFTEST через хостовый cc # (makefile: цель gftest) и прогон самопроверки GF(256): 774 400 кейсов # восстановления группового FEC 16+2. Модуль тянет только / -# // — компилируется и на musl. +# // — компилируется любым gcc. # -# Требует в образе runner: build-base (cc) + make. Пока их нет — job падает -# на шаге "Проверить инструменты" с понятным сообщением, а не посреди сборки. +# Идёт на runs-on: armhf — cross-builder несёт нативный x86 gcc (build-essential). +# Требует в образе: cc + make. Пока их нет — job падает на шаге "Проверить +# инструменты" с понятным сообщением, а не посреди сборки. name: 03-gftest @@ -23,18 +24,18 @@ defaults: jobs: gftest: - runs-on: host + runs-on: armhf timeout-minutes: 5 steps: - name: Проверить инструменты (реальная компиляция, не command -v) - # На Alpine/musl наличие файла ничего не доказывает (см. RUNNER-IMAGE.md - # про glibc-бинари без ld-linux) — поэтому здесь компилируем и запускаем - # крошечный .c, а не просто ищем cc/make на PATH. + # Наличие файла ничего не доказывает (glibc-бинарь без ld-linux даёт + # обманчивый not found) — поэтому компилируем и запускаем крошечный .c, + # а не просто ищем cc/make на PATH. run: | for t in cc make; do command -v "$t" >/dev/null 2>&1 || { - echo "ОШИБКА: '$t' нет в образе runner — apk add build-base make в runner-image/Dockerfile" + echo "ОШИБКА: '$t' нет в образе cross-раннера — build-essential в runner-image/Dockerfile" exit 1 } done diff --git a/.gitea/workflows/04-cross-build.yml b/.gitea/workflows/04-cross-build.yml index ffb5e4e..679b136 100644 --- a/.gitea/workflows/04-cross-build.yml +++ b/.gitea/workflows/04-cross-build.yml @@ -1,16 +1,13 @@ # 04-cross-build — проверочный workflow. Приёмочный тест ARM-тулчейна в -# образе runner: пока он не заведён — job закономерно красный, и это его -# основная роль (по аналогии с их 04-toolchain). +# образе cross-раннера (по аналогии с их 04-toolchain). # -# arm-linux-gnueabihf-gcc и статические либы $XARM собраны под glibc -# (build_deps.sh гоняется на Debian), а базовый образ act_runner — Alpine/ -# musl. glibc-хостовый cross-gcc на musl не запустится вовсе, либо запустится, -# но даст бинарь, слинкованный не тем, чем ожидается — поэтому "файл лежит" -# и "command -v нашёл" ничего не доказывают (см. RUNNER-IMAGE.md про -# обманчивый "not found" без ld-linux). Доказательство здесь только одно: -# реальная кросс-компиляция крошечной программы + проверка машинного типа -# результата по ELF-заголовку (e_machine == EM_ARM), а затем настоящая -# сборка tx/rx/bench штатным make all. +# Идёт на runs-on: armhf — отдельный НАТИВНЫЙ x86-64 Debian-runner с +# arm-linux-gnueabihf-gcc (x86-бинарь, выдающий ARM-код; НЕ эмуляция) и +# прекомпилированными статическими либами $XARM. "Файл лежит" и "command -v +# нашёл" ничего не доказывают (glibc-бинарь без ld-linux даёт обманчивый +# not found) — поэтому доказательство здесь одно: реальная кросс-компиляция +# крошечной программы + проверка машинного типа результата по ELF-заголовку +# (e_machine == EM_ARM), а затем настоящая сборка tx/rx/bench штатным make all. name: 04-cross-build @@ -28,16 +25,15 @@ defaults: jobs: cross-build: - runs-on: host + runs-on: armhf timeout-minutes: 15 steps: - name: Проверить кросс-тулчейн (реальная ARM-компиляция, не command -v) run: | if ! command -v arm-linux-gnueabihf-gcc >/dev/null 2>&1; then - echo "ОШИБКА: arm-linux-gnueabihf-gcc нет в образе runner." - echo "Нужен отдельный flavor образа (Debian-база с gcc-arm-linux-gnueabihf" - echo "или Alpine + релокейтный prebuilt-тулчейн) — см. план в docs/." + echo "ОШИБКА: arm-linux-gnueabihf-gcc нет в образе cross-раннера (метка armhf)." + echo "Проверь runner-image/Dockerfile: пакет gcc-arm-linux-gnueabihf." exit 1 fi