build: Add support for ARM.

* doit,
bootstrap.sh,
build.sh,
cc.sh: Update and add support for ARM.
* build-x86.sh: Likewise.  Rename to ...
* build-32.sh: ... this.
.gitignore: Remove test output.
This commit is contained in:
Jan (janneke) Nieuwenhuizen 2020-08-23 08:37:35 +02:00
parent b3ee5ea9de
commit 52a29ab6f5
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
14 changed files with 1262 additions and 630 deletions

1
.gitignore vendored
View File

@ -54,3 +54,4 @@ tests/libtcc_test
tests/vla_test
tests/hello
tests/tests2/fred.txt
tests/tests2/*.1

306
boot.sh
View File

@ -6,26 +6,52 @@ if [ "$V" = 1 -o "$V" = 2 ]; then
set -x
fi
arch=${arch-$(uname -m)}
case $arch in
arm*|aarch*)
cpu=arm
mes_cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
;;
*)
cpu=x86
mes_cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
;;
esac
if [ "$TCC" = ./mes-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot0-}
program_prefix=${program_prefix-boot0-}
elif [ "$TCC" = ./boot0-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot1-}
program_prefix=${program_prefix-boot1-}
elif [ "$TCC" = ./boot1-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot2-}
program_prefix=${program_prefix-boot2-}
elif [ "$TCC" = ./boot2-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot3-}
program_prefix=${program_prefix-boot3-}
elif [ "$TCC" = ./boot3-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot4-}
program_prefix=${program_prefix-boot4-}
elif [ "$TCC" = ./boot4-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot5-}
program_prefix=${program_prefix-boot5-}
elif [ "$TCC" = ./boot5-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot6-}
program_prefix=${program_prefix-boot6-}
elif [ "$TCC" = ./boot6-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot7-}
program_prefix=${program_prefix-boot7-}
elif [ "$TCC" = ./boot7-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot8-}
program_prefix=${program_prefix-boot8-}
elif [ "$TCC" = ./boot8-tcc ]; then
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot9-}
program_prefix=${program_prefix-boot9-}
elif [ "$TCC" = ./gcc-tcc ]; then
program_prefix=${program_prefix-boot0-}
elif [ "$TCC" = ${cross_prefix}gcc ]; then
program_prefix=${program_prefix-boot0-}
elif [ "$TCC" = ./${cross_prefix}tcc ]; then
program_prefix=${program_prefix-boot0-}
else
program_prefix=${program_prefix-foo-}
fi
unset C_INCLUDE_PATH LIBRARY_PATH
@ -34,131 +60,175 @@ mkdir -p $prefix
absprefix=$(cd $prefix && pwd)
GUIX=${GUIX-$(command -v guix||:)}
MES_PREFIX=${MES_PREFIX-mes}
MES_LIB=${MES_LIB-$MES_PREFIX/lib}
C_INCLUDE_PATH=${C_INCLUDE_PATH-$MES_PREFIX/include}
LIBRARY_PATH=${LIBRARY_PATH-..$MES_PREFIX/lib}
interpreter=/lib/mes-loader
if [ -z "$interpreter" -a -n "$GUIX" ]; then
interpreter=$($GUIX environment --ad-hoc patchelf -- patchelf --print-interpreter $(guix build --system=i686-linux hello)/bin/hello)
elif [ -x /lib/ld-linux.so.2 ]; then
# legacy non-GuixSD support
interpreter=/lib/ld-linux.so.2
fi
interpreter=${interpreter-interpreter}
if [ "$PROGRAM_PREFIX" = "boot0-" ]; then
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
-D inline=
if [ "$program_prefix" = "boot0-" ]; then
BOOT_CPPFLAGS_TCC="
-D BOOTSTRAP=1
-D HAVE_FLOAT_STUB=1
-D CONFIG_TCCBOOT=1
-D CONFIG_USE_LIBGCC=1
-D TCC_MES_LIBC=1
"}
LIBTCC1=-ltcc1
LIBTCC1=
elif [ "$PROGRAM_PREFIX" = "boot1-" ]; then
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
"
if $have_long_long; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_LONG_LONG_STUB=1"
fi
elif [ "$program_prefix" = "boot1-" ]; then
BOOT_CPPFLAGS_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
"}
LIBTCC1=-ltcc1
LIBTCC1=
elif [ "$PROGRAM_PREFIX" = "boot2-" ]; then
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
"
if $have_long_long; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_LONG_LONG=1"
fi
elif [ "$program_prefix" = "boot2-" ]; then
BOOT_CPPFLAGS_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
"}
LIBTCC1=-ltcc1
LIBTCC1=
elif [ "$PROGRAM_PREFIX" = "boot3-" ]; then
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
"
if $have_float; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_FLOAT_STUB=1"
fi
if $have_long_long; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_LONG_LONG=1"
fi
elif [ "$program_prefix" = "boot3-" ]; then
BOOT_CPPFLAGS_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
"}
LIBTCC1=-ltcc1
LIBTCC1=
"
if $have_float; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_FLOAT=1"
fi
if $have_long_long; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_LONG_LONG=1"
fi
else
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
BOOT_CPPFLAGS_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
"}
LIBTCC1=-ltcc1
LIBTCC1=
"
if $have_float; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_FLOAT=1"
fi
if $have_long_long; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_LONG_LONG=1"
fi
fi
echo $TCC\
-g\
-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 .\
tcc.c\
$LIBTCC1
if $have_setjmp; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_SETJMP=1"
fi
./$TCC\
-g\
-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 .\
tcc.c\
$LIBTCC1
if test "$mes_cpu" = x86; then
CPP_TARGET_FLAG="-D TCC_TARGET_I386=1"
elif test "$mes_cpu" = arm; then
CPP_TARGET_FLAG="-D TCC_TARGET_ARM=1 -D TCC_ARM_VFP=1 -D CONFIG_TCC_LIBTCC1_MES=1"
elif test "$mes_cpu" = x86_64; then
BOOT_CPPFLAGS_TCC="$BOOT_CPPFLAGS_TCC -D HAVE_SETJMP=1"
CPP_TARGET_FLAG="-D TCC_TARGET_X86_64=1"
else
echo "cpu not supported: $mes_cpu"
fi
for i in 1 i n; do
rm -f crt$i.o;
./${PROGRAM_PREFIX}tcc -c crt$i.c
done
CPPFLAGS_TCC="
-I .
-I $MES_PREFIX/lib
-I $MES_PREFIX/include
$CPP_TARGET_FLAG
-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 TCC_LIBTCC1_MES=\"libtcc1-mes.a\"
-D CONFIG_TCCBOOT=1
-D CONFIG_TCC_STATIC=1
-D CONFIG_USE_LIBGCC=1
-D TCC_MES_LIBC=1
"
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
cp -f libtcc1.a $prefix/lib/tcc
if $ONE_SOURCE; then
CPPFLAGS_TCC="$CPPFLAGS_TCC -D ONE_SOURCE=1"
fi
if $ONE_SOURCE; then
files="tcc.c"
else
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC tccpp.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC tccgen.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC tccelf.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC tccrun.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC ${tcc_cpu}-gen.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC ${tcc_cpu}-link.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC ${tcc_cpu}-asm.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC tccasm.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC libtcc.c
$TCC -g -v -c $BOOT_CPPFLAGS_TCC $CPPFLAGS_TCC tcc.c
files="
tccpp.o
tccgen.o
tccelf.o
tccrun.o
${tcc_cpu}-gen.o
${tcc_cpu}-link.o
${tcc_cpu}-asm.o
tccasm.o
libtcc.o
tcc.o
"
fi
echo $TCC \
-g \
-v \
-static \
-o ${program_prefix}tcc \
$BOOT_CPPFLAGS_TCC \
$CPPFLAGS_TCC \
-L . \
$files
$TCC \
-g \
-v \
-static \
-o ${program_prefix}tcc \
$BOOT_CPPFLAGS_TCC \
$CPPFLAGS_TCC \
-L . \
$files
if $REBUILD_LIBC; then
for i in 1 i n; do
cp -f $MES_LIB/crt$i.c .
./${program_prefix}tcc -c -g -o ${program_prefix}crt$i.o crt$i.c
cp -f ${program_prefix}crt$i.o crt$i.o
done
rm -f libtcc1.a
./${program_prefix}tcc -c -g $CPP_TARGET_FLAG -D HAVE_FLOAT=1 -o libtcc1.o $MES_LIB/libtcc1.c
./${program_prefix}tcc -ar rc libtcc1.a libtcc1.o
if [ $mes_cpu = arm ]; then
./${program_prefix}tcc -c -g $BOOT_CPPFLAGS lib/armeabi.c
./${program_prefix}tcc -c -g $CPP_TARGET_FLAG $BOOT_CPPFLAGS_TCC -o libtcc1-tcc.o lib/libtcc1.c
./${program_prefix}tcc -ar rc libtcc1-tcc.a libtcc1-tcc.o armeabi.o
# BOOTSTRAP: => Bus error
##./${program_prefix}tcc -c -g $CPP_TARGET_FLAG $BOOT_CPPFLAGS_TCC -o libtcc1-mes.o $MES_LIB/libtcc1.c
##./${program_prefix}tcc -c -g $CPP_TARGET_FLAG -D BOOTSTRAP=1 -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 -o libtcc1-mes.o $MES_LIB/libtcc1.c
./${program_prefix}tcc -c -g $CPP_TARGET_FLAG -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 -o libtcc1-mes.o $MES_LIB/libtcc1.c
./${program_prefix}tcc -ar rc libtcc1-mes.a libtcc1-mes.o armeabi.o
./${program_prefix}tcc -c -g $CPP_TARGET_FLAG $BOOT_CPPFLAGS_TCC -o libtcc1.o lib/libtcc1.c
./${program_prefix}tcc -ar rc libtcc1.a libtcc1.o armeabi.o
cp -f libtcc1-mes.a $prefix/lib/tcc
fi
cp -f libtcc1.a $prefix/lib/tcc
fi
echo "boot.sh: done"

View File

@ -5,86 +5,41 @@ if test "$V" = 1 -o "$V" = 2; then
set -x
fi
prefix=${prefix-/usr/local}
MES_PREFIX=${MES_PREFIX-mes}
MES_STACK=${MES_STACK-10000000}
export MES_STACK
interpreter=${interpreter-interpreter}
mescc=${mescc-$(command -v mescc)}
MESCC=${MESCC-$(command -v mescc)}
if test "$V" = 2; then
sh $mescc --help
sh $MESCC --help
fi
CPPFLAGS="
-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_TCC_LIBTCC1=1
-D CONFIG_USE_LIBGCC=1
-D TCC_MES_LIBC=1
-D TCC_TARGET_I386=1
"
if test -n "$ONE_SOURCE"; then
objects="tcc.o"
CPPFLAGS="$CPPFLAGS -D ONE_SOURCE=1"
else
objects="tcc.o tccpp.o tccgen.o tccelf.o tccrun.o i386-gen.o i386-link.o i386-asm.o tccasm.o libtcc.o"
fi
CFLAGS=
if test "$V" = 1; then
CFLAGS="$CFLAGS -v"
elif test "$V" = 2; then
CFLAGS="$CFLAGS -vv"
fi
for o in $objects; do
i=$(basename $o .o)
[ -z "$V" ] && echo " CC $i.c"
sh $mescc\
-c\
-o $o\
$CPPFLAGS\
$CFLAGS\
$i.c
done
[ -z "$V" ] && echo " CCLD mes-tcc"
sh $mescc $verbose -o mes-tcc $objects -L mes-source/mescc-lib -L mes-source/lib -l c+tcc
CC=${CC-mescc}
host=${host-$($CC -dumpmachine 2>/dev/null)}
host=${host-$($MESCC -dumpmachine 2>/dev/null)}
if test -z "$host$host_type"; then
mes_cpu=${arch-$(get_machine || uname -m)}
else
mes_cpu=${host%%-*}
fi
if test "$mes_cpu" = i386\
|| test "$mes_cpu" = i486\
|| test "$mes_cpu" = i586\
|| test "$mes_cpu" = i686; then
mes_cpu=x86
fi
if test "$mes_cpu" = armv4\
|| test "$arch" = armv7l; then
mes_cpu=arm
fi
if test "$mes_cpu" = amd64; then
mes_cpu=x86_64
fi
case "$mes_cpu" in
i386|i486|i586|i686|x86)
mes_cpu=x86
tcc_cpu=i386
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-true}
;;
armv4|armv7l|arm)
mes_cpu=arm
tcc_cpu=arm
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-false}
;;
amd64)
tcc_cpu=x86_64
mes_cpu=x86_64
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-true}
;;
esac
case "$host" in
*linux-gnu|*linux)
mes_kernel=linux;;
@ -93,59 +48,155 @@ case "$host" in
*)
mes_kernel=linux;;
esac
export mes_cpu
export tcc_cpu
export have_float
export have_long_long
export have_setjmp
prefix=${prefix-/usr/local}
MES_PREFIX=${MES_PREFIX-mes}
MES_STACK=${MES_STACK-10000000}
export MES_STACK
interpreter=${interpreter-/mes/loader}
MES_LIB=${MES_LIB-$MES_PREFIX/lib}
MES_SOURCE=${MES_SOURCE-mes-source}
#MES_LIB=$MES_SOURCE/gcc-lib/${mes_cpu}-mes
export MES_SOURCE
export MES_PREFIX
export MES_LIB
ONE_SOURCE=${ONE_SOURCE-false}
export ONE_SOURCE
CPPFLAGS="
-I $MES_PREFIX/lib
-I $MES_PREFIX/include
-D BOOTSTRAP=1
"
if test "$mes_cpu" = x86; then
CPP_TARGET_FLAG=" -D TCC_TARGET_I386=1"
elif test "$mes_cpu" = arm; then
CPP_TARGET_FLAG="-D TCC_TARGET_ARM=1 -D TCC_ARM_VFP=1 -D CONFIG_TCC_LIBTCC1_MES=1"
elif test "$mes_cpu" = x86_64; then
CPP_TARGET_FLAG=" -D TCC_TARGET_X86_64=1"
else
echo "cpu not supported: $mes_cpu"
fi
CPPFLAGS_TCC="$CPPFLAGS
-I .
$CPP_TARGET_FLAG
-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 TCC_LIBTCC1_MES=\"libtcc1-mes.a\"
-D CONFIG_TCCBOOT=1
-D CONFIG_TCC_STATIC=1
-D CONFIG_USE_LIBGCC=1
-D TCC_MES_LIBC=1
"
if $ONE_SOURCE; then
files="tcc.s"
CPPFLAGS_TCC="$CPPFLAGS_TCC -D ONE_SOURCE=1"
else
files="tccpp.s tccgen.s tccelf.s tccrun.s ${tcc_cpu}-gen.s ${tcc_cpu}-link.s ${tcc_cpu}-asm.s tccasm.s libtcc.s tcc.s"
fi
CFLAGS=
if test "$V" = 1; then
CFLAGS="$CFLAGS -v"
elif test "$V" = 2; then
CFLAGS="$CFLAGS -v -v"
fi
for f in $files; do
i=$(basename $f .s)
[ -z "$V" ] && echo " CC $i.c"
sh $MESCC \
-S \
-o $f \
$CPPFLAGS_TCC \
$CFLAGS \
$i.c
done
[ -z "$V" ] && echo " CCLD mes-tcc"
sh $MESCC $verbose -o mes-tcc -L $MES_SOURCE/mescc-lib -L $MES_SOURCE/lib $files -l c+tcc
CC="./mes-tcc"
AR="./mes-tcc -ar"
CPPFLAGS="-I $MES_PREFIX/include -I $MES_PREFIX/include/$mes_kernel/$mes_cpu"
CPPFLAGS="
-I $MES_PREFIX/include
-I $MES_PREFIX/include/$mes_kernel/$mes_cpu
-I $MES_PREFIX/lib
-D BOOTSTRAP=1
"
CFLAGS=
REBUILD_LIBC=${REBUILD_LIBC-t}
REBUILD_LIBC=${REBUILD_LIBC-true}
export REBUILD_LIBC
if [ -n "$REBUILD_LIBC" ]; then
mkdir -p $prefix/lib/tcc
if $REBUILD_LIBC; then
for i in 1 i n; do
rm -f crt$i.o;
cp -f $MES_PREFIX/lib/crt$i.c .
##cp -f $MES_PREFIX/gcc-lib/x86-mes/crt$i.c .
cp -f $MES_LIB/crt$i.c .
$CC $CPPFLAGS $CFLAGS -static -nostdlib -nostdinc -c crt$i.c
done
rm -f libc.a
cp -f ${MES_PREFIX}/lib/libc+gnu.c libc.c
##cp -f ${MES_PREFIX}/gcc-lib/x86-mes/libc+gnu.c libc.c
cp -f $MES_LIB/libc+gnu.c libc.c
$CC -c $CPPFLAGS $CFLAGS libc.c
$AR cr libc.a libc.o
rm -f libtcc1.a
cp -f ${MES_PREFIX}/lib/libtcc1.c .
##cp -f ${MES_PREFIX}/gcc-lib/x86-mes/libtcc1.c .
cp -f $MES_LIB/libtcc1.c .
$CC -c $CPPFLAGS $CFLAGS libtcc1.c
$AR cr libtcc1.a libtcc1.o
if [ $mes_cpu = arm ]; then
$CC -c $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG lib/armeabi.c
$CC -c $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG lib/libtcc1.c
$AR cr libtcc1.a libtcc1.o armeabi.o
$CC -c $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG -o libtcc1-mes.o $MES_LIB/libtcc1.c
# $AR cr libtcc1-mes.a libtcc1-mes.o armeabi.o
$AR cr libtcc1-mes.a libtcc1-mes.o
cp -f libtcc1-mes.a $prefix/lib/tcc
fi
rm -f libgetopt.a
cp -f ${MES_PREFIX}/lib/libgetopt.c .
##cp -f ${MES_PREFIX}/gcc-lib/x86-mes/libgetopt.c .
cp -f $MES_LIB/libgetopt.c .
$CC -c $CPPFLAGS $CFLAGS libgetopt.c
$AR cr libgetopt.a libgetopt.o
else
cp -f $MES_PREFIX/lib/crt1.o .
cp -f $MES_PREFIX/lib/crti.o .
cp -f $MES_PREFIX/lib/crtn.o .
cp -f $MES_PREFIX/lib/libc+gnu.a .
cp -f $MES_PREFIX/lib/libtcc1.a .
cp -f $MES_LIB/crt1.o .
cp -f $MES_LIB/crti.o .
cp -f $MES_LIB/crtn.o .
cp -f $MES_LIB/libc+gnu.a .
cp -f $MES_LIB/libtcc1.a .
cp -f $MES_LIB/libgetopt.a .
## cp -f $MES_PREFIX/gcc-lib/libc+gnu.a libc.a
## cp -f $MES_PREFIX/gcc-lib/libtcc1.a .
## cp -f $MES_PREFIX/gcc-lib/crt1.o .
## cp -f $MES_PREFIX/gcc-lib/crti.o .
## cp -f $MES_PREFIX/gcc-lib/crtn.o .
if [ $mes_cpu = arm ]; then
$CC -c $CPPFLAGS $CFLAGS $MES_LIB/libtcc1.c
$CC -c $CPPFLAGS $CFLAGS lib/armeabi.c
$AR cr libtcc1.a libtcc1.o armeabi.o
fi
fi
mkdir -p $prefix/lib/tcc
cp -f libc.a $prefix/lib
cp -f libtcc1.a $prefix/lib/tcc
cp -f libgetopt.a $prefix/lib
export mes_cpu
export prefix
export CPPFLAGS
@ -156,7 +207,9 @@ TCC=./boot2-tcc sh boot.sh
TCC=./boot3-tcc sh boot.sh
TCC=./boot4-tcc sh boot.sh
TCC=./boot5-tcc sh boot.sh
cmp boot5-tcc boot6-tcc
if cmp --help; then
cmp boot5-tcc boot6-tcc
fi
cp -f boot5-tcc tcc
CC=./tcc
@ -164,21 +217,36 @@ AR='./tcc -ar'
if true; then
for i in 1 i n; do
rm -f crt$i.o;
cp -f $MES_PREFIX/lib/crt$i.c .
##cp -f $MES_PREFIX/gcc-lib/x86-mes/crt$i.c .
$CC $CPPFLAGS $CFLAGS -static -nostdlib -nostdinc -c crt$i.c
cp -f $MES_LIB/crt$i.c .
$CC -c -g $CPPFLAGS $CFLAGS -static -nostdlib -nostdinc crt$i.c
done
rm -f libc.a
$CC -c $CPPFLAGS $CFLAGS libc.c
$CC -c -g $CPPFLAGS $CFLAGS libc.c
$AR cr libc.a libc.o
rm -f libtcc1.a
$CC -c $CPPFLAGS $CFLAGS libtcc1.c
$CC -c -g $CPPFLAGS $CPP_TARGET_FLAG $CFLAGS lib/libtcc1.c
$AR cr libtcc1.a libtcc1.o
if [ $mes_cpu = arm ]; then
$CC -c -g $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG lib/armeabi.c
$CC -c -g $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG -o libtcc1-tcc.o lib/libtcc1.c
$AR rc libtcc1-tcc.a libtcc1-tcc.o armeabi.o
$CC -c -g $CPPFLAGS $CFLAGS -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 libtcc1-mes.o $MES_LIB/libtcc1.c
$AR cr libtcc1-mes.a libtcc1-mes.o armeabi.o
$CC -c -g $CPP_TARGET_FLAG $CFLAGS -o libtcc1.o lib/libtcc1.c
$AR cr libtcc1.a libtcc1.o armeabi.o
cp -f libtcc1-tcc.a $prefix/lib/tcc
cp -f libtcc1-mes.a $prefix/lib/tcc
fi
rm -f libgetopt.a
$CC -c $CPPFLAGS $CFLAGS libgetopt.c
$CC -c -g $CPPFLAGS $CFLAGS libgetopt.c
$AR cr libgetopt.a libgetopt.o
cp -f libc.a $prefix/lib

293
build-32.sh Executable file
View File

@ -0,0 +1,293 @@
#! /bin/sh
set -e
if test "$V" = 1 -o "$V" = 2; then
set -x
fi
arch=$(uname -m)
case $arch in
arm*|aarch)
cpu=arm
mes_cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
have_float=${have_float-false}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-false}
;;
*)
cpu=x86
mes_cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-true}
;;
esac
case "$host" in
*linux-gnu|*linux)
mes_kernel=linux;;
*gnu)
mes_kernel=gnu;;
*)
mes_kernel=linux;;
esac
export cpu
export cross_prefix
export mes_cpu
export tcc_cpu
export triplet
export have_float
export have_long_long
export have_setjmp
prefix=${prefix-usr}
export prefix
MES_PREFIX=${MES_PREFIX-mes-source}
MES_SOURCE=${MES_SOURCE-mes-source}
MES_LIB=${MES_LIB-$MES_PREFIX/lib}
MES_LIB=$MES_SOURCE/gcc-lib/${mes_cpu}-mes
ONE_SOURCE=${ONE_SOURCE-false}
export V
export MESCC
export MES_DEBUG
export MES_PREFIX
export MES_LIB
export MES_SOURCE
export ONE_SOURCE
export REBUILD_LIBC
CC=${CC-${cross_prefix}gcc}
CPPFLAGS="
-I $MES_PREFIX/include
-I $MES_PREFIX/include/$mes_kernel/$mes_cpu
-I $MES_PREFIX/lib
-D BOOTSTRAP=1
"
CFLAGS="
-fpack-struct
-nostdinc
-nostdlib
-fno-builtin
"
if test "$mes_cpu" = x86; then
CPP_TARGET_FLAG="-D TCC_TARGET_I386=1"
elif test "$mes_cpu" = arm; then
CFLAGS="$CFLAGS -marm"
CPP_TARGET_FLAG="-D TCC_TARGET_ARM=1 -D TCC_ARM_VFP=1 -D CONFIG_TCC_LIBTCC1_MES=1"
elif test "$mes_cpu" = x86_64; then
CPP_TARGET_FLAG="-D TCC_TARGET_X86_64=1"
else
echo "cpu not supported: $mes_cpu"
fi
rm -f mes
ln -sf $MES_PREFIX mes
rm -f ${cross_prefix}tcc
unset C_INCLUDE_PATH LIBRARY_PATH
$CC -c $CPPFLAGS $CFLAGS $MES_PREFIX/lib/linux/$mes_cpu-mes-gcc/crt1.c
$CC -c $CPPFLAGS $CFLAGS $MES_PREFIX/lib/linux/$mes_cpu-mes-gcc/crti.c
$CC -c $CPPFLAGS $CFLAGS $MES_PREFIX/lib/linux/$mes_cpu-mes-gcc/crtn.c
cp $MES_LIB/libc+tcc.a .
cp $MES_LIB/libtcc1.a .
cp $MES_LIB/libc+tcc.a libc.a
mkdir -p $prefix/lib
absprefix=$(cd $prefix && pwd)
interpreter=/lib/mes-loader
export interpreter
if $ONE_SOURCE; then
CFLAGS="$CFLAGS
--include=$MES_SOURCE/lib/linux/$cpu-mes-gcc/crt1.c
-Wl,-Ttext-segment=0x1000000
"
else
LDFLAGS="
-L .
--include=$MES_SOURCE/lib/linux/$cpu-mes-gcc/crt1.c
-Wl,-Ttext-segment=0x1000000
"
fi
CPPFLAGS_TCC="$CPPFLAGS
-I .
$CPP_TARGET_FLAG
-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 TCC_LIBTCC1_MES=\"libtcc1-mes.a\"
-D CONFIG_TCCBOOT=1
-D CONFIG_TCC_STATIC=1
-D CONFIG_USE_LIBGCC=1
-D TCC_MES_LIBC=1
"
if $ONE_SOURCE; then
CPPFLAGS_TCC="$CPPFLAGS_TCC -D ONE_SOURCE=1"
fi
if $ONE_SOURCE; then
$CC -g -o ${cross_prefix}tcc \
$CFLAGS \
$CPPFLAGS_TCC \
tcc.c \
libtcc1.a \
libc.a \
-lgcc \
libc.a
else
$CC -g -c $CFLAGS $CPPFLAGS_TCC tccpp.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC tccgen.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC tccelf.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC tccrun.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC ${tcc_cpu}-gen.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC ${tcc_cpu}-link.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC ${tcc_cpu}-asm.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC tccasm.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC libtcc.c
$CC -g -c $CFLAGS $CPPFLAGS_TCC tcc.c
files="
tccpp.o
tccgen.o
tccelf.o
tccrun.o
${tcc_cpu}-gen.o
${tcc_cpu}-link.o
${tcc_cpu}-asm.o
tccasm.o
libtcc.o
tcc.o
"
$CC \
-g \
$LDFLAGS \
$CPPFLAGS_TCC \
-o ${cross_prefix}tcc \
$files \
libtcc1.a \
libc.a \
-lgcc \
libc.a
fi
rm -rf ${cross_prefix}gcc-usr
mkdir -p ${cross_prefix}gcc-usr
cp *.a ${cross_prefix}gcc-usr
cp *.o ${cross_prefix}gcc-usr
mkdir -p $prefix/lib/tcc
cp -f libc.a $prefix/lib
cp -f libtcc1.a $prefix/lib/tcc
rm -f armeabi.o
cp libtcc1.a libtcc1-mes.a
# REBUILD_LIBC=true
# TCC=$CC sh -x boot.sh
# REBUILD_LIBC=true
# TCC=./boot0-tcc sh boot.sh
# TCC=./boot1-tcc sh boot.sh
# TCC=./boot2-tcc sh boot.sh
# TCC=./boot3-tcc sh boot.sh
# TCC=./boot4-tcc sh boot.sh
# TCC=./boot5-tcc sh boot.sh
# TCC=./boot6-tcc sh boot.sh
# exit 22
rm -rf ${cross_prefix}gcc-boot
mkdir -p ${cross_prefix}gcc-boot
cp *.a ${cross_prefix}gcc-boot
cp *.o ${cross_prefix}gcc-boot
CC="./${cross_prefix}tcc"
AR="./${cross_prefix}tcc -ar"
CFLAGS=
REBUILD_LIBC=${REBUILD_LIBC-true}
$CC -c $CPPFLAGS $CFLAGS $MES_PREFIX/lib/linux/$mes_cpu-mes-gcc/crt1.c
$CC -c $CPPFLAGS $CFLAGS $MES_PREFIX/lib/linux/$mes_cpu-mes-gcc/crti.c
$CC -c $CPPFLAGS $CFLAGS $MES_PREFIX/lib/linux/$mes_cpu-mes-gcc/crtn.c
cp $MES_LIB/libc+tcc.a .
cp $MES_LIB/libtcc1.a .
cp $MES_LIB/libc+tcc.a libc.a
mkdir -p $prefix/lib/tcc
if $REBUILD_LIBC; then
for i in 1 i n; do
rm -f crt$i.o;
cp -f $MES_LIB/crt$i.c .
$CC $CPPFLAGS $CFLAGS -static -nostdlib -nostdinc -c crt$i.c
done
rm -f libc.a
cp -f $MES_LIB/libc+gnu.c libc.c
$CC -c $CPPFLAGS $CFLAGS libc.c
$AR cr libc.a libc.o
rm -f libtcc1.a
cp -f $MES_LIB/libtcc1.c .
$CC -c $CPPFLAGS $CPP_TARGET_FLAG $CFLAGS lib/libtcc1.c
$AR cr libtcc1.a libtcc1.o
if [ $mes_cpu = arm ]; then
$CC -c -g $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG lib/armeabi.c
$CC -c -g $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG -o libtcc1-tcc.o lib/libtcc1.c
$AR rc libtcc1-tcc.a libtcc1-tcc.o armeabi.o
$CC -c -g $CPPFLAGS $CFLAGS -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 -o libtcc1-mes.o $MES_LIB/libtcc1.c
$AR cr libtcc1-mes.a libtcc1-mes.o armeabi.o
$CC -c -g $CPP_TARGET_FLAG $CFLAGS -o libtcc1.o lib/libtcc1.c
$AR cr libtcc1.a libtcc1.o armeabi.o
cp -f libtcc1-tcc.a $prefix/lib/tcc
cp -f libtcc1-mes.a $prefix/lib/tcc
fi
rm -f libgetopt.a
cp -f $MES_LIB/libgetopt.c .
$CC -c $CPPFLAGS $CFLAGS libgetopt.c
$AR cr libgetopt.a libgetopt.o
else
cp -f $MES_LIB/crt1.o .
cp -f $MES_LIB/crti.o .
cp -f $MES_LIB/crtn.o .
cp -f $MES_LIB/libc+gnu.a libc.a
cp -f $MES_LIB/libtcc1.a .
cp -f $MES_LIB/libgetopt.a .
if [ $mes_cpu = arm ]; then
cp -f $MES_LIB/libtcc1.a $MES_LIB/libtcc1-mes.a
cp -f libtcc1-mes.a $prefix/lib/tcc
fi
fi
cp -f libc.a $prefix/lib
cp -f libtcc1.a $prefix/lib/tcc
rm -rf ${cross_prefix}tcc-usr
mkdir -p ${cross_prefix}tcc-usr
cp *.a ${cross_prefix}tcc-usr
cp *.o ${cross_prefix}tcc-usr

View File

@ -1,20 +1,75 @@
#! /bin/sh
set -ex
rm -f tcc
GUIX=${GUIX-$(command -v guix||:)}
MES_PREFIX=${MES_PREFIX-../mes}
CC=${CC-gcc}
crt1=$($CC --print-file-name=crt1.o)
prefix=${prefix-./usr}
rm -f tcc gcc-tcc
touch config.mak
make clean
rm -f crt*.o
crt1=$(gcc --print-file-name=crt1.o)
#crtdir=$(dirname $crt1)
#crti=$(gcc --print-file-name=crti.o)
#crtn=$(gcc --print-file-name=crtn.o)
rm -f *.a *.o
unset ONE_SOURCE
./configure --tccdir=$PWD --crtprefix=$crtdir --extra-cflags="-DHAVE_FLOAT=1 -DHAVE_BITFIELD=1"
make ETAGS
make PROGRAM_PREFIX=gcc- gcc-tcc
unset CFLAGS LDFLAGS
CPPFLAGS_TCC="
-DHAVE_FLOAT=1
-DHAVE_BITFIELD=1
-DHAVE_LONG_LONG=1
-DHAVE_SETJMP=1
"
arch=$(uname -m)
case $arch in
arm*|aarch*)
cpu=arm
mes_cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
CFLAGS=-marm
CPP_TARGET_FLAG="-DTCC_CPU_VERSION=7 -DTCC_TARGET_ARM -DTCC_ARM_VFP"
;;
*x86_64*)
cpu=x86_64
mes_cpu=x86_64
tcc_cpu=x86_64
triplet=x86_64-unknown-linux-gnu
cross_prefix=${triplet}-
CFLAGS=
CPP_TARGET_FLAG="-DTCC_TARGET_X86_64"
;;
*)
cpu=x86
mes_cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
CFLAGS=
CPP_TARGET_FLAG="-DTCC_TARGET_I386"
;;
esac
./configure --prefix=$prefix --tccdir=$PWD --crtprefix=$crtdir --extra-cflags="$CFLAGS $CPPFLAGS_TCC" --cc=$CC
type -p etags && make ETAGS
#Try building without eabihf
#make PROGRAM_PREFIX=gcc- gcc-tcc
if [ $mes_cpu = arm ]; then
make PROGRAM_PREFIX=gcc- gcc-tcc DEF-arm='$(DEF-arm-vfp)'
./gcc-tcc -c $CPP_TARGET_FLAG $CPPFLAGS_TCC $CFLAGS -c lib/libtcc1.c
./gcc-tcc -ar cr libtcc1.a libtcc1.o
else
make PROGRAM_PREFIX=gcc- gcc-tcc
rm -f libtcc1.c
touch libtcc1.c
./gcc-tcc -c libtcc1.c
./gcc-tcc -ar cr libtcc1.a libtcc1.o
fi
make libtcc1.a
rm -rf gcc-tcc-usr
mkdir -p gcc-tcc-usr
cp *.o *.a gcc-tcc-usr
rm -rf $prefix
mkdir -p $prefix/lib/tcc
cp libtcc1.a $prefix/lib/tcc

View File

@ -1,69 +0,0 @@
#! /bin/sh
set -ex
rm -f i686-unknown-linux-gnu-tcc
# crt1=$(i686-unknown-linux-gnu-gcc --print-file-name=crt1.o)
# crtdir=$(dirname $crt1)
unset C_INCLUDE_PATH LIBRARY_PATH
PREFIX=${PREFIX-usr}
GUIX=${GUIX-$(command -v guix||:)}
MES_PREFIX=${MES_PREFIX-mes-source}
MES_SOURCE=${MES_SOURCE-mes-source}
# cp $MES_PREFIX/lib/x86-mes-gcc/crt1.o crt1.o
# cp $MES_PREFIX/lib/x86-mes-gcc/crti.o crti.o
# cp $MES_PREFIX/lib/x86-mes-gcc/crtn.o crtn.o
CC=${CC-i686-unknown-linux-gnu-gcc}
CFLAGS="
-nostdinc
-nostdlib
-fno-builtin
--include=$MES_SOURCE/lib/linux/x86-mes-gcc/crt1.c
-Wl,-Ttext-segment=0x1000000
"
#--include=$MES_SOURCE/lib/libc+tcc.c
#--include=$MES_SOURCE/lib/libtcc1.c
if [ -z "$interpreter" -a -n "$GUIX" ]; then
interpreter=$($GUIX environment --ad-hoc patchelf -- patchelf --print-interpreter $(guix build --system=i686-linux hello)/bin/hello)
elif [ -x /lib/ld-linux.so.2 ]; then
# legacy non-GuixSD support
interpreter=/lib/ld-linux.so.2
fi
interpreter=${interpreter-interpreter}
export interpreter
cp $MES_SOURCE/gcc-lib/libc+tcc.a .
cp $MES_SOURCE/gcc-lib/libtcc1.a .
cp $MES_SOURCE/gcc-lib/libc+tcc.a libc.a
mkdir -p $PREFIX/lib
ABSPREFIX=$(cd $PREFIX && pwd)
#cp $MES_SEED/x86-mes-gcc/libc+tcc.o $ABSPREFIX/lib
#cp $MES_SEED/x86-mes-gcc/libtcc1.o $ABSPREFIX/lib
$CC -g -o i686-unknown-linux-gnu-tcc\
$CFLAGS\
-I.\
-I $MES_PREFIX/lib\
-I $MES_PREFIX/include\
-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 CONFIG_USE_LIBGCC=1\
-D 'TCC_LIBGCC="'$ABSPREFIX'/lib/libc.a"'\
-D BOOTSTRAP=1\
-D CONFIG_TCCBOOT=1\
-D CONFIG_TCC_STATIC=1\
-D CONFIG_USE_LIBGCC=1\
-D ONE_SOURCE=1\
-D TCC_MES_LIBC=1\
-D TCC_TARGET_I386=1\
tcc.c\
libtcc1.a\
libc.a

314
build.sh
View File

@ -3,109 +3,61 @@
set -e
export V
export MESCC
export MES_DEBUG
export MES_PREFIX
export MES_LIB
export MES_SOURCE
export ONE_SOURCE
export PREPROCESS
export REBUILD_LIBC
export cpu
export cross_prefix
export mes_cpu
export prefix
export interpreter
export tcc_cpu
export triplet
if test "$V" = 1 -o "$V" = 2; then
set -x
fi
rm -f tcc.E tcc.hex2 tcc.M1 tcc.m1 mes-tcc boot?-tcc
verbose=
if test "$V" = 1; then
MESCCFLAGS="$MESCCFLAGS -v"
elif test "$V" = 2; then
MESCCFLAGS="$MESCCFLAGS -vv"
fi
unset CPATH C_INCLUDE_PATH LIBRARY_PATH
prefix=${prefix-/usr/local}
mescc=${mescc-$(command -v mescc)}
GUIX=${GUIX-$(command -v guix||:)}
CC=${mescc-mescc}
MES=${MES-../mes/src/mes}
HEX2=${HEX2-hex2}
M1=${M1-M1}
BLOOD_ELF=${BLOOD_ELF-blood-elf}
MES_PREFIX=${MES_PREFIX-mes}
MES_SOURCE=${MES_SOURCE-mes-source}
if [ -z "$interpreter" -a -n "$GUIX" ]; then
interpreter=$($GUIX environment --ad-hoc patchelf -- patchelf --print-interpreter $(guix build --system=i686-linux hello)/bin/hello)
elif [ -x /lib/ld-linux.so.2 ]; then
# legacy non-GuixSD support
interpreter=/lib/ld-linux.so.2
fi
interpreter=${interpreter-interpreter}
export interpreter
mkdir -p $prefix/lib
if test "$V" = 2; then
sh $mescc --help
fi
if [ -n "$ONE_SOURCE" ]; then
sh cc.sh tcc
files="tcc.S"
else
sh cc.sh tccpp
sh cc.sh tccgen
sh cc.sh tccelf
sh cc.sh tccrun
sh cc.sh i386-gen
sh cc.sh i386-link
sh cc.sh i386-asm
sh cc.sh tccasm
sh cc.sh libtcc
sh cc.sh tcc
files="
tccpp.S
tccgen.S
tccelf.S
tccrun.S
i386-gen.S
i386-link.S
i386-asm.S
tccasm.S
libtcc.S
tcc.S
"
fi
$MESCC\
$MESCCFLAGS\
-g\
-o mes-tcc\
-L $MES_SOURCE/lib\
$files\
-l c+tcc
prefix=${prefix-usr}
export prefix
MESCC=${MESCC-mes-source/pre-inst-env mescc}
CC=${CC-$MESCC}
host=${host-$($CC -dumpmachine 2>/dev/null)}
if test -z "$host$host_type"; then
mes_cpu=${arch-$(get_machine || uname -m)}
else
mes_cpu=${host%%-*}
fi
if test "$mes_cpu" = i386\
|| test "$mes_cpu" = i486\
|| test "$mes_cpu" = i586\
|| test "$mes_cpu" = i686; then
mes_cpu=x86
fi
if test "$mes_cpu" = armv4\
|| test "$arch" = armv7l; then
mes_cpu=arm
fi
if test "$mes_cpu" = amd64; then
mes_cpu=x86_64
fi
case "$mes_cpu" in
i386|i486|i586|i686|x86)
mes_cpu=x86
tcc_cpu=i386
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-true}
;;
armv4|armv7l|arm)
mes_cpu=arm
tcc_cpu=arm
have_float=${have_float-false}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-false}
;;
amd64)
tcc_cpu=x86_64
mes_cpu=x86_64
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-true}
;;
esac
case "$host" in
*linux-gnu|*linux)
mes_kernel=linux;;
@ -114,87 +66,169 @@ case "$host" in
*)
mes_kernel=linux;;
esac
export mes_cpu
export tcc_cpu
export have_float
export have_long_long
export have_setjmp
MES=${MES-mes-source/bin/mes}
MES_PREFIX=${MES_PREFIX-mes}
MES_SOURCE=${MES_SOURCE-mes-source}
MES_LIB=${MES_LIB-$MES_PREFIX/lib}
MES_LIB=$MES_SOURCE/gcc-lib/${mes_cpu}-mes
PREPROCESS=${PREPROCESS-true}
ONE_SOURCE=${ONE_SOURCE-false}
interpreter=/lib/mes-loader
rm -f tcc.E tcc.hex2 tcc.M1 tcc.m1 mes-tcc boot?-tcc
verbose=
if test "$V" = 1; then
MESCCFLAGS="$MESCCFLAGS -v"
elif test "$V" = 2; then
MESCCFLAGS="$MESCCFLAGS -v -v"
fi
mkdir -p $prefix/lib
if test "$V" = 2; then
sh $MESCC --help
fi
if $ONE_SOURCE; then
sh cc.sh tcc
files="tcc.S"
else
sh cc.sh tccpp
sh cc.sh tccgen
sh cc.sh tccelf
sh cc.sh tccrun
sh cc.sh ${tcc_cpu}-gen
sh cc.sh ${tcc_cpu}-link
sh cc.sh ${tcc_cpu}-asm
sh cc.sh tccasm
sh cc.sh libtcc
sh cc.sh tcc
files="
tccpp.S
tccgen.S
tccelf.S
tccrun.S
${tcc_cpu}-gen.S
${tcc_cpu}-link.S
${tcc_cpu}-asm.S
tccasm.S
libtcc.S
tcc.S
"
fi
$MESCC \
$MESCCFLAGS \
-g \
-o mes-tcc \
-L $MES_SOURCE/mescc-lib \
-L $MES_SOURCE/lib \
$files \
-l c+tcc
CC="./mes-tcc"
AR="./mes-tcc -ar"
CPPFLAGS="-I $MES_PREFIX/include -I $MES_PREFIX/include/$mes_kernel/$mes_cpu"
CPPFLAGS="
-I $MES_PREFIX/include
-I $MES_PREFIX/include/$mes_kernel/$mes_cpu
-I $MES_PREFIX/lib
-D BOOTSTRAP=1
"
if test "$mes_cpu" = x86; then
CPP_TARGET_FLAG="-D TCC_TARGET_I386=1"
elif test "$mes_cpu" = arm; then
CPP_TARGET_FLAG="-D TCC_TARGET_ARM=1 -D TCC_ARM_VFP=1 -D CONFIG_TCC_LIBTCC1_MES=1"
elif test "$mes_cpu" = x86_64; then
CPP_TARGET_FLAG="-D TCC_TARGET_X86_64=1"
else
echo "cpu not supported: $mes_cpu"
fi
CFLAGS=
REBUILD_LIBC=${REBUILD_LIBC-t}
REBUILD_LIBC=${REBUILD_LIBC-true}
if [ -n "$REBUILD_LIBC" ]; then
mkdir -p $prefix/lib/tcc
if $REBUILD_LIBC; then
for i in 1 i n; do
rm -f crt$i.o;
cp -f $MES_PREFIX/lib/crt$i.c .
##cp -f $MES_PREFIX/gcc-lib/x86-mes/crt$i.c .
cp -f $MES_LIB//crt$i.c .
$CC $CPPFLAGS $CFLAGS -static -nostdlib -nostdinc -c crt$i.c
done
rm -f libc.a
cp -f ${MES_PREFIX}/lib/libc+gnu.c libc.c
## cp -f ${MES_PREFIX}/gcc-lib/x86-mes/libc+gnu.c libc.c
cp -f $MES_LIB/libc+gnu.c libc.c
$CC -c $CPPFLAGS $CFLAGS libc.c
$AR cr libc.a libc.o
rm -f libtcc1.a
cp -f ${MES_PREFIX}/lib/libtcc1.c .
## cp -f ${MES_PREFIX}/gcc-lib/x86-mes/libtcc1.c .
$CC -c $CPPFLAGS $CFLAGS libtcc1.c
cp -f $MES_LIB/libtcc1.c .
$CC -c $CPPFLAGS $CPP_TARGET_FLAG $CFLAGS lib/libtcc1.c
$AR cr libtcc1.a libtcc1.o
if [ $mes_cpu = arm ]; then
$CC -c -g $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG lib/armeabi.c
$CC -c -g $CPPFLAGS $CFLAGS $CPP_TARGET_FLAG -o libtcc1-tcc.o lib/libtcc1.c
$AR rc libtcc1-tcc.a libtcc1-tcc.o armeabi.o
$CC -c -g $CPPFLAGS $CFLAGS -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 -o libtcc1-mes.o $MES_LIB/libtcc1.c
$AR cr libtcc1-mes.a libtcc1-mes.o armeabi.o
$CC -c -g $CPP_TARGET_FLAG $CFLAGS -o libtcc1.o lib/libtcc1.c
# $AR cr libtcc1.a libtcc1.o armeabi.o
$AR cr libtcc1.a libtcc1.o
cp -f libtcc1-tcc.a $prefix/lib/tcc
cp -f libtcc1-mes.a $prefix/lib/tcc
fi
rm -f libgetopt.a
cp -f ${MES_PREFIX}/lib/libgetopt.c .
## cp -f ${MES_PREFIX}/gcc-lib/x86-mes/libgetopt.c .
cp -f $MES_LIB/libgetopt.c .
$CC -c $CPPFLAGS $CFLAGS libgetopt.c
$AR cr libgetopt.a libgetopt.o
else
cp -f $MES_PREFIX/lib/crt1.o .
cp -f $MES_PREFIX/lib/crti.o .
cp -f $MES_PREFIX/lib/crtn.o .
cp -f $MES_PREFIX/lib/libc+gnu.a .
cp -f $MES_PREFIX/lib/libtcc1.a .
cp -f $MES_LIB/crt1.o .
cp -f $MES_LIB/crti.o .
cp -f $MES_LIB/crtn.o .
cp -f $MES_LIB/libc+gnu.a libc.a
cp -f $MES_LIB/libtcc1.a .
cp -f $MES_LIB/libgetopt.a .
## cp -f $MES_PREFIX/gcc-lib/libc+gnu.a libc.a
## cp -f $MES_PREFIX/gcc-lib/libtcc1.a .
## cp -f $MES_PREFIX/gcc-lib/crt1.o .
## cp -f $MES_PREFIX/gcc-lib/crti.o .
## cp -f $MES_PREFIX/gcc-lib/crtn.o .
if [ $mes_cpu = arm ]; then
$CC -c $CPPFLAGS $CFLAGS $MES_LIB/libtcc1.c
$CC -c $CPPFLAGS $CFLAGS lib/armeabi.c
fi
fi
sh boot.sh
cp -f libc.a $prefix/lib
cp -f libtcc1.a $prefix/lib/tcc
cp -f libgetopt.a $prefix/lib
rm -rf mes-usr
mkdir -p mes-usr
cp *.M1 mes-usr
cp *.S mes-usr
cp *.a mes-usr
REBUILD_LIBC=true
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
ln -f boot4-tcc tcc
CC=./tcc
AR='./tcc -ar'
if true; then
for i in 1 i n; do
rm -f crt$i.o;
cp -f $MES_PREFIX/lib/crt$i.c .
##cp -f $MES_PREFIX/gcc-lib/x86-mes/crt$i.c .
$CC $CPPFLAGS $CFLAGS -static -nostdlib -nostdinc -c crt$i.c
done
rm -f libc.a
$CC -c $CPPFLAGS $CFLAGS libc.c
$AR cr libc.a libc.o
rm -f libtcc1.a
$CC -c $CPPFLAGS $CFLAGS libtcc1.c
$AR cr libtcc1.a libtcc1.o
rm -f libgetopt.a
$CC -c $CPPFLAGS $CFLAGS libgetopt.c
$AR cr libgetopt.a libgetopt.o
cp -f libc.a $prefix/lib
cp -f libtcc1.a $prefix/lib/tcc
cp -f libgetopt.a $prefix/lib
fi
TCC=./boot4-tcc sh boot.sh
TCC=./boot5-tcc sh boot.sh
cmp boot5-tcc boot6-tcc
cp -f boot5-tcc tcc
echo "build.sh: done"

102
cc.sh
View File

@ -1,7 +1,7 @@
#! /bin/sh
set -e
if [ -n "$BUILD_DEBUG" ]; then
if [ "$V" = 1 -o "$V" = 2 ]; then
set -x
MESCCFLAGS="$MESCCFLAGS -v"
fi
@ -10,68 +10,62 @@ t=$1
rm -f $t.E $t.M1 $t.m1
GUIX=${GUIX-$(command -v guix||:)}
CC=${MESCC-mescc}
MES=${MES-../mes/src/mes}
MESCC=${MESCC-mescc}
MES=${MES-mes-source/bin/mes}
MESCC=${MESCC-mes-source/pre-inst-env mescc}
CFLAGS=${CFLAGS-}
MES_PREFIX=${MES_PREFIX-${MESCC%/*}}
MES_PREFIX=${MES_PREFIX-mes-source}
absprefix=$(cd $prefix && pwd)
if [ -z "$interpreter" -a -n "$GUIX" ]; then
interpreter=$($GUIX environment --ad-hoc patchelf -- patchelf --print-interpreter $(guix build --system=i686-linux hello)/bin/hello)
elif [ -x /lib/ld-linux.so.2 ]; then
# legacy non-GuixSD support
interpreter=/lib/ld-linux.so.2
fi
interpreter=/lib/mes-loader
ulimit -s 17030
if [ -n "$ONE_SOURCE" ]; then
CFLAGS="$CFLAGS -D ONE_SOURCE=$ONE_SOURCE"
CPPFLAGS="
-I $MES_PREFIX/lib
-I $MES_PREFIX/include
-D BOOTSTRAP=1
"
if test "$mes_cpu" = x86; then
CPP_TARGET_FLAG="-D TCC_TARGET_I386=1"
elif test "$mes_cpu" = arm; then
CPP_TARGET_FLAG="-D TCC_TARGET_ARM=1 -D TCC_ARM_VFP=1 -D CONFIG_TCC_LIBTCC1_MES=1"
elif test "$mes_cpu" = x86_64; then
CPP_TARGET_FLAG="-D TCC_TARGET_X86_64=1"
else
echo "cpu not supported: $mes_cpu"
fi
if [ -n "$PREPROCESS" ]; then
time sh $MESCC $MESCCFLAGS -E -o $t.E\
$CFLAGS\
-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="'$absprefix'/lib:{B}/lib:."'\
-D 'CONFIG_TCC_SYSINCLUDEPATHS="'$MES_PREFIX'/include:'$prefix'/include:{B}/include"'\
-D 'TCC_LIBGCC="'$absprefix'/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\
$t.c
CPPFLAGS_TCC="$CPPFLAGS
-I .
$CPP_TARGET_FLAG
-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 TCC_LIBTCC1_MES=\"libtcc1-mes.a\"
-D CONFIG_TCCBOOT=1
-D CONFIG_TCC_STATIC=1
-D CONFIG_USE_LIBGCC=1
-D TCC_MES_LIBC=1
"
if $ONE_SOURCE; then
CPPFLAGS_TCC="$CPPFLAGS_TCC -D ONE_SOURCE=$ONE_SOURCE"
fi
if $PREPROCESS; then
time sh $MESCC $MESCCFLAGS -E -o $t.E \
$CFLAGS \
$CPPFLAGS_TCC \
$t.c
time sh $MESCC $MESCCFLAGS -S -o $t.M1 $t.E
else
time sh $MESCC $MESCCFLAGS -S -o $t.M1\
$CFLAGS\
-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="'$absprefix'/lib:{B}/lib:."'\
-D 'CONFIG_TCC_SYSINCLUDEPATHS="'$MES_PREFIX'/include:'$prefix'/include:{B}/include"'\
-D CONFIG_USE_LIBGCC=1\
-D 'TCC_LIBGCC="'$absprefix'/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\
time sh $MESCC $MESCCFLAGS -S -o $t.M1 \
$CFLAGS \
$CPPFLAGS_TCC \
$t.c
fi

101
check.sh
View File

@ -1,15 +1,42 @@
#! /bin/sh
#! /usr/bin/env bash
#MES_ARENA=${MES_ARENA-100000000}
MES=${MES-mes}
MESCC=${MESCC-mescc}
export V
if test "$V" = 1 -o "$V" = 2; then
set -x
fi
MES_PREFIX=${MES_PREFIX-../mes}
MES_SOURCE=${MES_SOURCE-../mes-source}
arch=$(uname -m)
case $arch in
arm*|aarch*)
cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
;;
*)
cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
;;
esac
export cpu
export cross_prefix
export tcc_cpu
export triplet
tests="
GCC_TCC=${GCC_TCC-./${cross_prefix}tcc}
TCC=${TCC-./tcc}
MES_PREFIX=${MES_PREFIX-mes}
MES_SOURCE=${MES_SOURCE-mes-source}
export MES_PREFIX
export MES_SOURCE
mkdir -p lib/tests
cp -r $MES_SOURCE/lib/tests lib
mes_tests="
lib/tests/scaffold/t.c
lib/tests/scaffold/00-exit-0.c
lib/tests/scaffold/01-return-0.c
lib/tests/scaffold/02-return-1.c
lib/tests/scaffold/03-call.c
@ -61,13 +88,17 @@ lib/tests/scaffold/23-global-pointer-pointer-ref.c
lib/tests/scaffold/23-pointer-sub.c
lib/tests/scaffold/23-pointer.c
lib/tests/mes/30-oputs.c
lib/tests/mes/30-eputs.c
lib/tests/string/30-strlen.c
lib/tests/scaffold/30-exit-0.c
lib/tests/scaffold/30-exit-42.c
lib/tests/scaffold/32-call-wrap.c
lib/tests/scaffold/32-compare.c
lib/tests/scaffold/33-and-or.c
lib/tests/scaffold/34-pre-post.c
lib/tests/scaffold/35-compare-char.c
lib/tests/scaffold/36-compare-arithmetic.c
lib/tests/scaffold/36-compare-arithmetic-negative.c
lib/tests/scaffold/37-compare-assign.c
lib/tests/scaffold/38-compare-call-2.c
lib/tests/scaffold/38-compare-call-3.c
@ -88,6 +119,7 @@ lib/tests/mes/50-itoa.c
lib/tests/posix/50-getenv.c
lib/tests/stdlib/50-malloc.c
lib/tests/string/50-strcmp.c
lib/tests/string/50-strcmp-itoa.c
lib/tests/string/50-strcpy.c
lib/tests/string/50-strncmp.c
lib/tests/posix/50-open-read.c
@ -96,6 +128,7 @@ lib/tests/scaffold/54-argc.c
lib/tests/scaffold/54-argv.c
lib/tests/scaffold/55-char-array.c
lib/tests/scaffold/60-math.c
lib/tests/scaffold/60-math-itoa.c
lib/tests/scaffold/61-array.c
lib/tests/scaffold/62-array.c
lib/tests/scaffold/63-struct.c
@ -110,6 +143,9 @@ lib/tests/scaffold/63-struct-cell.c
lib/tests/scaffold/64-make-cell.c
lib/tests/scaffold/65-read.c
lib/tests/scaffold/66-local-char-array.c
"
tcc_tests="
lib/tests/scaffold/70-stdarg.c
lib/tests/stdio/70-printf-hello.c
lib/tests/stdio/70-printf-simple.c
@ -168,6 +204,8 @@ lib/tests/scaffold/7u-vstack.c
lib/tests/scaffold/70-array-in-struct-init.c
lib/tests/scaffold/70-struct-short-enum-init.c
lib/tests/scaffold/70-struct-post.c
lib/tests/scaffold/70-extern.c
lib/tests/scaffold/70-ternary-arithmetic-argument.c
lib/tests/setjmp/80-setjmp.c
lib/tests/stdio/80-sscanf.c
lib/tests/stdlib/80-qsort.c
@ -178,7 +216,9 @@ lib/tests/scaffold/82-define.c
lib/tests/scaffold/83-heterogenoous-init.c
lib/tests/scaffold/84-struct-field-list.c
lib/tests/scaffold/85-sizeof.c
"
gnu_tests="
lib/tests/dirent/90-readdir.c
lib/tests/io/90-stat.c
lib/tests/mes/90-abtod.c
@ -191,7 +231,6 @@ lib/tests/stdio/90-fopen-append.c
lib/tests/stdio/90-fread-fwrite.c
lib/tests/stdio/90-fseek.c
lib/tests/stdio/90-sprintf.c
lib/tests/stdio/90-sscanf.c
lib/tests/stdlib/90-strtol.c
lib/tests/string/90-snprintf.c
lib/tests/string/90-strpbrk.c
@ -206,33 +245,39 @@ lib/tests/scaffold/a1-global-no-align.c
lib/tests/scaffold/a1-global-no-clobber.c
"
tests="$mes_tests$tcc_tests$gnu_tests"
broken="
lib/tests/scaffold/t.c
lib/tests/scaffold/00-exit-0.c
lib/tests/scaffold/02-return-1.c
lib/tests/scaffold/05-call-1.c
lib/tests/scaffold/07-include.c
lib/tests/posix/50-open-read.c
lib/tests/scaffold/54-argc.c
lib/tests/scaffold/54-argv.c
lib/tests/scaffold/60-math.c
lib/tests/scaffold/66-local-char-array.c
lib/tests/string/70-strchr.c
lib/tests/scaffold/7s-unsigned-compare.c
lib/tests/scaffold/70-ternary-arithmetic-argument.c
lib/tests/dirent/90-readdir.c
lib/tests/io/90-stat.c
lib/tests/stdio/90-fseek.c
"
if [ ! -x ./i686-unknown-linux-gnu-tcc ]; then
if [ $TCC = ./tcc ]; then
broken="$broken
lib/tests/scaffold/60-math.c
lib/tests/scaffold/7s-unsigned-compare.c
"
fi
if [ $tcc_cpu = "arm" ]; then
broken="$broken
lib/tests/setjmp/80-setjmp.c
lib/tests/mes/90-abtod.c
lib/tests/signal/90-signal.c
"
fi
if [ ! -x $GCC_TCC ]; then
broken="$broken
02-return-1
05-call-1
"
fi
if ! test -f $MES_SOURCE/lib/tests/scaffold/t.c; then
if ! test -f lib/tests/scaffold/t.c; then
tests=
broken=
fi
@ -246,7 +291,7 @@ fail=0
total=0
for t in $tests; do
b=$(basename "$t" .c)
sh test.sh "$MES_SOURCE/$t" &> "scaffold/tests/$b".log
sh test.sh "$t" &> "$t".log
r=$?
total=$((total+1))
if [ $r = 0 ]; then
@ -321,17 +366,17 @@ tests/tests2/55_lshift_type.c
"
broken="$broken
tests/tests2/22_floating_point.c
tests/tests2/23_type_coercion.c
tests/tests2/24_math_library.c
tests/tests2/34_array_assignment.c
tests/tests2/49_bracket_evaluation.c
tests/tests2/55_lshift_type.c
"
#tests/tests2/24_math_library.c ; float, math
#tests/tests2/34_array_assignment.c ; fails with GCC
mkdir -p scaffold/tinycc
expect=$(echo $broken | wc -w)
for t in $tests; do
if [ ! -f "$t" ]; then

View File

@ -1,15 +1,34 @@
#! /bin/sh
set -ex
rm -f *.i686-unknown-linux-gnu-o *.mes-o
MES_PREFIX=${MES_PREFIX-mes}
MES_SOURCE=${MES_SOURCE-mes-source}
arch=$(uname -m)
case $arch in
arm*|aarch*)
cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
;;
*)
cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
;;
esac
rm -f *.$triplet-o *.mes-o
rm -f 1 2 1.elf 2.elf 1.a 2.a
# trivial object
./tcc -c -I ../mes/include ../mes/scaffold/main.c 2>/dev/null
./i686-unknown-linux-gnu-tcc -o main.i686-unknown-linux-gnu-o -c -I ../mes/include ../mes/scaffold/main.c 2> 1
./tcc -c -I $MES_PREFIX/include $MES_SOURCE/scaffold/main.c 2>/dev/null
./$triplet-tcc -o main.$triplet-o -c -I $MES_PREFIX/include $MES_SOURCE/scaffold/main.c 2> 1
set +e
./mes-tcc -o main.mes-o -c -I ../mes/include ../mes/scaffold/main.c &> 2
./mes-tcc -o main.mes-o -c -I $MES_PREFIX/include $MES_SOURCE/scaffold/main.c &> 2
diff -y 1 2
readelf -a main.i686-unknown-linux-gnu-o > 1.elf
readelf -a main.$triplet-o > 1.elf
readelf -a main.mes-o > 2.elf
diff -y 1.elf 2.elf || :

84
doit
View File

@ -1,57 +1,81 @@
#! /bin/sh
set -ex
export BLOOD_ELF
export BUILD_DEBUG
export GUILE_LOAD_PATH
export HEX2
export M1
export V
export MES
export MESCC
export MES_DEBUG
export MES_PREFIX
export MES_LIB
export MES_SOURCE
export ONE_SOURCE
export PREFIX
export PREPROCESS
export REBUILD_LIBC
PREFIX=usr
HEX2=../mescc-tools/bin/hex2
M1=../mescc-tools/bin/M1
BLOOD_ELF=../mescc-tools/bin/blood-elf
MES=${MES-../mes/src/mes}
export cpu
export cross_prefix
export mes_cpu
export prefix
export tcc_cpu
export triplet
prefix=usr
MES=${MES-mes-source/bin/mes}
MES_ARENA=70000000
MES_MAX_ARENA=70000000
export MES_ARENA MES_MAX_ARENA
MES=guile
#MES=${MES-../mes/src/mes.gcc}
#MES=${MES-../mes/src/mes.mlibc-gcc}
MESCC=${MESCC-../mes/pre-inst-env mescc}
MES=${MES-mes-source/bin/mes}
MESCC=${MESCC-mes-source/pre-inst-env mescc}
#GUILE_LOAD_PATH=/home/janneke/src/nyacc/module:$GUILE_LOAD_PATH
GUILE_LOAD_PATH=nyacc
MES_DEBUG=2
MES_PREFIX=${MES_PREFIX-mes-source}
REBUILD_LIBC=${REBUILD_LIBC-true}
rm -f mes
ln -sf $MES_PREFIX mes
if [ -z "$interpreter" -a -n "$GUIX" ]; then
interpreter=$($GUIX environment --ad-hoc patchelf -- patchelf --print-interpreter $(guix build --system=i686-linux hello)/bin/hello)
elif [ -x /lib/ld-linux.so.2 ]; then
# legacy non-GuixSD support
interpreter=/lib/ld-linux.so.2
fi
interpreter=${interpreter-interpreter}
export interpreter
sh build-gcc.sh
PREPROCESS=1
ONE_SOURCE=1
PREPROCESS=${PREPROCESS-true}
ONE_SOURCE=${ONE_SOURCE-false}
sh build-x86.sh
arch=$(uname -m)
case $arch in
arm*|aarch*)
cpu=arm
mes_cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-false}
;;
*)
cpu=x86
mes_cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
have_float=${have_float-true}
have_long_long=${have_long_long-true}
have_setjmp=${have_setjmp-true}
;;
esac
export cpu
export cross_prefix
export tcc_cpu
export triplet
export have_float
export have_long_long
export have_setjmp
MES_LIB=${MES_LIB-$MES_PREFIX/lib}
MES_LIB=$MES_SOURCE/gcc-lib/${mes_cpu}-mes
sh build-32.sh
sh build.sh
sh compile.sh
sh link.sh ||:

View File

@ -1,13 +1,31 @@
#! /bin/sh
set -e
if [ "$V" = 1 -o "$V" = 2 ]; then
set -x
fi
set -e
arch=$(uname -m)
case $arch in
arm*|aarch*)
cpu=arm
mes_cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
;;
*)
cpu=x86
mes_cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
;;
esac
prefix=${prefix-usr}
MES_PREFIX=${MES_PREFIX-${MESCC%/*}}
MES_PREFIX=${MES_PREFIX-mes}
mkdir -p $prefix/bin
cp tcc $prefix/bin
@ -21,6 +39,10 @@ cp crtn.o $prefix/lib/crtn.o
mkdir -p $prefix/lib/tcc
cp libc.a $prefix/lib
cp libtcc1.a $prefix/lib/tcc
if [ $mes_cpu = arm ]; then
cp libtcc1-mes.a $prefix/lib/tcc
fi
cp libgetopt.a $prefix/lib
mkdir -p $prefix/share

41
link.sh
View File

@ -2,28 +2,51 @@
set -ex
rm -f 1.a 2.a
MES_PREFIX=${MES_PREFIX-../mes}
MES_SEED=${MES_SEED-../mes-seed}
MES_PREFIX=${MES_PREFIX-mes}
MES_SOURCE=${MES_SOURCE-mes-source}
arch=$(uname -m)
case $arch in
arm*|aarch*)
cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
;;
*)
cpu=x86
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
;;
esac
export cpu
export cross_prefix
export triplet
# trivial bin
###./tcc ../mes/scaffold/main.c
c=${1-$MES_PREFIX/scaffold/main}
b=scaffold/${c##*/}
rm -f "$b".mes-gcc-out
rm -f "$b".mes-out
./i686-unknown-linux-gnu-tcc\
-static -g -o "$b".mes-gcc-out -I $MES_PREFIX/include -L $MES_SEED "$c".c 2> "$b".mes-gcc-stderr
./${cross_prefix}tcc\
-static -g -o "$b".mes-gcc-out\
-I.\
-I $MES_PREFIX/lib\
-I $MES_PREFIX/include\
"$c".c \
2> "$b".mes-gcc-stderr
set +e
${MES_TCC-./mes-tcc}\
-static -g -o "$b".mes-out -I $MES_PREFIX/include -L $MES_SEED "$c".c 2> "$b".mes-stderr
-static -g -o "$b".mes-out
-I.\
-I $MES_PREFIX/lib\
-I $MES_PREFIX/include\
2> "$b".mes-stderr
objdump -d "$b".mes-gcc-out > "$b".mes-gcc-d
objdump -d "$b".mes-out > "$b".mes-d
#readelf -a a.i686-unknown-linux-gnu-out > 1.r
#readelf -a a.${cross_prefix}out > 1.r
#readelf -a a.mes-out > 2.r
#diff -y 1.a 2.a
echo diff -y "$b".mes-gcc-stderr "$b".mes-stderr
echo diff -y "$b".mes-gcc-d "$b".mes-d
"$b".mes-out

