commit b2e6287e51525cb75388a7db2bf634f4f9725b6e
parent 9ee6cfbd74bb1f853969b21e8f9fb2e233e82ad7
Author: erai <erai@omiltem.net>
Date: Sun, 15 Sep 2024 20:23:44 -0400
remove hand parser in the self hosting compiler
Diffstat:
3 files changed, 30 insertions(+), 26 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -4,7 +4,6 @@ disk
cc0
cc1
cc2
-cc3
gencc
parse3.c
parsepeg2.c
@@ -25,3 +24,4 @@ mkdir
xxd
cat
peg
+peg0
diff --git a/bootstrap.sh b/bootstrap.sh
@@ -1,14 +1,27 @@
#!/bin/sh
LIBS="bufio.c lib.c alloc.c syscall.c"
-SOURCES="cc1.c type.c parse1.c lex1.c as.c decl.c node.c"
+PEG="peg.c peglib.c parsepeg.c"
+SOURCES="cc1.c type.c parse2.c parse3.c peglib.c as.c decl.c node.c"
+# Build the bootstrap compiler from c
gcc -Wall -Wextra -Wno-unused -pedantic -std=c99 ./cc0.c -o cc0
+# Bootstrap the parser tool
+./cc0 ${LIBS} ${PEG} -o peg0
+
+# Bootstrap the self hosted compiler
+./peg0 cc3.peg -o parse3.c
./cc0 ${LIBS} ${SOURCES} -o cc1
+# Double check the bootstrap and self hosting compiler have the same output
./cc1 ${LIBS} ${SOURCES} -o cc2
+cmp cc1 cc2 || echo cc mismatch
-cmp cc1 cc2 || echo mismatch
+# Also check the peg tool compiles the same
+./cc1 ${LIBS} ${PEG} -o peg
+cmp peg0 peg || echo peg mismatch
-sh -e ./build.sh
+# Verify that the saved bootstrap parsepeg.c came from peg.peg
+./peg peg.peg -o parsepeg2.c
+cmp parsepeg.c parsepeg2.c || echo parsepeg mismatch
diff --git a/build.sh b/build.sh
@@ -1,4 +1,4 @@
-#!/sh
+#!/bin/sh
LIBS="bufio.c lib.c alloc.c syscall.c"
CRYPTO="ed25519.c sha512.c sha256.c chacha20.c poly1305.c"
@@ -11,27 +11,18 @@ SHELL="echo.c cmp.c rm.c ls.c cat.c xxd.c mv.c mkdir.c cpio.c sh.c"
BIN="echo cmp rm ls cat xxd mv mkdir cpio sh sshd init cc1 cc2 build.sh peg.peg cc3.peg"
ALL="${LIBS} ${CC} ${PEG} ${BOOT} ${SSHD} ${KERNEL} ${SHELL} ${BIN}"
-./cc1 ${LIBS} ${CC} -o cc2
-
-./cc1 ${LIBS} ${PEG} -o peg
-./peg -o parsepeg2.c peg.peg
-cmp parsepeg.c parsepeg2.c || echo peg mismatch
-
-./peg -o parse3.c cc3.peg
-./cc2 -o cc3 bufio.c lib.c alloc.c syscall.c peglib.c parse2.c parse3.c as.c type.c decl.c node.c cc1.c
-
-./cc3 ${LIBS} echo.c -o echo
-./cc3 ${LIBS} cmp.c -o cmp
-./cc3 ${LIBS} rm.c -o rm
-./cc3 ${LIBS} mv.c -o mv
-./cc3 ${LIBS} mkdir.c -o mkdir
-./cc3 ${LIBS} ls.c -o ls
-./cc3 ${LIBS} cat.c -o cat
-./cc3 ${LIBS} xxd.c -o xxd
-./cc3 ${LIBS} cpio.c -o cpio
-./cc3 ${LIBS} sh.c -o sh
-./cc3 ${LIBS} ${CRYPTO} sshd.c -o sshd
+./cc1 ${LIBS} echo.c -o echo
+./cc1 ${LIBS} cmp.c -o cmp
+./cc1 ${LIBS} rm.c -o rm
+./cc1 ${LIBS} mv.c -o mv
+./cc1 ${LIBS} mkdir.c -o mkdir
+./cc1 ${LIBS} ls.c -o ls
+./cc1 ${LIBS} cat.c -o cat
+./cc1 ${LIBS} xxd.c -o xxd
+./cc1 ${LIBS} cpio.c -o cpio
+./cc1 ${LIBS} sh.c -o sh
+./cc1 ${LIBS} ${CRYPTO} sshd.c -o sshd
for name in ${ALL}; do echo ${name}; done | ./cpio -o > initramfs
-./cc3 kernel.c -o kernel
+./cc1 kernel.c -o kernel