mescc: Mes C Library: Populate with function tests from scaffold.
[mes.git] / build-aux / build-mes.sh
index 8c301fab432a9b02fc337152ece0bc29c2953996..5254bfcca520df24295ff0fdc8a148f504bb2e33 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # GNU Mes --- Maxwell Equations of Software
-# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Mes.
 #
 # You should have received a copy of the GNU General Public License
 # along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
 
+set -e
+
+if [ ! "$config_status" ]; then
+    . ./config.status
+fi
+
 . ${srcdest}build-aux/config.sh
 . ${srcdest}build-aux/trace.sh
+. ${srcdest}build-aux/cc.sh
 
-GUILE=${GUILE-guile}
-if [ -z "$GUILE" -o "$GUILE" = "true" ] || ! command -v $GUILE > /dev/null; then
-    GUILE=src/mes
-fi
+[ "$mes_p" ] && (program_prefix= compile lib/linux/$mes_arch/crt1)
+[ "$mes_p" -a ! "$gcc_p" ] && cp -f lib/linux/$mes_arch/crt1.S lib/$mes_arch/crt1.S
+[ "$mes_p" -a ! "$gcc_p" ] && cp -f lib/linux/$mes_arch/crt1.o lib/$mes_arch/crt1.o
 
-[ -z "$MESCC" ] && MESCC=scripts/mescc
-MES=${MES-$(command -v mes)}
-[ -z "$MES" ] && MES=src/mes
+[ ! "$mesc_p" -a ! "$posix_p" ] && (program_prefix= compile lib/linux/$mes_arch/crt0)
+[ "$mes_p" -a "$gcc_p" ] && (program_prefix= compile lib/linux/$mes_arch/crti)
+[ "$mes_p" -a "$gcc_p" ] && (program_prefix= compile lib/linux/$mes_arch/crtn)
 
-set -e
+[ ! "$mes_p" -a ! "$mesc_p" ] && compile lib/libmes
+[ ! "$mes_p" -a ! "$mesc_p" ] && archive lib/libmes
 
-trace "HEX2       0exit-42" $HEX2\
-    --LittleEndian\
-    --Architecture 1\
-    --BaseAddress 0x1000000\
-    -f ${srcdest}lib/x86-mes/elf32-0header.hex2\
-    -f ${srcdest}lib/x86-mes/elf32-body-exit-42.hex2\
-    -f ${srcdest}lib/x86-mes/elf-0footer.hex2\
-    --exec_enable\
-    -o lib/x86-mes/0exit-42.x86-out
-
-trace "TEST       lib/x86-mes/0exit-42.x86-out" echo lib/x86-mes/0exit-42.x86-out
-{ set +e; lib/x86-mes/0exit-42.x86-out; r=$?; set -e; }
-[ $r != 42 ] && echo "  => $r" && exit 1
-
-trace "HEX2       0exit-42" $HEX2\
-    --LittleEndian\
-    --Architecture 1\
-    --BaseAddress 0x1000000\
-    -f ${srcdest}lib/x86-mes/elf32-header.hex2\
-    -f ${srcdest}lib/x86-mes/elf32-body-exit-42.hex2\
-    -f ${srcdest}lib/x86-mes/elf32-footer-single-main.hex2\
-    --exec_enable\
-    -o lib/x86-mes/exit-42.x86-out
-
-trace "TEST       lib/x86-mes/exit-42.x86-out" echo lib/x86-mes/exit-42.x86-out
-{ set +e; lib/x86-mes/exit-42.x86-out; r=$?; set -e; }
-[ $r != 42 ] && echo "  => $r" && exit 1
-
-if [ -d "$MES_SEED" ]; then
-    mkdir -p lib/x86-mes
-    trace "M1         crt1.S" $M1\
-        $M1FLAGS\
-        -f ${srcdest}lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/crt1.S\
-        -o lib/x86-mes/crt1.o
-    trace "M1         libc.S" $M1\
-        $M1FLAGS\
-        -f ${srcdest}lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/libc.S\
-        -o lib/x86-mes/libc.o
-    trace "M1         mes.S" $M1\
-        --LittleEndian\
-        --Architecture 1\
-        -f ${srcdest}lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/mes.S\
-        -o src/mes.o
-    trace "BLOOD_ELF  mes.S" $BLOOD_ELF\
-        -f ${srcdest}lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/mes.S\
-        -f $MES_SEED/x86-mes/libc.S\
-        -o src/mes.S.blood-elf
-    trace "M1         mes.blood-elf" $M1\
-        --LittleEndian\
-        --Architecture 1\
-        -f src/mes.S.blood-elf\
-        -o src/mes.o.blood-elf
-    trace "HEX2       mes.o" $HEX2\
-        $HEX2FLAGS\
-        -f ${srcdest}lib/x86-mes/elf32-header.hex2\
-        -f lib/x86-mes/crt1.o\
-        -f lib/x86-mes/libc.o\
-        -f src/mes.o\
-        -f src/mes.o.blood-elf\
-        --exec_enable\
-        -o src/mes.seed-out
-    cp src/mes.seed-out src/mes
-    trace "M1         libc+tcc.S" $M1\
-        $M1FLAGS\
-        -f ${srcdest}lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/libc+tcc.S\
-        -o lib/x86-mes/libc+tcc.o
-fi
+[ "$mes_p" ] && compile lib/libc-mini
+[ "$mes_p" ] && archive lib/libc-mini
 