175
test.sh
View File

@ -1,84 +1,137 @@
#! /bin/sh
set -ex
set -e
TCC=${TCC-./mes-tcc}
MESCC=${MESCC-mescc}
MES_PREFIX=${MES_PREFIX-../mes}
MES_PREFIX=${MES_PREFIX-${MESCC%/*}}
export V
if test "$V" = 1 -o "$V" = 2; then
set -x
fi
arch=$(uname -m)
case $arch in
arm*|aarch*)
cpu=arm
tcc_cpu=arm
triplet=arm-unknown-linux-gnueabihf
cross_prefix=${triplet}-
;;
*)
cpu=x86
tcc_cpu=i386
triplet=i686-unknown-linux-gnu
cross_prefix=${triplet}-
;;
esac
export cpu
export cross_prefix
export tcc_cpu
export triplet
GCC_TCC=${GCC_TCC-./${cross_prefix}tcc}
TCC=${TCC-./tcc}
MES_PREFIX=${MES_PREFIX-mes}
OBJDUMP=${OBJDUMP-objdump}
DIFF=${DIFF-diff}
unset C_INCLUDE_PATH LIBRARY_PATH
t=${1-$MES_PREFIX/lib/tests/scaffold/t.c}
mkdir -p scaffold/tests
b=scaffold/tests/${t##*/}
rm -f "$b".i686-unknown-linux-gnu-out
rm -f "$b".mes-out
if test "$tcc_cpu" = i386; then
libtcc1=-ltcc1
elif test "$tcc_cpu" = arm; then
libtcc1='-lc -ltcc1 -ltcc1-mes'
libtcc1=
elif test "$tcc_cpu" = x86_64; then
libtcc1=-ltcc1
else
echo "cpu not supported: $mes_cpu"
fi
timeout=${timeout-timeout 5}
if ! $timeout echo; then
timeout=
fi
t=${1-lib/tests/scaffold/t.c}
b=$(dirname "$t")/$(basename "$t" .c)
co="$b"-$triplet-tcc
mo="$b"-mes-tcc
o="$co"
rm -f 1 1.s 1.link
rm -f 2 2.s 2.link
rm -f "$co" "$co".1
rm -f "$mo" "$mo".1
r=0
if [ -x ./i686-unknown-linux-gnu-tcc ]; then
./i686-unknown-linux-gnu-tcc\
-c\
-o "$b".mes-gcc-o\
-nostdlib\
-g\
-m32\
-D __TINYC__=1\
-I $MES_PREFIX/include\
-I $MES_PREFIX/scaffold/tests\
-I $MES_PREFIX/scaffold/tinycc\
"$t" &> 1
#$OBJDUMP -d "$t".mes-gcc-o > 1.s
./i686-unknown-linux-gnu-tcc\
-static\
-o "$b".mes-gcc-out\
-L .\
"$b".mes-gcc-o &> 1.link
if [ -x $GCC_TCC ]; then
$GCC_TCC \
-c \
-g \
-nostdlib \
-I $MES_PREFIX/include \
-I $MES_PREFIX/scaffold/tinycc \
-o "$o".o \
"$t" \
2> 1
$GCC_TCC \
-g \
-L . \
-o "$o" \
"$o".o \
-lc \
$libtcc1 \
2> 1.link
set +e
"$b".mes-gcc-out arg1 arg2 arg3 arg4 arg5 > "$b".mes-gcc-stdout
d=$(dirname "$t")
d=$(dirname "$d")
if [ "$d" = lib/tests ]; then
$timeout "$o" -s --long file0 file1 > "$o".1
else
$timeout "$o" arg1 arg2 arg3 arg4 arg5 > "$o".1
fi
m=$?
set -e
[ -f "$t".exit ] && r=$(cat "$t".exit)
[ -f "$b".exit ] && r=$(cat "$b".exit)
[ $m = $r ]
if [ -f "$t".expect ]; then
$DIFF -ub "$t".expect "$b".mes-gcc-stdout;
if [ -f "$b".expect ]; then
$DIFF -ub "$b".expect "$o".1;
fi
fi
$TCC\
-c\
-g\
-m32\
-o "$b".mes-o\
-D __TINYC__=1\
-I $MES_PREFIX/include\
-I $MES_PREFIX/scaffold/tests\
-I $MES_PREFIX/scaffold/tinycc\
"$t" &> 2
$OBJDUMP -d "$b".mes-o > 2.s || true
$TCC\
-static\
-o "$b".mes-out\
-g\
-m32\
-D __TINYC__=1\
-I $MES_PREFIX/include\
-I $MES_PREFIX/scaffold/tests\
-I $MES_PREFIX/scaffold/tinycc\
"$t" &> 2.link
o="$b"-mes-tcc
$TCC \
-c \
-g \
-nostdlib \
-I $MES_PREFIX/include \
-I $MES_PREFIX/scaffold/tinycc \
-o "$o".o \
"$t" \
2> 2
$TCC \
-g \
-L . \
-o "$o" \
"$o".o \
-lc \
$libtcc1 \
2> 2.link
set +e
"$b".mes-out arg1 arg2 arg3 arg4 arg5 > "$b".mes-stdout
d=$(dirname "$t")
d=$(dirname "$d")
if [ "$d" = lib/tests ]; then
$timeout "$o" -s --long file0 file1 > "$o".1
else
$timeout "$o" arg1 arg2 arg3 arg4 arg5 > "$o".1
fi
m=$?
#$OBJDUMP -d "$t".mes-out > 2.x
set -e
[ $m = $r ]
[ -f "$t".exit ] && r=$(cat "$t".exit)
if [ -f "$t".expect ]; then
$DIFF -ub "$t".expect "$b".mes-stdout;
[ -f "$b".exit ] && r=$(cat "$b".exit)
if [ -f "$b".expect ]; then
$DIFF -ub "$b".expect "$co".1;
$DIFF -ub "$co".1 "$mo".1;
fi
#diff -y 1.s 2.s
#diff -y 1 2