mescc: Refactor type system: struct/enum fields: (name . <type>).
[mes.git] / build.sh
index b34aea23cd0bd65ab187bd454cecba8f6ac3c686..2e2525eaf386948517680134bc60c13abb05218b 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -1,35 +1,89 @@
 #! /bin/sh
 
-set -ex
+# Mes --- Maxwell Equations of Software
+# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+#
+# This file is part of Mes.
+#
+# 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
+# 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/>.
 
-HEX2=${HEX2-hex2}
-M1=${M1-M1}
+set -x
+# dash does not export foo=${foo-bar} for some values
+export CC CC32 GUILE MESCC MES_SEED
+export MES_ARENA MES_DEBUG
+export PREFIX DATADIR MODULEDIR
+export CPPFLAGS CFLAGS C32FLAGS MESCCFLAGS
+
+CC=${CC-$(command -v gcc)}
+CC32=${CC32-$(command -v i686-unknown-linux-gnu-gcc)}
+MESCC=${MESCC-$(command -v mescc)}
 MES_SEED=${MES_SEED-../mes-seed}
+GUILE=${GUILE-$(command -v guile)}
+MES_ARENA=${MES_ARENA-300000000}
+MES_DEBUG=${MES_DEBUG-2}
+
+PREFIX=${PREFIX-/usr/local}
+DATADIR=${DATADIR-$PREFIX/share/mes}
+MODULEDIR=${MODULEDIR-$DATADIR/module}
+set -e
+
+CPPFLAGS=${CPPFLAGS-"
+-D VERSION=\"$VERSION\"
+-D MODULEDIR=\"$MODULEDIR\"
+-D PREFIX=\"$PREFIX\"
+-I src
+-I lib
+-I include
+"}
+CFLAGS=${CFLAGS-"
+--std=gnu99
+-O0
+-g
+"}
+C32FLAGS=${C32FLAGS-"
+--std=gnu99
+-O0
+-fno-stack-protector
+-g
+-m32
+-nostdinc
+-nostdlib
+"}
+MESCCLAGS=${MESCCFLAGS-"
+"}
+M1FLAGS=${M1FLAGS-"
+--LittleEndian
+--Architecture=1
+"}
+HEX2FLAGS=${HEX2FLAGS-"
+--LittleEndian
+--Architecture=1
+--BaseAddress=0x1000000
+"}
+
+if [ -n "$GUILE" ]; then
+    sh build-aux/build-guile.sh
+fi
+
+if [ -n "$CC" ]; then
+    sh build-aux/build-cc.sh
+    cp src/mes.gcc-out src/mes
+fi
+
+if [ -n "$CC32" ]; then
+    sh build-aux/build-mlibc.sh
+    cp src/mes.mlibc-out src/mes
+fi
 
-$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
+sh build-aux/build-mes.sh