# plan9-kencc-linux Кросс-сборка **компиляторов / ассемблеров / линкеров Plan 9 (kencc)** для всех архитектур **с Linux-хоста**, плюс болваночное **UEFI-приложение** (PE32+), собранное этим же тулчейном. Ничего юниксового в цепочке сборки самих `.efi`. Собрано и проверено на Linux/musl. Пилилось телеграм-ботом (Claude) по заказу чата ancap.in.ua. ## Что внутри ``` bin/ готовые бинари: 8c 6c 5c vc qc kc (компиляторы) + 8a 8l 6a 6l scripts/ setup.sh клонирует plan9foundation + plan9port, собирает plan9port build_arch.sh собирает C-компилятор арки X (5|6|8|v|q|k) build_al.sh собирает ассемблер/линкер build_all.sh собирает весь кросс-кит efi/ hello.c сам EFI-апп (наш код) fetch_ref.sh тянет pe64.s/efi.h/mem.h из 9legacy (nboot/efi) efi_build.sh 6a+6c+6l -> dd -> bootx64.efi (PE32+) mkesp.py заворачивает .efi в загрузочный ESP (FAT16) kernel/ kernel.c + kern.s болваночное ядро (386): пишет в VGA 0xB8000 loader.c загрузчик Plan9 a.out (разбор хедера, загрузка, прыжок) mkboot.sh 8a+8c+8l -> kernel (a.out) PATCHES.md почему каждый патч нужен ``` ## Идея Фронтенд-компилятора Plan 9 (`cc/`) + кодогенераторы арок (`5c`,`6c`,`8c`,`vc`,`qc`,`kc`) пишутся на Plan 9 C и рассчитаны на родную сборку в Plan 9. Мы собираем их на Linux, компилируя **plan9port**-овским `9c`/`9l` (они дают `lib9`/`libbio`/`libmach` и дружат с хостовым gcc/musl). Всё, что мешает, лечится небольшими патчами (см. `PATCHES.md`). | арка | комп | ассемблер | линкер | |------|------|-----------|--------| | 386 | 8c | 8a | 8l | | amd64 | 6c | 6a | 6l | | arm | 5c | 5a | 5l | | mips | vc | va | vl | | power | qc | qa | ql | | sparc | kc | ka | kl | ## Быстрый старт ```sh # 1. зависимости (plan9foundation + plan9port) bash scripts/setup.sh export PLAN9SRC=$PWD/deps/plan9foundation export PLAN9PORT=$PWD/deps/plan9port # (опц. musl: export MUSL_ENV=/path/to/env.sh) # 2. собрать всё bash scripts/build_all.sh # -> build/*/{6c,6a,6l,...} # 3. один компилятор bash scripts/build_arch.sh 6 # -> build/6c/6c # 4. проверить echo 'int f(void){return 42;}' > t.c build/6c/6c t.c && ls t.6 # объектник Plan9 .6 ``` ## EFI-болванка ```sh cd efi ./fetch_ref.sh # pe64.s/efi.h/mem.h из 9legacy PLAN9SRC=$PWD/../deps/plan9foundation ./efi_build.sh # -> bootx64.efi : PE32+ x64 EFI_APPLICATION python3 mkesp.py bootx64.efi esp.img # -> загрузочный ESP (/EFI/BOOT/BOOTX64.EFI) # запуск: qemu-system-x86_64 -bios OVMF.fd -drive format=raw,file=esp.img ``` ## Готовые бинари В `bin/` лежат уже собранные компиляторы/асм/линкер (Linux/musl x86_64). Под свой хост пересобери скриптами — байт-в-байт воспроизводимо. Лицензии и авторство исходников — см. `NOTICE`.