mescc: Mes C Library: Populate with function tests from scaffold.
[mes.git] / build-aux / build-mes.sh
index d32150acbec57c76d8348bc86d2b1626c5fb09fe..5254bfcca520df24295ff0fdc8a148f504bb2e33 100755 (executable)
 #! /bin/sh
 
-# Mes --- Maxwell Equations of Software
-# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+# GNU Mes --- Maxwell Equations of Software
+# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 #
-# This file is part of Mes.
+# This file is part of GNU Mes.
 #
-# Mes is free software; you can redistribute it and/or modify it
+# GNU Mes is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or (at
 # your option) any later version.
 #
-# Mes is distributed in the hope that it will be useful, but
+# GNU Mes is distributed in the hope that it will be useful, but
 # WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with Mes.  If not, see <http://www.gnu.org/licenses/>.
+# along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
 
-if [ -n "$BUILD_DEBUG" ]; then
-    set -x
+set -e
+
+if [ ! "$config_status" ]; then
+    . ./config.status
 fi
 
-export BLOOD_ELF GUILE HEX2 M1 MES MESCC
-export M1FLAGS HEX2FLAGS PREPROCESS
-export MES_SEED MES_ARENA
+. ${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
 
-HEX2=${HEX2-hex2}
-M1=${M1-M1}
-BLOOD_ELF=${BLOOD_ELF-blood-elf}
-MES_SEED=${MES_SEED-../mes-seed}
-MESCC=${MESCC-$(command -v mescc)}
-[ -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
 
-M1FLAGS=${M1FLAGS-"
---LittleEndian
---Architecture 1
-"}
-HEX2FLAGS=${HEX2FLAGS-"
---LittleEndian
---Architecture 1
---BaseAddress 0x1000000
-"}
-
-if [ -d "$MES_SEED" ]; then
-    $M1\
-        $M1FLAGS\
-        -f lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/crt1.S\
-        -o lib/x86-mes/crt1.o
-    $M1\
-        $M1FLAGS\
-        -f lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/libc.S\
-        -o lib/x86-mes/libc.o
-    $M1\
-        --LittleEndian\
-        --Architecture 1\
-        -f lib/x86-mes/x86.M1\
-        -f $MES_SEED/x86-mes/mes.S\
-        -o src/mes.o
-    $BLOOD_ELF\
-        -f 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
-    $M1\
-        --LittleEndian\
-        --Architecture 1\
-        -f src/mes.S.blood-elf\
-        -o src/mes.o.blood-elf
-    $HEX2\
-        $HEX2FLAGS\
-        -f 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
-    $M1\
-        $M1FLAGS\
-        -f 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
+
+[ "$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_p" ] && compile scaffold/micro-mes
+[ "$mes_p" ] && link scaffold/micro-mes
+
+[ "$mes_p" ] && compile scaffold/tiny-mes
+[ "$mes_p" ] && link scaffold/tiny-mes
+#[ "$mes_p" ] && compile scaffold/mini-mes
+#[ "$mes_p" ] && link scaffold/mini-mes
 
-PREPROCESS=1
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crt0
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crt1
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crti
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crtn
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc-mini
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libgetopt
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc+tcc
-ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc+gnu
-
-[ -n "$SEED" ] && exit 0
-
-MES_ARENA=${MES_ARENA-10000000}
-sh build-aux/mes-snarf.scm --mes src/gc.c
-sh build-aux/mes-snarf.scm --mes src/lib.c
-sh build-aux/mes-snarf.scm --mes src/math.c
-sh build-aux/mes-snarf.scm --mes src/mes.c
-sh build-aux/mes-snarf.scm --mes src/posix.c
-sh build-aux/mes-snarf.scm --mes src/reader.c
-sh build-aux/mes-snarf.scm --mes src/vector.c
-
-sh build-aux/cc-mes.sh scaffold/main
-sh build-aux/cc-mes.sh scaffold/hello
-sh build-aux/cc-mes.sh scaffold/argv
-sh build-aux/cc-mes.sh scaffold/malloc
-##sh build-aux/cc-mes.sh scaffold/micro-mes
-##sh build-aux/cc-mes.sh scaffold/tiny-mes
-# sh build-aux/cc-mes.sh scaffold/mini-mes
-
-sh build-aux/cc-mes.sh src/mes
-cp src/mes.mes-out src/mes
+compile src/mes
+link src/mes