-PREPROCESS=1
-if [ ! -d "$MES_SEED" ] \
-       && [ "$arch" = "i386" \
-            -o "$arch" = "i586" \
-            -o "$arch" = "i686" ]; then
-    MES_ARENA=100000000
-fi
+[ "$mes_p" ] && compile lib/libc
+[ "$mes_p" ] && archive lib/libc
+
+[ "$mes_p"  ] && compile lib/libc+tcc
+[ "$mes_p"  ] && archive lib/libc+tcc
+
+[ "$mes_p" ] && compile lib/libc+gnu
+[ "$mes_p" ] && archive lib/libc+gnu
+
+[ "$mes_p" -a ! "$mesc_p" ] && compile lib/libtcc1
+[ "$mes_p" -a ! "$mesc_p" ] && archive lib/libtcc1
+
+[ "$mes_p" -a ! "$mesc_p" ] && compile lib/libg
+[ "$mes_p" -a ! "$mesc_p" ] && archive lib/libg
+
+[ "$mes_p" -a ! "$mesc_p" ] && compile lib/libgetopt
+[ "$mes_p" -a ! "$mesc_p" ] && archive lib/libgetopt
+
+compile scaffold/main
+(libc= link scaffold/main)
+
+compile scaffold/hello
+(libc="-l c-mini" link scaffold/hello)
+
+compile scaffold/argv
+(libc="-l c-mini" link scaffold/argv)
+
+[ "$mes_p" ] && compile lib/tests/stdlib/50-malloc
+[ "$mes_p" ] && link lib/tests/stdlib/50-malloc
+
+[ "$mes_p" ] && compile lib/tests/posix/50-getenv
+[ "$mes_p" ] && link lib/tests/posix/50-getenv
 
-MES_ARENA=100000000
-ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/x86-mes/crt1
-ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc-mini
-MES_LIBS='-l c-mini' PREPROCESS= bash ${srcdest}build-aux/cc-mes.sh lib/x86-mes/exit-42
-
-trace "TEST       lib/x86-mes/exit-42.mes-out" echo lib/x86-mes/exit-42.mes-out
-{ set +e; lib/x86-mes/exit-42.mes-out; r=$?; set -e; }
-[ $r != 42 ] && echo "  => $r" && exit 1
-
-ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc
-ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+tcc
-ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+gnu
-ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libgetopt
-
-MES_ARENA=${MES_ARENA-100000000}
-trace "SNARF.mes  gc.c"     ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/gc.c
-trace "SNARF.mes  lib.c"    ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/lib.c
-trace "SNARF.mes  math.c"   ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/math.c
-trace "SNARF.mes  mes.c"    ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/mes.c
-trace "SNARF.mes  posix.c"  ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/posix.c
-trace "SNARF.mes  reader.c" ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/reader.c
-trace "SNARF.mes  vector.c" ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/vector.c
-
-if [ -n "$SEED" ]; then
-    bash ${srcdest}build-aux/cc-mes.sh src/mes
-    exit 0
-fi
 
-MES_LIBS='-l none' bash ${srcdest}build-aux/cc-mes.sh scaffold/main
+[ "$mes_p" ] && compile scaffold/micro-mes
+[ "$mes_p" ] && link scaffold/micro-mes
 
-trace "TEST       scaffold/main.mes-out" echo scaffold/main.mes-out
-{ set +e; scaffold/main.mes-out; r=$?; set -e; }
-[ $r != 42 ] && echo "  => $r" && exit 1
+[ "$mes_p" ] && compile scaffold/tiny-mes
+[ "$mes_p" ] && link scaffold/tiny-mes
+#[ "$mes_p" ] && compile scaffold/mini-mes
+#[ "$mes_p" ] && link scaffold/mini-mes
 
-MES_LIBS='-l c-mini' bash ${srcdest}build-aux/cc-mes.sh scaffold/hello
-MES_LIBS='-l c-mini' bash ${srcdest}build-aux/cc-mes.sh scaffold/argv
-bash ${srcdest}build-aux/cc-mes.sh scaffold/malloc
-##sh ${srcdest}build-aux/cc-mes.sh scaffold/micro-mes
-##sh ${srcdest}build-aux/cc-mes.sh scaffold/tiny-mes
-# bash ${srcdest}build-aux/cc-mes.sh scaffold/mini-mes
-bash ${srcdest}build-aux/cc-mes.sh src/mes
-cp src/mes.mes-out src/mes
+compile src/mes
+link src/mes