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