From c004e9a34fb026bb44d211ab98bb768e79900eef Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sat, 1 Dec 2018 08:50:46 +0100 Subject: [PATCH] build: Support gash. --- boot.sh | 335 ++++++++++++++++++++++++++++++++++++++------------- bootstrap.sh | 72 +++++++++-- check.sh | 12 +- 3 files changed, 320 insertions(+), 99 deletions(-) diff --git a/boot.sh b/boot.sh index c5c8960..ca8cef5 100755 --- a/boot.sh +++ b/boot.sh @@ -1,8 +1,11 @@ #! /bin/sh -set -ex +set -e + +if [ "$V" = 1 -o "$V" = 2 ]; then + set -x +fi -TCC=${TCC-./mes-tcc} if [ "$TCC" = ./mes-tcc ]; then PROGRAM_PREFIX=${PROGRAM_PREFIX-boot0-} elif [ "$TCC" = ./boot0-tcc ]; then @@ -18,7 +21,7 @@ fi unset C_INCLUDE_PATH LIBRARY_PATH PREFIX=${PREFIX-usr} mkdir -p $PREFIX -ABSPREFIX=$(cd $PREFIX && pwd) +ABSPREFIX=$(cd $PREFIX && pwd && (cd - 2>&1 >/dev/null)) # FIXME: Gash GUIX=${GUIX-$(command -v guix||:)} MES_PREFIX=${MES_PREFIX-../mes} ##MES_PREFIX=${MES_PREFIX-$(dirname $MESCC)/../share/mes} @@ -33,99 +36,263 @@ elif [ -x /lib/ld-linux.so.2 ]; then interpreter=/lib/ld-linux.so.2 fi interpreter=${interpreter-interpreter} -export interpreter +if [ "$(basename $SHELL)" = gash ]; then -# ./configure --cc='mes-tcc -static' --cpu=i386 -# ${TCC-tcc} -static -o tcc tcc.c -DTCC_TARGET_I386 -Wall -g -O2 -I. -DONE_SOURCE=yes + if [ "$PROGRAM_PREFIX" = "boot0-" ]; then + ./$TCC\ + -v\ + -static\ + -o ${PROGRAM_PREFIX}tcc\ + -D inline=\ + -D BOOTSTRAP=1\ + -D HAVE_FLOAT_STUB=1\ + -D CONFIG_TCCBOOT=1\ + -D CONFIG_USE_LIBGCC=1\ + -D TCC_MES_LIBC=1\ + -I .\ + -I $MES_PREFIX/include\ + -D TCC_TARGET_I386\ + -D CONFIG_TCCDIR=\"$PREFIX/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$PREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$ABSPREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$PREFIX/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$ABSPREFIX/lib/libc.a\"\ + -D ONE_SOURCE=yes\ + -D CONFIG_TCC_LIBTCC1=1\ + -D CONFIG_TCC_STATIC=1\ + -D TCC_TARGET_I386=1\ + -L .\ + -L $MES_SEED\ + tcc.c\ + -ltcc1 + elif [ "$PROGRAM_PREFIX" = "boot1-" ]; then + ./$TCC\ + -v\ + -static\ + -o ${PROGRAM_PREFIX}tcc\ + -D BOOTSTRAP=1\ + -D HAVE_BITFIELD=1\ + -D HAVE_FLOAT_STUB=1\ + -D CONFIG_TCCBOOT=1\ + -D CONFIG_USE_LIBGCC=1\ + -D TCC_MES_LIBC=1\ + -I .\ + -I $MES_PREFIX/include\ + -D TCC_TARGET_I386\ + -D CONFIG_TCCDIR=\"$PREFIX/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$PREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$ABSPREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$PREFIX/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$ABSPREFIX/lib/libc.a\"\ + -D ONE_SOURCE=yes\ + -D CONFIG_TCC_LIBTCC1=1\ + -D CONFIG_TCC_STATIC=1\ + -D TCC_TARGET_I386=1\ + -L .\ + -L $MES_SEED\ + tcc.c\ + -ltcc1 + elif [ "$PROGRAM_PREFIX" = "boot2-" ]; then + ./$TCC\ + -v\ + -static\ + -o ${PROGRAM_PREFIX}tcc\ + -D BOOTSTRAP=1\ + -D HAVE_BITFIELD=1\ + -D HAVE_FLOAT_STUB=1\ + -D HAVE_LONG_LONG=1\ + -D CONFIG_TCCBOOT=1\ + -D CONFIG_USE_LIBGCC=1\ + -D TCC_MES_LIBC=1\ + -I .\ + -I $MES_PREFIX/include\ + -D TCC_TARGET_I386\ + -D CONFIG_TCCDIR=\"$PREFIX/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$PREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$ABSPREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$PREFIX/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$ABSPREFIX/lib/libc.a\"\ + -D ONE_SOURCE=yes\ + -D CONFIG_TCC_LIBTCC1=1\ + -D CONFIG_TCC_STATIC=1\ + -D TCC_TARGET_I386=1\ + -L .\ + -L $MES_SEED\ + tcc.c\ + -ltcc1 + elif [ "$PROGRAM_PREFIX" = "boot3-" ]; then + ./$TCC\ + -v\ + -static\ + -o ${PROGRAM_PREFIX}tcc\ + -D BOOTSTRAP=1\ + -D HAVE_FLOAT=1\ + -D HAVE_BITFIELD=1\ + -D HAVE_LONG_LONG=1\ + -D CONFIG_TCCBOOT=1\ + -D CONFIG_USE_LIBGCC=1\ + -D TCC_MES_LIBC=1\ + -I .\ + -I $MES_PREFIX/include\ + -D TCC_TARGET_I386\ + -D CONFIG_TCCDIR=\"$PREFIX/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$PREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$ABSPREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$PREFIX/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$ABSPREFIX/lib/libc.a\"\ + -D ONE_SOURCE=yes\ + -D CONFIG_TCC_LIBTCC1=1\ + -D CONFIG_TCC_STATIC=1\ + -D TCC_TARGET_I386=1\ + -L .\ + -L $MES_SEED\ + tcc.c + elif [ "$PROGRAM_PREFIX" = "boot4-" ]; then + ./$TCC\ + -v\ + -static\ + -o ${PROGRAM_PREFIX}tcc\ + -D BOOTSTRAP=1\ + -D HAVE_FLOAT=1\ + -D HAVE_BITFIELD=1\ + -D HAVE_LONG_LONG=1\ + -D CONFIG_TCCBOOT=1\ + -D CONFIG_USE_LIBGCC=1\ + -D TCC_MES_LIBC=1\ + -I .\ + -I $MES_PREFIX/include\ + -D TCC_TARGET_I386\ + -D CONFIG_TCCDIR=\"$PREFIX/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$PREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$ABSPREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$PREFIX/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$ABSPREFIX/lib/libc.a\"\ + -D ONE_SOURCE=yes\ + -D CONFIG_TCC_LIBTCC1=1\ + -D CONFIG_TCC_STATIC=1\ + -D TCC_TARGET_I386=1\ + -L .\ + -L $MES_SEED\ + tcc.c + fi -if [ "$PROGRAM_PREFIX" = "boot0-" ]; then - BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" --D inline= --D BOOTSTRAP=1 --D HAVE_FLOAT_STUB=1 --D CONFIG_TCCBOOT=1 --D CONFIG_USE_LIBGCC=1 --D TCC_MES_LIBC=1 -"} - LIBTCC1=-ltcc1 -elif [ "$PROGRAM_PREFIX" = "boot1-" ]; then - BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" --D BOOTSTRAP=1 --D HAVE_BITFIELD=1 --D HAVE_FLOAT_STUB=1 --D CONFIG_TCCBOOT=1 --D CONFIG_USE_LIBGCC=1 --D TCC_MES_LIBC=1 -"} - LIBTCC1=-ltcc1 -elif [ "$PROGRAM_PREFIX" = "boot2-" ]; then - BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" --D BOOTSTRAP=1 --D HAVE_BITFIELD=1 --D HAVE_FLOAT_STUB=1 --D HAVE_LONG_LONG=1 --D CONFIG_TCCBOOT=1 --D CONFIG_USE_LIBGCC=1 --D TCC_MES_LIBC=1 -"} - LIBTCC1=-ltcc1 -elif [ "$PROGRAM_PREFIX" = "boot3-" ]; then - BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" --D BOOTSTRAP=1 --D HAVE_FLOAT=1 --D HAVE_BITFIELD=1 --D HAVE_LONG_LONG=1 --D CONFIG_TCCBOOT=1 --D CONFIG_USE_LIBGCC=1 --D TCC_MES_LIBC=1 -"} -elif [ "$PROGRAM_PREFIX" = "boot4-" ]; then - BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" --D BOOTSTRAP=1 --D HAVE_FLOAT=1 --D HAVE_BITFIELD=1 --D HAVE_LONG_LONG=1 --D CONFIG_TCCBOOT=1 --D CONFIG_USE_LIBGCC=1 --D TCC_MES_LIBC=1 -"} +else + + if [ "$PROGRAM_PREFIX" = "boot0-" ]; then + BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" + -D inline= + -D BOOTSTRAP=1 + -D HAVE_FLOAT_STUB=1 + -D CONFIG_TCCBOOT=1 + -D CONFIG_USE_LIBGCC=1 + -D TCC_MES_LIBC=1 + "} + LIBTCC1=-ltcc1 + elif [ "$PROGRAM_PREFIX" = "boot1-" ]; then + BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" + -D BOOTSTRAP=1 + -D HAVE_BITFIELD=1 + -D HAVE_FLOAT_STUB=1 + -D CONFIG_TCCBOOT=1 + -D CONFIG_USE_LIBGCC=1 + -D TCC_MES_LIBC=1 + "} + LIBTCC1=-ltcc1 + elif [ "$PROGRAM_PREFIX" = "boot2-" ]; then + BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" + -D BOOTSTRAP=1 + -D HAVE_BITFIELD=1 + -D HAVE_FLOAT_STUB=1 + -D HAVE_LONG_LONG=1 + -D CONFIG_TCCBOOT=1 + -D CONFIG_USE_LIBGCC=1 + -D TCC_MES_LIBC=1 + "} + LIBTCC1=-ltcc1 + elif [ "$PROGRAM_PREFIX" = "boot3-" ]; then + BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" + -D BOOTSTRAP=1 + -D HAVE_FLOAT=1 + -D HAVE_BITFIELD=1 + -D HAVE_LONG_LONG=1 + -D CONFIG_TCCBOOT=1 + -D CONFIG_USE_LIBGCC=1 + -D TCC_MES_LIBC=1 + "} + elif [ "$PROGRAM_PREFIX" = "boot4-" ]; then + BOOT_CPPFLAGS=${BOOT_CPPFLAGS-" + -D BOOTSTRAP=1 + -D HAVE_FLOAT=1 + -D HAVE_BITFIELD=1 + -D HAVE_LONG_LONG=1 + -D CONFIG_TCCBOOT=1 + -D CONFIG_USE_LIBGCC=1 + -D TCC_MES_LIBC=1 + "} + fi + + echo $TCC\ + -v\ + -static\ + -o ${PROGRAM_PREFIX}tcc\ + $BOOT_CPPFLAGS\ + -I .\ + -I $MES_PREFIX/include\ + -D TCC_TARGET_I386\ + -D CONFIG_TCCDIR=\"$PREFIX/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$PREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$ABSPREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$PREFIX/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$ABSPREFIX/lib/libc.a\"\ + -D ONE_SOURCE=yes\ + -D CONFIG_TCC_LIBTCC1=1\ + -D CONFIG_TCC_STATIC=1\ + -D TCC_TARGET_I386=1\ + -L .\ + -L $MES_SEED\ + tcc.c\ + $LIBTCC1 + + ./$TCC\ + -v\ + -static\ + -o ${PROGRAM_PREFIX}tcc\ + $BOOT_CPPFLAGS\ + -I .\ + -I $MES_PREFIX/include\ + -D TCC_TARGET_I386\ + -D CONFIG_TCCDIR=\"$PREFIX/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$PREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$ABSPREFIX/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$PREFIX/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$ABSPREFIX/lib/libc.a\"\ + -D ONE_SOURCE=yes\ + -D CONFIG_TCC_LIBTCC1=1\ + -D CONFIG_TCC_STATIC=1\ + -D TCC_TARGET_I386=1\ + -L .\ + -L $MES_SEED\ + tcc.c\ + $LIBTCC1 fi -$TCC\ - -v\ - -static\ - -o ${PROGRAM_PREFIX}tcc\ - $BOOT_CPPFLAGS\ - -I .\ - -I $MES_PREFIX/include\ - -D TCC_TARGET_I386\ - -D 'CONFIG_TCCDIR="'$PREFIX'/lib/tcc"'\ - -D 'CONFIG_TCC_CRTPREFIX="'$PREFIX'/lib:{B}/lib:."'\ - -D 'CONFIG_TCC_ELFINTERP="'$interpreter'"'\ - -D 'CONFIG_TCC_LIBPATHS="'$ABSPREFIX'/lib:{B}/lib:."'\ - -D 'CONFIG_TCC_SYSINCLUDEPATHS="'$MES_PREFIX'/include:'$PREFIX'/include:{B}/include"'\ - -D 'TCC_LIBGCC="'$ABSPREFIX'/lib/libc.a"'\ - -D ONE_SOURCE=yes\ - -D CONFIG_TCC_LIBTCC1=1\ - -D CONFIG_TCC_STATIC=1\ - -D TCC_TARGET_I386=1\ - -L .\ - -L $MES_SEED\ - tcc.c\ - $LIBTCC1 - for i in 1 i n; do rm -f crt$i.o; ./${PROGRAM_PREFIX}tcc -c $MES_PREFIX/lib/linux/x86-mes-gcc/crt$i.c done -# rm -f libc.a -# ./${PROGRAM_PREFIX}tcc -c -I $MES_PREFIX/include -I $MES_PREFIX/lib $MES_PREFIX/lib/libc+gnu.c -# ./${PROGRAM_PREFIX}tcc -ar rc libc.a libc+gnu.o - rm -f libtcc1.a ./${PROGRAM_PREFIX}tcc -c -g -D TCC_TARGET_I386=1 -o libtcc1.o lib/libtcc1.c ./${PROGRAM_PREFIX}tcc -ar rc libtcc1.a libtcc1.o mkdir -p $PREFIX/lib/tcc +cp libtcc1.a $PREFIX/lib/tcc cp -f libtcc1.a $PREFIX/lib/tcc +echo "boot.sh: done" diff --git a/bootstrap.sh b/bootstrap.sh index e78d39b..f4b35da 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,12 +1,66 @@ #! /bin/sh -set -ex +set -e -export PREFIX=usr -export HEX2=../mescc-tools/bin/hex2 -export M1=../mescc-tools/bin/M1 -export MESCC=../mes/guile/mescc.scm -export MES_PREFIX=../mes -export MES_SEED=../mes-seed +if [ "$V" = 1 -o "$V" = 2 ]; then + set -x +fi -sh build.sh -sh check.sh +prefix=${prefix-/usr/local} +MES_PREFIX=${MES_PREFIX-mes} +MES_SEED=${MES_SEED-../mes-seed} +interpreter=${interpreter-interpreter} + +cp $MES_SEED/linux/x86-mes-gcc/crt1.o crt1.o +cp $MES_SEED/linux/x86-mes-gcc/crti.o crti.o +cp $MES_SEED/linux/x86-mes-gcc/crtn.o crtn.o + +mescc=$(command -v mescc) + +sh $mescc --help + +[ "$V" = 1 ] && echo "sh $mescc -S ... tcc.c" +sh $mescc\ + -v\ + -S\ + -o tcc.S\ + -D ONE_SOURCE=1\ + -I .\ + -I $MES_PREFIX/lib\ + -I $MES_PREFIX/include\ + -D inline=\ + -D CONFIG_TCCDIR=\"$prefix/lib/tcc\"\ + -D CONFIG_TCC_CRTPREFIX=\"$prefix/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_ELFINTERP=\"$interpreter\"\ + -D CONFIG_TCC_LIBPATHS=\"$prefix/lib:"{B}"/lib:.\"\ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"$MES_PREFIX/include:$prefix/include:"{B}"/include\"\ + -D TCC_LIBGCC=\"$prefix/lib/libc.a\"\ + -D BOOTSTRAP=1\ + -D CONFIG_TCCBOOT=1\ + -D CONFIG_TCC_STATIC=1\ + -D CONFIG_USE_LIBGCC=1\ + -D TCC_MES_LIBC=1\ + -D TCC_TARGET_I386=1\ + tcc.c + +sh $mescc -v -g -o mes-tcc -L $MES_SEED -l c+tcc tcc.S $MES_SEED/x86-$MES_PREFIX/libc+tcc.o + +rm -f libc.a +cp -f $MES_SEED/x86-mes-gcc/libc+gnu.o . +./mes-tcc -ar rc libc.a libc+gnu.o + +rm -f libtcc1.a +cp -f $MES_SEED/x86-mes-gcc/libtcc1.o . +./mes-tcc -ar rc libtcc1.a libtcc1.o + +if [ "$(basename $SHELL)" = gash ]; then + echo "bootstrap.sh: run boot.sh sequence manually" +else + TCC=./mes-tcc sh boot.sh + TCC=./boot0-tcc sh boot.sh + TCC=./boot1-tcc sh boot.sh + TCC=./boot2-tcc sh boot.sh + TCC=./boot3-tcc sh boot.sh + cmp boot3-tcc boot4-tcc + cp -f boot4-tcc tcc + echo "bootstrap.sh: done" +fi diff --git a/check.sh b/check.sh index 83e830c..5c57888 100755 --- a/check.sh +++ b/check.sh @@ -1,14 +1,14 @@ #! /bin/sh ###MESCC=${MESCC-mescc} -MES_ARENA=70000000 -MES_MAX_ARENA=70000000 -export MES_ARENA MES_MAX_ARENA -MES=guile -MESCC=${MESCC-../mes/pre-inst-env mescc} +MES_ARENA=${MES_ARENA-100000000} +MES_MAX_ARENA=${MES_MAX_ARENA-100000000} +MES_STACK=${MES_STACK-10000000} +export MES_ARENA MES_MAX_ARENA MES_STACK +MES=${MES-mes} +MESCC=${MESCC-mescc} MES_PREFIX=${MES_PREFIX-../mes} -MES_PREFIX=${MES_PREFIX-${MESCC%/*}} tests=" t