build: Support gash.

This commit is contained in:
Jan Nieuwenhuizen 2018-12-01 08:50:46 +01:00
parent 62c0ee57cd
commit c004e9a34f
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
3 changed files with 320 additions and 99 deletions

335
boot.sh
View File

@ -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"

View File

@ -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

View File

@ -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