Procházet zdrojové kódy

bootstrap/fixpoint.sh: automate Stage1(gm2)->Stage2(V3)->Stage3(V3), assert byte-identical images (FIXPOINT OK, 1991439 bytes)

Eric Streit před 1 týdnem
rodič
revize
42cbe3650a
1 změnil soubory, kde provedl 72 přidání a 0 odebrání
  1. 72 0
      bootstrap/fixpoint.sh

+ 72 - 0
bootstrap/fixpoint.sh

@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# V3 self-hosting fixpoint.
+#
+#   Stage 1: build V3 with GNU Modula-2 (CR -m, gm2)   -> $TMP/m2s1
+#   Stage 2: $TMP/m2s1 compiles the whole compiler     -> $TMP/stage2.ssa
+#            (and that image is assembled into $TMP/m2s2)
+#   Stage 3: $TMP/m2s2 compiles the whole compiler     -> $TMP/stage3.ssa
+#
+# Success = Stage2.ssa and Stage3.ssa are byte-identical (the compiler
+# reproduces its own image exactly). Stage 1's image equals Stage 2's
+# too, but the meaningful check is between V3 stages.
+#
+# Notes: CR must be run WITHOUT -m for V3-facing sources (real FORWARD
+# declarations); gm2's link pass rejects FORWARD, so Stage 1 uses -m.
+# Stage 1 uses the host FileIO; the compiled image embeds the
+# self-hosted runtime/syslib/FileIO from the session.
+#
+# Usage: bootstrap/fixpoint.sh   (from anywhere)
+set -e
+
+ROOT=$(cd "$(dirname "$0")/.." && pwd)
+CC_DIR="$ROOT/compiler"
+CR="${CR:-$HOME/Projets/Projets-Modula2/MyWork/CocoGm2/CR}"
+QBE="${QBE:-qbe}"
+CC="${CC:-cc}"
+TMP="${TMP:-/tmp/opencode}"
+mkdir -p "$TMP"
+
+SYS="../stdlib/storage.def ../stdlib/storage.mod \
+     ../runtime/syslib/SysShim.def ../runtime/syslib/SysShim.mod \
+     ../runtime/syslib/FileIO.def ../runtime/syslib/FileIO.mod \
+     ../stdlib/strings.def ../stdlib/strings.mod"
+SRC="src/SymTab.def src/SymTab.mod \
+     src/QbeGen.def src/QbeGen.mod \
+     src/M2S.def src/M2S.mod src/M2P.def src/M2P.mod src/M2.mod"
+
+echo "=== Stage 1: gm2 build (CR -m) ==="
+cd "$CC_DIR"
+./build.sh
+cp M2 "$TMP/m2s1"
+
+echo "=== V3-facing sources (CR without -m) ==="
+cd "$CC_DIR/src"
+CRFRAMES="$(pwd)" "$CR" -C M2.atg >/dev/null
+
+stage() {
+  # $1 = compiler binary, $2 = output .ssa path, $3 = output binary (or "")
+  cd "$CC_DIR"
+  rm -f gen_ssa/M2.ssa
+  $1 $SYS $SRC >/dev/null
+  [ -f gen_ssa/M2.ssa ] || { echo "no gen_ssa/M2.ssa from $1"; exit 1; }
+  cp gen_ssa/M2.ssa "$2"
+  if [ -n "$3" ]; then
+    "$QBE" -o "$TMP/m2.s" gen_ssa/M2.ssa
+    "$CC" -w "$TMP/m2.s" "$ROOT/runtime/syslib/shim.c" -o "$3" -lm
+  fi
+}
+
+echo "=== Stage 2: V3 (gm2-built) compiles the compiler ==="
+stage "$TMP/m2s1" "$TMP/stage2.ssa" "$TMP/m2s2"
+
+echo "=== Stage 3: V3 (self-built) compiles the compiler ==="
+stage "$TMP/m2s2" "$TMP/stage3.ssa" ""
+
+echo "=== compare ==="
+if cmp -s "$TMP/stage2.ssa" "$TMP/stage3.ssa"; then
+  echo "FIXPOINT OK: stage2.ssa == stage3.ssa ($(wc -c < "$TMP/stage2.ssa") bytes)"
+else
+  echo "FIXPOINT FAILED:"; cmp "$TMP/stage2.ssa" "$TMP/stage3.ssa" || true
+  exit 1
+fi