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:
parent
b3ee5ea9de
commit
52a29ab6f5
|
@ -54,3 +54,4 @@ tests/libtcc_test
|
|||
tests/vla_test
|
||||
tests/hello
|
||||
tests/tests2/fred.txt
|
||||
tests/tests2/*.1
|
||||
|
|
306
boot.sh
306
boot.sh
|
@ -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"
|
||||
|
|
270
bootstrap.sh
270
bootstrap.sh
|
@ -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
|
||||
|
|
|
@ -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
|
79
build-gcc.sh
79
build-gcc.sh
|
@ -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
|
||||
|
|
69
build-x86.sh
69
build-x86.sh
|
@ -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
314
build.sh
|
@ -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
102
cc.sh
|
@ -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
101
check.sh
|
@ -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
|
||||
|
|
31
compile.sh
31
compile.sh
|
@ -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
84
doit
|
@ -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 ||:
|
||||
|
|
26
install.sh
26
install.sh
|
@ -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
41
link.sh
|
@ -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
175
test.sh
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue