os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

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:
M.gitignore | 2+-
Mbootstrap.sh | 19++++++++++++++++---
Mbuild.sh | 35+++++++++++++----------------------
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