From a4dce7f4d920e492d38c32ad3e42efdcfef3b3f1 Mon Sep 17 00:00:00 2001 From: claude Date: Sun, 12 Jul 2026 01:19:32 +0000 Subject: 🌭 plan9-kencc-linux: кросс-Ρ‚ΡƒΠ»Ρ‡Π΅ΠΉΠ½ Plan9 (cc/as/ld) + EFI-Π±ΠΎΠ»Π²Π°Π½ΠΊΠ° MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - build_arch.sh / build_al.sh: сборка kencc-компиляторов, ассСмблСров, Π»ΠΈΠ½ΠΊΠ΅Ρ€ΠΎΠ² всСх Π°Ρ€ΠΎΠΊ (5/6/8/v/q/k) Π½Π° Linux-хостС Ρ‡Π΅Ρ€Π΅Π· plan9port. - ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΏΠΎΠ΄ musl/gcc: sbrk->mmap, round/log2->p9*, Runemask, swcmp const, -fcommon, machcap/omachcap, /sys Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ-Ρ„Π°ΠΉΠ»Ρ‹. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² PATCHES.md. - bin/: Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ 8c 6c 5c vc qc kc + 6a 6l (Linux/musl x86_64). - efi/: Π±ΠΎΠ»Π²Π°Π½ΠΎΡ‡Π½Ρ‹ΠΉ bootx64.efi (PE32+) Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ‚ΡƒΠ»Ρ‡Π΅ΠΉΠ½ΠΎΠΌ (6a+6c+6l+dd), рСфСрСнс β€” 9legacy nboot/efi; ESP-ΠΎΠ±Ρ€Π°Π· Ρ‡Π΅Ρ€Π΅Π· mkesp.py. Co-Authored-By: Claude Opus 4.8 --- scripts/build_al.sh | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 scripts/build_al.sh (limited to 'scripts/build_al.sh') diff --git a/scripts/build_al.sh b/scripts/build_al.sh new file mode 100644 index 0000000..750f9e0 --- /dev/null +++ b/scripts/build_al.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# Π‘ΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚ Plan9 ассСмблСр (Xa) ΠΈΠ»ΠΈ Π»ΠΈΠ½ΠΊΠ΅Ρ€ (Xl) Π½Π° Linux-хостС. +# ИспользованиС: PLAN9SRC=... PLAN9PORT=... build_al.sh 6a | build_al.sh 6l +set -e +T="$1"; [ -z "$T" ] && { echo "usage: $0 <Π½Π°ΠΏΡ€. 6a|6l|8a|8l>"; exit 1; } +X="${T:0:1}"; K="${T:1:1}" + +: "${PLAN9SRC:?ΡƒΠΊΠ°ΠΆΠΈ PLAN9SRC}"; : "${PLAN9PORT:?ΡƒΠΊΠ°ΠΆΠΈ PLAN9PORT}" +[ -n "$MUSL_ENV" ] && . "$MUSL_ENV" +export PLAN9="$PLAN9PORT"; export PATH="$PLAN9/bin:$PATH" +SRC="$PLAN9SRC/sys/src/cmd" +OUT="${OUT:-$PWD/build}"; B="$OUT/$T" + +rm -rf "$B"; mkdir -p "$B"; cd "$B" +cp "$SRC/$T"/* "$B"/ 2>/dev/null || true +cp "$SRC/${X}c"/*.h "$B"/ 2>/dev/null || true # X.out.h +cp "$SRC"/cc/compat "$SRC"/cc/macbody "$SRC"/cc/lexbody "$SRC"/cc/cc.h "$B"/ 2>/dev/null || true +if [ "$K" = "l" ]; then # Π»ΠΈΠ½ΠΊΠ΅Ρ€Ρƒ: ΠΈΠΌΠ΅Π½Π° ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ² + ΠΎΠ±Ρ‰ΠΈΠΉ ELF-Π²Ρ‹Π²ΠΎΠ΄ + cp "$SRC/${X}c"/enam.c "$B"/ 2>/dev/null || true + cp "$SRC"/8l/elf.c "$SRC"/8l/elf.h "$B"/ 2>/dev/null || true +fi + +# ---- ΠΏΠ°Ρ‚Ρ‡ΠΈ (Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ для компиляторов) ---- +for c in *.c; do grep -qE '#include[ \t]*[<"]/sys/' "$c" 2>/dev/null && { echo " пропуск: $c"; rm -f "$c"; }; done +sed -i 's|"\.\./[a-zA-Z0-9]*/|"|g' *.c *.h 2>/dev/null || true +sed -i -E 's/\bround\b/p9round/g; s/\blog2\b/p9log2/g' *.c *.h compat macbody lexbody 2>/dev/null || true +python3 - <<'PY' +import glob,re +pat=re.compile(r'\{\s*return\s+sbrk\s*\(\s*(\w+)\s*\)\s*;\s*\}') +mm='''{ +\tvoid *p; +\tp = mmap(0, %s, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); +\tif(p == MAP_FAILED) return (void*)-1; +\treturn p; +}''' +for f in glob.glob('*')+['compat']: + try: s=open(f).read() + except: continue + if 'sbrk(' in s and 'mmap' not in s: + m=pat.search(s) + if m: + s2=pat.sub(mm%m.group(1), s, count=1) + if '#include ' not in s2: s2='#include \n'+s2 + open(f,'w').write(s2); print(" mmap-ΠΏΠ°Ρ‚Ρ‡:",f) +PY +[ -f a.y ] && { yacc -d a.y; sed -i -E 's/\bround\b/p9round/g; s/\blog2\b/p9log2/g' y.tab.c 2>/dev/null || true; } + +ok=0; fail=0; errf=""; rm -f *.o +for f in *.c; do + if 9c -fcommon -I. "$f" >/tmp/al_$$ 2>&1; then ok=$((ok+1)); else fail=$((fail+1)); [ -z "$errf" ] && errf="$f" && cp /tmp/al_$$ /tmp/alf_$$; fi +done +echo "[$T] компиляция: OK=$ok FAIL=$fail" +[ "$fail" != 0 ] && { echo "пСрвая ошибка ($errf):"; head -10 /tmp/alf_$$; exit 2; } + +if [ "$K" = "l" ]; then EXTRA="-lmach"; else EXTRA=""; fi # Π»ΠΈΠ½ΠΊΠ΅Ρ€Ρƒ Π½ΡƒΠΆΠ΅Π½ libmach +9l -o "$T" *.o $EXTRA +echo "[$T] Π±ΠΈΠ½Π°Ρ€ΡŒ: $(ls -la $T | awk '{print $5}') Π±Π°ΠΉΡ‚ -> $B/$T" -- cgit v1.2.3