From 7ab279bf7b5bc459be6ea908963e936896ea0cf4 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Fri, 24 Nov 2017 19:02:58 +0100 Subject: [PATCH] bootstrap: Add bootstrap build scripts. * build.sh: New file. * check-mescc.sh: New file. * check.sh: New file. * install.sh: New File. --- .gitignore | 1 + build.sh | 35 +++++++++++++++ check-mescc.sh | 104 +++++++++++++++++++++++++++++++++++++++++++++ check.sh | 58 +++++++++++++++++++++++++ install.sh | 27 ++++++++++++ test.sh | 47 ++++++++++++++++++++ tests/psyntax.test | 11 ++++- 7 files changed, 281 insertions(+), 2 deletions(-) create mode 100755 build.sh create mode 100755 check-mescc.sh create mode 100755 check.sh create mode 100755 install.sh create mode 100755 test.sh diff --git a/.gitignore b/.gitignore index c9c64902..4ab37c91 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ /.tarball-version /ChangeLog /a.out +*.mes-out #keep this: bootstrap #/mes.mes diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..b34aea23 --- /dev/null +++ b/build.sh @@ -0,0 +1,35 @@ +#! /bin/sh + +set -ex + +HEX2=${HEX2-hex2} +M1=${M1-M1} +MES_SEED=${MES_SEED-../mes-seed} + +$M1 --LittleEndian --Architecture=1\ + -f stage0/x86.M1\ + -f $MES_SEED/crt1.M1\ + > crt1.hex2 +$M1 --LittleEndian --Architecture=1\ + -f stage0/x86.M1\ + -f $MES_SEED/libc-mes.M1\ + > libc-mes.hex2 +$M1 --LittleEndian --Architecture=1\ + -f stage0/x86.M1\ + -f $MES_SEED/mes.M1\ + > mes.hex2 +$HEX2 --LittleEndian --Architecture=1 --BaseAddress=0x1000000\ + -f stage0/elf32-header.hex2\ + -f crt1.hex2\ + -f libc-mes.hex2\ + -f mes.hex2\ + -f stage0/elf32-footer-single-main.hex2\ + > mes +chmod +x mes + +#TODO: after building from seed, build from src/mes.c + +$M1 --LittleEndian --Architecture=1 -f\ + stage0/x86.M1\ + -f $MES_SEED/libc-mes+tcc.M1\ + > libc-mes+tcc.hex2 diff --git a/check-mescc.sh b/check-mescc.sh new file mode 100755 index 00000000..fc6a2045 --- /dev/null +++ b/check-mescc.sh @@ -0,0 +1,104 @@ +#! /bin/sh + +GUILE=${GUILE-guile} +MES=${MES-./mes} +M1=${M1-M1} +HEX2=${HEX2-hex2} +MESCC=${MESCC-guile/mescc.scm} +MES_PREFIX=${MES_PREFIX-.} + +tests=" +t +00-exit-0 +01-return-0 +02-return-1 +03-call +04-call-0 +05-call-1 +06-call-!1 +10-if-0 +11-if-1 +12-if-== +13-if-!= +14-if-goto +15-if-!f +16-if-t +20-while +21-char[] +22-while-char[] +23-pointer +30-strlen +31-eputs +32-compare +33-and-or +34-pre-post +35-compare-char +36-compare-arithmetic +37-compare-assign +38-compare-call +40-if-else +41-? +42-goto-label +43-for-do-while +44-switch +45-void-call +50-assert +51-strcmp +52-itoa +53-strcpy +54-argv +60-math +61-array +63-struct-cell +64-make-cell +65-read +70-printf +71-struct-array +72-typedef-struct-def +73-union +74-multi-line-string +75-struct-union +76-pointer-arithmetic +77-pointer-assign +78-union-struct +79-int-array +7a-struct-char-array +7b-struct-int-array +7c-dynarray +7d-cast-char +7e-struct-array-access +7f-struct-pointer-arithmetic +7g-struct-byte-word-field +7h-struct-assign +7i-struct-struct +7j-strtoull +7k-for-each-elem +7l-struct-any-size-array +7m-struct-char-array-assign +7n-struct-struct-array +" + +if [ ! -x ./i686-unknown-linux-gnu-tcc ]; then + tests=$(echo "$tests" | grep -Ev "02-return-1|05-call-1") +fi + +set +e +fail=0 +total=0 +for t in $tests; do + sh test.sh "$t" &> scaffold/tests/$t.log + r=$? + total=$((total+1)) + if [ $r = 0 ]; then + echo $t: [OK] + else + echo $t: [FAIL] + fail=$((fail+1)) + fi +done +if [ $fail != 0 ]; then + echo FAILED: $fail/$total + exit 1 +else + echo PASS: $total +fi diff --git a/check.sh b/check.sh new file mode 100755 index 00000000..7494c38e --- /dev/null +++ b/check.sh @@ -0,0 +1,58 @@ +#! /bin/sh + +export GUILE=${GUILE-guile} +export MES=${MES-./mes} + +tests=" +tests/read.test +tests/base.test +tests/closure.test +tests/quasiquote.test +tests/let.test +tests/scm.test +tests/display.test +tests/cwv.test +tests/math.test +tests/vector.test +tests/srfi-1.test +tests/srfi-13.test +tests/srfi-14.test +tests/optargs.test +tests/fluids.test +tests/catch.test +tests/psyntax.test +tests/pmatch.test +tests/let-syntax.test +tests/guile.test +tests/record.test +" + +slow=" +tests/match.test +tests/peg.test +" + +tests=$(for t in $tests; do echo $t-guile; echo $t; done) + +set +e +fail=0 +total=0 +for t in $tests; do + sh "$t" &> $t.log + r=$? + total=$((total+1)) + if [ $r = 0 ]; then + echo $t: [OK] + else + echo $t: [FAIL] + fail=$((fail+1)) + fi +done +if [ $fail != 0 ]; then + echo FAILED: $fail/$total + exit 1 +else + echo PASS: $total +fi + +sh check-mescc.sh diff --git a/install.sh b/install.sh new file mode 100755 index 00000000..deedb974 --- /dev/null +++ b/install.sh @@ -0,0 +1,27 @@ +#! /bin/sh + +set -e + +PREFIX=${PREFIX-usr} +MES_PREFIX=${MES_PREFIX-$PREFIX/share/mes} +MES_SEED=${MES_SEED-../mes-seed} +TINYCC_SEED=${TINYCC_SEED-../tinycc-seed} + +mkdir -p $PREFIX/bin +cp mes $PREFIX/bin/mes + +mkdir -p $PREFIX/lib +mkdir -p $MES_PREFIX/lib +cp $MES_SEED/crt1.M1 $MES_PREFIX/lib/crt1.M1 +cp $MES_SEED/libc-mes.M1 $MES_PREFIX/lib/libc-mes.M1 +cp $MES_SEED/libc-mes+tcc.M1 $MES_PREFIX/lib/libc-mes+tcc.M1 + +cp crt1.hex2 $MES_PREFIX/lib/crt1.hex2 +cp libc-mes.hex2 $MES_PREFIX/lib/libc-mes.hex2 +cp libc-mes+tcc.hex2 $MES_PREFIX/lib/libc-mes+tcc.hex2 + +cp scripts/mescc.mes $PREFIX/bin/mescc.mes +cp guile/mescc.scm $PREFIX/bin/mescc.scm + +mkdir -p $MES_PREFIX +tar -cf- doc guile include lib module scaffold stage0 | tar -xf- -C $MES_PREFIX diff --git a/test.sh b/test.sh new file mode 100755 index 00000000..37dfc7b1 --- /dev/null +++ b/test.sh @@ -0,0 +1,47 @@ +#! /bin/sh + +set -ex + +t=${1-t} +rm -f "$t".i686-unknown-linux-gnu-out +rm -f "$t".mes-out + +M1=${M1-M1} +HEX2=${HEX2-hex2} +MESCC=${MESCC-sh guile/mescc.scm} + +$MESCC -E -o scaffold/tests/$t.E scaffold/tests/$t.c +$MESCC -c -o scaffold/tests/$t.M1 scaffold/tests/$t.E +$M1 --LittleEndian --Architecture=1\ + -f stage0/x86.M1\ + -f scaffold/tests/$t.M1\ + > scaffold/tests/$t.hex2 + +$MESCC -E -o lib/crt1.E lib/crt1.c +$MESCC -c -o lib/crt1.M1 lib/crt1.E +$M1 --LittleEndian --Architecture=1 \ + -f stage0/x86.M1\ + -f lib/crt1.M1\ + > lib/crt1.hex2 +$MESCC -E -o lib/libc-mes.E lib/libc-mes.c +$MESCC -c -o lib/libc-mes.M1 lib/libc-mes.E +$M1 --LittleEndian --Architecture=1\ + -f stage0/x86.M1\ + -f lib/libc-mes.M1\ + > lib/libc-mes.hex2 + +$HEX2 --LittleEndian --Architecture=1 --BaseAddress=0x1000000\ + -f stage0/elf32-header.hex2\ + -f lib/crt1.hex2\ + -f lib/libc-mes.hex2\ + -f scaffold/tests/$t.hex2\ + -f stage0/elf32-footer-single-main.hex2\ + > scaffold/tests/$t.mes-out +chmod +x scaffold/tests/$t.mes-out + +r=0 +set +e +scaffold/tests/$t.mes-out +m=$? + +[ $m = $r ] diff --git a/tests/psyntax.test b/tests/psyntax.test index 1954b972..701f0b05 100755 --- a/tests/psyntax.test +++ b/tests/psyntax.test @@ -27,10 +27,15 @@ exit $? ;;; along with Mes. If not, see . (cond-expand - (guile-2 + (guile-2.2 (define sc-expand identity) (define syntax-object->datum syntax->datum) (define datum->syntax-object datum->syntax)) + (guile-2 + (define sc-expand identity) + (define syntax-object->datum syntax->datum) + (define datum->syntax-object datum->syntax) + (define-macro (with-ellipsis . stuff) #t)) (guile (use-modules (ice-9 syncase)) (define sc-expand identity)) @@ -206,4 +211,6 @@ exit $? '(a 1 2 3) (quote-a 1 2 3))) -(result 'report) +(result 'report (if (and guile? + (equal? (effective-version) "2.0")) 1 + 0))