build: bootstrap build scripts.
* bootstrap.sh: New file. * build.sh: New file. * check.sh: New file. * doit: New file. * install.sh: New file. * test.sh: New file.
This commit is contained in:
parent
584478fca2
commit
9c97705c42
|
@ -0,0 +1,8 @@
|
|||
#export LIBRARY_PATH=/home/janneke/src/tinycc-seed
|
||||
#export INCLUDE_PATH=/home/janneke/src/mes/include
|
||||
|
||||
export C_INCLUDE_PATH=/home/janneke/src/mes/include
|
||||
export LIBRARY_PATH=/home/janneke/src/tinycc-seed
|
||||
|
||||
./configure --cc='mes-tcc -static' --cpu=i386
|
||||
make ONE_SOURCE=yes CPPFLAGS=-DONE_SOURCE=yes
|
2
Makefile
2
Makefile
|
@ -188,7 +188,7 @@ $(X)%.o : %.c $(LIBTCC_INC)
|
|||
$(X)tcc.o : tcctools.c
|
||||
|
||||
# Host Tiny C Compiler
|
||||
tcc$(EXESUF): tcc.o $(LIBTCC)
|
||||
$(PROGRAM_PREFIX)tcc$(EXESUF): tcc.o $(LIBTCC)
|
||||
$(CC) -o $@ $^ $(LIBS) $(LDFLAGS) $(LINK_LIBTCC)
|
||||
|
||||
# Cross Tiny C Compilers
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
TCC=${TCC-./mes-tcc}
|
||||
if [ "$TCC" = ./mes-tcc ]; then
|
||||
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot0-}
|
||||
elif [ "$TCC" = ./boot0-tcc ]; then
|
||||
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot1-}
|
||||
elif [ "$TCC" = ./boot1-tcc ]; then
|
||||
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot2-}
|
||||
elif [ "$TCC" = ./boot2-tcc ]; then
|
||||
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot3-}
|
||||
elif [ "$TCC" = ./boot3-tcc ]; then
|
||||
PROGRAM_PREFIX=${PROGRAM_PREFIX-boot4-}
|
||||
fi
|
||||
|
||||
unset C_INCLUDE_PATH LIBRARY_PATH
|
||||
PREFIX=${PREFIX-usr}
|
||||
mkdir -p $PREFIX
|
||||
ABSPREFIX=$(cd $PREFIX && pwd)
|
||||
GUIX=${GUIX-$(command -v guix||:)}
|
||||
MES_PREFIX=${MES_PREFIX-../mes}
|
||||
##MES_PREFIX=${MES_PREFIX-$(dirname $MESCC)/../share/mes}
|
||||
C_INCLUDE_PATH=${C_INCLUDE_PATH-$MES_PREFIX/include}
|
||||
TINYCC_SEED=${TINYCC_SEED-../tinycc-seed}
|
||||
LIBRARY_PATH=${LIBRARY_PATH-..$TINYCC_SEED}
|
||||
|
||||
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
|
||||
|
||||
|
||||
# ./configure --cc='mes-tcc -static' --cpu=i386
|
||||
# ${TCC-tcc} -static -o tcc tcc.c -DTCC_TARGET_I386 -Wall -g -O2 -I. -DONE_SOURCE=yes
|
||||
|
||||
if [ "$PROGRAM_PREFIX" = "boot0-" ]; then
|
||||
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
|
||||
-D inline=
|
||||
-D BOOTSTRAP=1
|
||||
-D HAVE_FLOAT_STUB=1
|
||||
-D CONFIG_TCCBOOT=1
|
||||
-D CONFIG_USE_LIBGCC=1
|
||||
-D TCC_MES_LIBC=1
|
||||
"}
|
||||
LIBTCC1=-ltcc1
|
||||
elif [ "$PROGRAM_PREFIX" = "boot1-" ]; then
|
||||
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
|
||||
-D BOOTSTRAP=1
|
||||
-D HAVE_BITFIELD=1
|
||||
-D HAVE_FLOAT_STUB=1
|
||||
-D CONFIG_TCCBOOT=1
|
||||
-D CONFIG_USE_LIBGCC=1
|
||||
-D TCC_MES_LIBC=1
|
||||
"}
|
||||
LIBTCC1=-ltcc1
|
||||
elif [ "$PROGRAM_PREFIX" = "boot2-" ]; then
|
||||
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
|
||||
-D BOOTSTRAP=1
|
||||
-D HAVE_BITFIELD=1
|
||||
-D HAVE_FLOAT_STUB=1
|
||||
-D HAVE_LONG_LONG=1
|
||||
-D CONFIG_TCCBOOT=1
|
||||
-D CONFIG_USE_LIBGCC=1
|
||||
-D TCC_MES_LIBC=1
|
||||
"}
|
||||
LIBTCC1=-ltcc1
|
||||
elif [ "$PROGRAM_PREFIX" = "boot3-" ]; then
|
||||
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
|
||||
-D BOOTSTRAP=1
|
||||
-D HAVE_FLOAT=1
|
||||
-D HAVE_BITFIELD=1
|
||||
-D HAVE_LONG_LONG=1
|
||||
-D CONFIG_TCCBOOT=1
|
||||
-D CONFIG_USE_LIBGCC=1
|
||||
-D TCC_MES_LIBC=1
|
||||
"}
|
||||
elif [ "$PROGRAM_PREFIX" = "boot4-" ]; then
|
||||
BOOT_CPPFLAGS=${BOOT_CPPFLAGS-"
|
||||
-D BOOTSTRAP=1
|
||||
-D HAVE_FLOAT=1
|
||||
-D HAVE_BITFIELD=1
|
||||
-D HAVE_LONG_LONG=1
|
||||
-D CONFIG_TCCBOOT=1
|
||||
-D CONFIG_USE_LIBGCC=1
|
||||
-D TCC_MES_LIBC=1
|
||||
"}
|
||||
fi
|
||||
|
||||
$TCC\
|
||||
-v\
|
||||
-static\
|
||||
-o ${PROGRAM_PREFIX}tcc\
|
||||
$BOOT_CPPFLAGS\
|
||||
-I .\
|
||||
-I $MES_PREFIX/include\
|
||||
-D TCC_TARGET_I386\
|
||||
-D 'CONFIG_TCCDIR="'$PREFIX'/lib/tcc"'\
|
||||
-D 'CONFIG_TCC_CRTPREFIX="'$PREFIX'/lib:{B}/lib:."'\
|
||||
-D 'CONFIG_TCC_ELFINTERP="'$interpreter'"'\
|
||||
-D 'CONFIG_TCC_LIBPATHS="'$ABSPREFIX'/lib:{B}/lib:."'\
|
||||
-D 'CONFIG_TCC_SYSINCLUDEPATHS="'$MES_PREFIX'/include:'$PREFIX'/include:{B}/include"'\
|
||||
-D 'TCC_LIBGCC="'$ABSPREFIX'/lib/libc.a"'\
|
||||
-D ONE_SOURCE=yes\
|
||||
-D CONFIG_TCC_LIBTCC1=1\
|
||||
-D CONFIG_TCC_STATIC=1\
|
||||
-D TCC_TARGET_I386=1\
|
||||
-L .\
|
||||
-L $TINYCC_SEED\
|
||||
tcc.c\
|
||||
$LIBTCC1
|
||||
|
||||
for i in 1 i n; do
|
||||
rm -f crt$i.o;
|
||||
./${PROGRAM_PREFIX}tcc -c $MES_PREFIX/lib/linux/x86-mes-gcc/crt$i.c
|
||||
done
|
||||
|
||||
# rm -f libc.a
|
||||
# ./${PROGRAM_PREFIX}tcc -c -I $MES_PREFIX/include -I $MES_PREFIX/lib $MES_PREFIX/lib/libc+gnu.c
|
||||
# ./${PROGRAM_PREFIX}tcc -ar rc libc.a libc+gnu.o
|
||||
|
||||
rm -f libtcc1.a
|
||||
./${PROGRAM_PREFIX}tcc -c -g -D TCC_TARGET_I386=1 -o libtcc1.o lib/libtcc1.c
|
||||
./${PROGRAM_PREFIX}tcc -ar rc libtcc1.a libtcc1.o
|
||||
mkdir -p $PREFIX/lib/tcc
|
||||
cp -f libtcc1.a $PREFIX/lib/tcc
|
|
@ -0,0 +1,12 @@
|
|||
#! /bin/sh
|
||||
set -ex
|
||||
|
||||
export PREFIX=usr
|
||||
export HEX2=../mescc-tools/bin/hex2
|
||||
export M1=../mescc-tools/bin/M1
|
||||
export MESCC=../mes/guile/mescc.scm
|
||||
export MES_PREFIX=../mes
|
||||
export TINYCC_SEED=../tinycc-seed
|
||||
|
||||
sh build.sh
|
||||
sh check.sh
|
|
@ -0,0 +1,20 @@
|
|||
#! /bin/sh
|
||||
set -ex
|
||||
rm -f tcc
|
||||
|
||||
GUIX=${GUIX-$(command -v guix||:)}
|
||||
MES_PREFIX=${MES_PREFIX-../mes}
|
||||
|
||||
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)
|
||||
|
||||
unset ONE_SOURCE
|
||||
./configure --tccdir=$PWD --crtprefix=$crtdir --extra-cflags="-DHAVE_FLOAT=1 -DHAVE_BITFIELD=1"
|
||||
make ETAGS
|
||||
make PROGRAM_PREFIX=gcc- gcc-tcc
|
||||
make libtcc1.a
|
|
@ -0,0 +1,62 @@
|
|||
#! /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}
|
||||
MES_PREFIX=${MES_PREFIX-${MESCC%/*}/../share/mes}
|
||||
TINYCC_SEED=${TINYCC_SEED-../tinycc-seed}
|
||||
cp $TINYCC_SEED/x86-mes-gcc/crt1.o crt1.o
|
||||
cp $TINYCC_SEED/x86-mes-gcc/crti.o crti.o
|
||||
cp $TINYCC_SEED/x86-mes-gcc/crtn.o crtn.o
|
||||
|
||||
CC=${CC-i686-unknown-linux-gnu-gcc}
|
||||
CFLAGS="
|
||||
-nostdinc
|
||||
-nostdlib
|
||||
-fno-builtin
|
||||
--include=$MES_PREFIX/lib/linux/x86-mes-gcc/crt1.c
|
||||
--include=$MES_PREFIX/lib/libc+tcc.c
|
||||
--include=$MES_PREFIX/lib/libtcc1.c
|
||||
-Wl,-Ttext-segment=0x1000000
|
||||
"
|
||||
|
||||
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
|
||||
ABSPREFIX=$(cd $PREFIX && pwd)
|
||||
cp $TINYCC_SEED/x86-mes-gcc/libc+tcc.o $ABSPREFIX/lib
|
||||
cp $TINYCC_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
|
|
@ -0,0 +1,110 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
export BUILD_DEBUG
|
||||
export MES_DEBUG
|
||||
export MES_PREFIX
|
||||
export PREFIX
|
||||
export TINYCC_SEED
|
||||
export interpreter
|
||||
|
||||
if [ -n "$BUILD_DEBUG" ]; then
|
||||
set -x
|
||||
MESCCFLAGS="$MESCCFLAGS -v"
|
||||
fi
|
||||
|
||||
rm -f tcc.E tcc.hex2 tcc.M1 tcc.m1 mes-tcc boot?-tcc
|
||||
|
||||
unset C_INCLUDE_PATH LIBRARY_PATH
|
||||
PREFIX=${PREFIX-usr}
|
||||
GUIX=${GUIX-$(command -v guix||:)}
|
||||
CC=${MESCC-mescc}
|
||||
MES=${MES-../mes/src/mes}
|
||||
MESCC=${MESCC-mescc}
|
||||
HEX2=${HEX2-hex2}
|
||||
M1=${M1-M1}
|
||||
BLOOD_ELF=${BLOOD_ELF-blood-elf}
|
||||
|
||||
MES_PREFIX=${MES_PREFIX-${MESCC%/*}/../share/mes}
|
||||
#MES_PREFIX=${MES_PREFIX-../mes}
|
||||
MES_SEED=${MES_SEED-../mes-seed}
|
||||
TINYCC_SEED=${TINYCC_SEED-../tinycc-seed}
|
||||
cp $TINYCC_SEED/x86-mes-tcc/crt1.o crt1.o
|
||||
cp $TINYCC_SEED/x86-mes-tcc/crti.o crti.o
|
||||
cp $TINYCC_SEED/x86-mes-tcc/crtn.o crtn.o
|
||||
|
||||
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
|
||||
ABSPREFIX=$(cd $PREFIX && pwd)
|
||||
cp $TINYCC_SEED/x86-mes-tcc/libc+tcc.o $ABSPREFIX/lib
|
||||
|
||||
|
||||
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 $TINYCC_SEED\
|
||||
-L $MES_SEED\
|
||||
-l c+tcc\
|
||||
$files\
|
||||
$TINYCC_SEED/x86-mes/libc+tcc.o
|
||||
|
||||
rm -f libc.a
|
||||
if false; then
|
||||
# ../mes/lib/linux-gcc.c:33: error: bad operand with opcode 'mov'
|
||||
# it works with bootx-tcc
|
||||
./mes-tcc -c -I $MES_PREFIX/include -I $MES_PREFIX/lib $MES_PREFIX/lib/libc+gnu.c
|
||||
./mes-tcc -ar rc libc.a libc+gnu.o
|
||||
else
|
||||
##./mes-tcc -ar rc libc.a $TINYCC_SEED/x86-mes-tcc/libc+gnu.o
|
||||
cp -f $TINYCC_SEED/x86-mes-gcc/libc+gnu.o .
|
||||
./mes-tcc -ar rc libc.a libc+gnu.o
|
||||
fi
|
||||
rm -f libtcc1.a
|
||||
cp -f $TINYCC_SEED/x86-mes-gcc/libtcc1.o .
|
||||
./mes-tcc -ar rc libtcc1.a libtcc1.o
|
||||
|
||||
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
|
|
@ -0,0 +1,78 @@
|
|||
#! /bin/sh
|
||||
set -e
|
||||
|
||||
if [ -n "$BUILD_DEBUG" ]; then
|
||||
set -x
|
||||
MESCCFLAGS="$MESCCFLAGS -v"
|
||||
fi
|
||||
|
||||
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}
|
||||
CFLAGS=${CFLAGS-}
|
||||
MES_PREFIX=${MES_PREFIX-${MESCC%/*}}
|
||||
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
|
||||
|
||||
ulimit -s 17030
|
||||
|
||||
if [ -n "$ONE_SOURCE" ]; then
|
||||
CFLAGS="$CFLAGS -D ONE_SOURCE=$ONE_SOURCE"
|
||||
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
|
||||
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\
|
||||
$t.c
|
||||
fi
|
||||
|
||||
tr -d '\r' < $t.M1 > $t.S
|
|
@ -0,0 +1,334 @@
|
|||
#! /bin/sh
|
||||
|
||||
###MESCC=${MESCC-mescc}
|
||||
MES_ARENA=70000000
|
||||
MES_MAX_ARENA=70000000
|
||||
export MES_ARENA MES_MAX_ARENA
|
||||
MES=guile
|
||||
MESCC=${MESCC-../mes/pre-inst-env mescc}
|
||||
|
||||
MES_PREFIX=${MES_PREFIX-../mes}
|
||||
MES_PREFIX=${MES_PREFIX-${MESCC%/*}}
|
||||
|
||||
tests="
|
||||
t
|
||||
00-exit-0
|
||||
01-return-0
|
||||
02-return-1
|
||||
03-call
|
||||
04-call-0
|
||||
05-call-1
|
||||
06-call-!1
|
||||
06-!call-1
|
||||
06-call-2
|
||||
06-call-string
|
||||
06-call-variable
|
||||
06-return-void
|
||||
07-include
|
||||
08-assign
|
||||
08-assign-negative
|
||||
08-assign-global
|
||||
10-if-0
|
||||
11-if-1
|
||||
12-if-==
|
||||
13-if-!=
|
||||
14-if-goto
|
||||
15-if-!f
|
||||
16-if-t
|
||||
17-compare-ge
|
||||
17-compare-gt
|
||||
17-compare-le
|
||||
17-compare-lt
|
||||
17-compare-unsigned-ge
|
||||
17-compare-unsigned-gt
|
||||
17-compare-unsigned-le
|
||||
17-compare-unsigned-lt
|
||||
17-compare-and
|
||||
17-compare-or
|
||||
17-compare-and-or
|
||||
17-compare-assign
|
||||
17-compare-call
|
||||
18-assign-shadow
|
||||
20-while
|
||||
21-char[]-simple
|
||||
21-char[]
|
||||
22-while-char[]
|
||||
23-global-pointer-init-null
|
||||
23-global-pointer-init
|
||||
23-global-pointer-ref
|
||||
23-global-pointer-pointer-ref
|
||||
23-pointer-sub
|
||||
23-pointer
|
||||
30-strlen
|
||||
31-oputs
|
||||
32-call-wrap
|
||||
32-compare
|
||||
33-and-or
|
||||
34-pre-post
|
||||
35-compare-char
|
||||
36-compare-arithmetic
|
||||
37-compare-assign
|
||||
38-compare-call-2
|
||||
38-compare-call-3
|
||||
38-compare-call
|
||||
40-if-else
|
||||
41-?
|
||||
42-goto-label
|
||||
43-for-do-while
|
||||
44-switch
|
||||
44-switch-fallthrough
|
||||
44-switch-body-fallthrough
|
||||
45-void-call
|
||||
46-function-static
|
||||
47-function-expression
|
||||
48-global-static
|
||||
50-assert
|
||||
51-pointer-sub
|
||||
51-itoa
|
||||
51-strcmp
|
||||
51-strncmp
|
||||
53-strcpy
|
||||
54-argc
|
||||
54-argv
|
||||
55-char-array
|
||||
60-math
|
||||
61-array
|
||||
62-array
|
||||
63-struct
|
||||
63-struct-pointer
|
||||
63-struct-local
|
||||
63-struct-function
|
||||
63-struct-assign
|
||||
63-struct-array
|
||||
63-struct-array-assign
|
||||
63-struct-array-compare
|
||||
63-struct-cell
|
||||
64-make-cell
|
||||
65-read
|
||||
66-local-char-array
|
||||
70-strchr
|
||||
70-stdarg
|
||||
70-printf-hello
|
||||
70-printf-simple
|
||||
70-printf
|
||||
71-struct-array
|
||||
72-typedef-struct-def
|
||||
73-union-hello
|
||||
73-union
|
||||
74-multi-line-string
|
||||
75-struct-union
|
||||
76-pointer-arithmetic-pp
|
||||
76-pointer-arithmetic
|
||||
77-pointer-assign
|
||||
78-union-struct
|
||||
79-int-array-simple
|
||||
79-int-array
|
||||
7a-struct-char-array
|
||||
7b-struct-int-array-hello
|
||||
7b-struct-int-array-pointer
|
||||
7b-struct-int-array
|
||||
7c-dynarray
|
||||
7d-cast-char
|
||||
7e-struct-array-access
|
||||
7f-struct-pointer-arithmetic
|
||||
7g-struct-byte-word-field
|
||||
7h-struct-assign
|
||||
7i-struct-struct-simple
|
||||
7i-struct-struct
|
||||
7j-strtoull
|
||||
7k-empty-for
|
||||
7k-for-each-elem-simple
|
||||
7k-for-each-elem
|
||||
7l-struct-any-size-array-simple
|
||||
7l-struct-any-size-array
|
||||
7m-struct-char-array-assign
|
||||
7n-struct-struct-array
|
||||
7o-struct-pre-post-simple
|
||||
7o-struct-pre-post
|
||||
7p-struct-cast
|
||||
7q-bit-field-simple
|
||||
7q-bit-field
|
||||
7r-sign-extend
|
||||
7s-struct-short
|
||||
7s-unsigned-compare
|
||||
7t-function-destruct
|
||||
7u-double
|
||||
7u-long-long
|
||||
7u-?-expression
|
||||
7u-call-?
|
||||
7u-inc-byte-word
|
||||
7u-struct-func
|
||||
7u-struct-size10
|
||||
7u-vstack
|
||||
80-setjmp
|
||||
81-qsort
|
||||
81-qsort-dupes
|
||||
82-define
|
||||
83-heterogenoous-init
|
||||
84-struct-field-list
|
||||
85-sizeof
|
||||
86-strncpy
|
||||
87-sscanf
|
||||
88-strrchr
|
||||
90-strspn
|
||||
90-strpbrk
|
||||
91-fseek
|
||||
92-stat
|
||||
93-fread-fwrite
|
||||
94-unsetenv
|
||||
95-signal
|
||||
96-strto
|
||||
97-fopen
|
||||
98-fopen
|
||||
99-readdir
|
||||
"
|
||||
|
||||
broken="
|
||||
t
|
||||
00-exit-0
|
||||
54-argc
|
||||
66-local-char-array
|
||||
70-strchr
|
||||
91-fseek
|
||||
99-readdir
|
||||
"
|
||||
|
||||
if [ ! -x ./i686-unknown-linux-gnu-tcc ]; then
|
||||
broken="$broken
|
||||
02-return-1
|
||||
05-call-1
|
||||
"
|
||||
fi
|
||||
|
||||
expect=$(echo $broken | wc -w)
|
||||
mkdir -p scaffold/tests
|
||||
|
||||
set +e
|
||||
pass=0
|
||||
fail=0
|
||||
total=0
|
||||
for t in $tests; do
|
||||
sh test.sh "$MES_PREFIX/scaffold/tests/$t" &> "scaffold/tests/$t".log
|
||||
r=$?
|
||||
total=$((total+1))
|
||||
if [ $r = 0 ]; then
|
||||
echo $t: [OK]
|
||||
pass=$((pass+1))
|
||||
else
|
||||
echo $t: [FAIL]
|
||||
fail=$((fail+1))
|
||||
fi
|
||||
done
|
||||
|
||||
tests="
|
||||
00_assignment
|
||||
01_comment
|
||||
02_printf
|
||||
03_struct
|
||||
04_for
|
||||
05_array
|
||||
06_case
|
||||
07_function
|
||||
08_while
|
||||
09_do_while
|
||||
|
||||
10_pointer
|
||||
11_precedence
|
||||
12_hashdefine
|
||||
13_integer_literals
|
||||
14_if
|
||||
15_recursion
|
||||
16_nesting
|
||||
17_enum
|
||||
18_include
|
||||
19_pointer_arithmetic
|
||||
|
||||
20_pointer_comparison
|
||||
21_char_array
|
||||
22_floating_point
|
||||
23_type_coercion
|
||||
24_math_library
|
||||
25_quicksort
|
||||
26_character_constants
|
||||
27_sizeof
|
||||
28_strings
|
||||
29_array_address
|
||||
|
||||
30_hanoi
|
||||
31_args
|
||||
32_led
|
||||
33_ternary_op
|
||||
34_array_assignment
|
||||
35_sizeof
|
||||
36_array_initialisers
|
||||
37_sprintf
|
||||
38_multiple_array_index
|
||||
39_typedef
|
||||
|
||||
40_stdio
|
||||
41_hashif
|
||||
42_function_pointer
|
||||
43_void_param
|
||||
44_scoped_declarations
|
||||
45_empty_for
|
||||
47_switch_return
|
||||
48_nested_break
|
||||
49_bracket_evaluation
|
||||
|
||||
50_logical_second_arg
|
||||
51_static
|
||||
52_unnamed_enum
|
||||
54_goto
|
||||
55_lshift_type
|
||||
"
|
||||
|
||||
broken="$broken
|
||||
22_floating_point
|
||||
23_type_coercion
|
||||
24_math_library
|
||||
49_bracket_evaluation
|
||||
55_lshift_type
|
||||
"
|
||||
|
||||
#22_floating_point ; float
|
||||
#23_type_coercion ; float
|
||||
#24_math_library ; float
|
||||
#27_sizeof ; float
|
||||
#34_array_assignment ; fails with GCC
|
||||
#37_sprintf ; integer formatting unsupported
|
||||
|
||||
#49_bracket_evaluation ; float
|
||||
|
||||
|
||||
mkdir -p scaffold/tinycc
|
||||
|
||||
expect=$(echo $broken | wc -w)
|
||||
for t in $tests; do
|
||||
if [ ! -f $MES_PREFIX/scaffold/tinycc/"$t.c" ]; then
|
||||
echo ' [SKIP]'
|
||||
continue;
|
||||
fi
|
||||
sh test.sh "$MES_PREFIX/scaffold/tinycc/$t" &> scaffold/tinycc/"$t".log
|
||||
r=$?
|
||||
total=$((total+1))
|
||||
if [ $r = 0 ]; then
|
||||
echo $t: [OK]
|
||||
pass=$((pass+1))
|
||||
else
|
||||
echo $t: [FAIL]
|
||||
fail=$((fail+1))
|
||||
fi
|
||||
done
|
||||
[ $expect != 0 ] && echo "expect: $expect"
|
||||
[ $fail != 0 ] && echo "failed: $fail"
|
||||
echo "passed: $pass"
|
||||
[ $fail -lt $expect ] && echo "solved: $(($expect - $fail))"
|
||||
echo "total: $total"
|
||||
if [ $fail != 0 -a $fail -gt $expect ]; then
|
||||
echo FAILED: $fail/$total
|
||||
exit 1
|
||||
elif [ $fail != 0 ]; then
|
||||
echo PASS: $pass/$total
|
||||
else
|
||||
echo PASS: $total
|
||||
fi
|
|
@ -0,0 +1,15 @@
|
|||
#! /bin/sh
|
||||
set -ex
|
||||
rm -f *.i686-unknown-linux-gnu-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
|
||||
set +e
|
||||
./mes-tcc -o main.mes-o -c -I ../mes/include ../mes/scaffold/main.c &> 2
|
||||
diff -y 1 2
|
||||
readelf -a main.i686-unknown-linux-gnu-o > 1.elf
|
||||
readelf -a main.mes-o > 2.elf
|
||||
diff -y 1.elf 2.elf || :
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
#! /bin/sh
|
||||
set -ex
|
||||
rm -f *.o *.a *.E *.hex2 *.mesc-o *.i686-unknown-linux-gnu-o *.M1
|
||||
rm -f 1 2 1.elf 2.elf
|
||||
|
||||
# trivial object
|
||||
set +e
|
||||
./tcc -c -I ../mes/mlibc/include ../mes/scaffold/main.c 2>/dev/null
|
||||
./i686-unknown-linux-gnu-tcc -o main.i686-unknown-linux-gnu-o -c -I ../mes/mlibc/include ../mes/scaffold/main.c 2> 1
|
||||
./tcc.mes -o main.mesc-o -c -I ../mes/mlibc/include ../mes/scaffold/main.c &> 2
|
||||
diff -y 1 2
|
||||
|
||||
readelf -a main.i686-unknown-linux-gnu-o > 1.elf
|
||||
readelf -a main.mesc-o > 2.elf
|
||||
diff -y 1.elf 2.elf
|
||||
|
||||
# trivial bin
|
||||
./tcc ../mes/scaffold/main.c
|
||||
./i686-unknown-linux-gnu-tcc -o a.i686-unknown-linux-gnu-out -I ../mes/mlibc/include ../mes/scaffold/main.c 2> 1.a
|
||||
./tcc.mes -o a.mes-out -I ../mes/mlibc/include ../mes/scaffold/main.c 2> 2.a
|
||||
diff -y 1.a 2.a
|
|
@ -0,0 +1,62 @@
|
|||
#! /bin/sh
|
||||
set -ex
|
||||
|
||||
export BLOOD_ELF
|
||||
export BUILD_DEBUG
|
||||
export GUILE_LOAD_PATH
|
||||
export HEX2
|
||||
export M1
|
||||
export MES
|
||||
export MESCC
|
||||
export MES_DEBUG
|
||||
export MES_PREFIX
|
||||
export ONE_SOURCE
|
||||
export PREFIX
|
||||
export PREPROCESS
|
||||
export TINYCC_SEED
|
||||
|
||||
PREFIX=usr
|
||||
HEX2=../mescc-tools/bin/hex2
|
||||
M1=../mescc-tools/bin/M1
|
||||
BLOOD_ELF=../mescc-tools/bin/blood-elf
|
||||
MES=${MES-../mes/src/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}
|
||||
|
||||
#GUILE_LOAD_PATH=/home/janneke/src/nyacc/module:$GUILE_LOAD_PATH
|
||||
GUILE_LOAD_PATH=nyacc
|
||||
|
||||
MES_DEBUG=2
|
||||
MES_PREFIX=${MES_PREFIX-../mes}
|
||||
TINYCC_SEED=${TINYCC_SEED-../tinycc-seed}
|
||||
|
||||
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
|
||||
|
||||
sh build-x86.sh
|
||||
sh build.sh
|
||||
sh compile.sh
|
||||
sh link.sh ||:
|
||||
sh check.sh
|
||||
rm -rf usr
|
||||
sh install.sh
|
|
@ -0,0 +1,26 @@
|
|||
#! /bin/sh
|
||||
|
||||
if [ -n "$BUILD_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
PREFIX=${PREFIX-usr}
|
||||
MES_PREFIX=${MES_PREFIX-${MESCC%/*}}
|
||||
TINYCC_SEED=${TINYCC_SEED-../tinycc-seed}
|
||||
|
||||
mkdir -p $PREFIX/bin
|
||||
cp tcc $PREFIX/bin
|
||||
tar -C $MES_PREFIX -cf- include | tar -C $PREFIX -xf-
|
||||
|
||||
mkdir -p $PREFIX/lib
|
||||
cp crt1.o $PREFIX/lib/crt1.o
|
||||
cp crti.o $PREFIX/lib/crti.o
|
||||
cp crtn.o $PREFIX/lib/crtn.o
|
||||
|
||||
mkdir -p $PREFIX/lib/tcc
|
||||
cp libc.a $PREFIX/lib
|
||||
cp libtcc1.a $PREFIX/lib/tcc
|
||||
|
||||
tar -C $TINYCC_SEED -cf- . | tar -C $PREFIX/lib -xf-
|
|
@ -0,0 +1,29 @@
|
|||
#! /bin/sh
|
||||
set -ex
|
||||
rm -f 1.a 2.a
|
||||
|
||||
MES_PREFIX=${MES_PREFIX-../mes}
|
||||
TINYCC_SEED=${TINYCC_SEED-../tinycc-seed}
|
||||
|
||||
# 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 $TINYCC_SEED "$c".c 2> "$b".mes-gcc-stderr
|
||||
set +e
|
||||
${MES_TCC-./mes-tcc}\
|
||||
-static -g -o "$b".mes-out -I $MES_PREFIX/include -L $TINYCC_SEED "$c".c 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.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
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
TCC=${TCC-./mes-tcc}
|
||||
MESCC=${MESCC-mescc}
|
||||
MES_PREFIX=${MES_PREFIX-../mes}
|
||||
MES_PREFIX=${MES_PREFIX-${MESCC%/*}}
|
||||
TINYCC_SEED=${TINYCC_SEED-../tinycc-seed}
|
||||
OBJDUMP=${OBJDUMP-objdump}
|
||||
DIFF=${DIFF-diff}
|
||||
|
||||
unset C_INCLUDE_PATH LIBRARY_PATH
|
||||
|
||||
t=${1-$MES_PREFIX/scaffold/tests/t}
|
||||
mkdir -p scaffold
|
||||
b=scaffold/${t##*/}
|
||||
rm -f "$b".i686-unknown-linux-gnu-out
|
||||
rm -f "$b".mes-out
|
||||
|
||||
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".c &> 1
|
||||
#$OBJDUMP -d "$t".mes-gcc-o > 1.s
|
||||
./i686-unknown-linux-gnu-tcc\
|
||||
-static\
|
||||
-o "$b".mes-gcc-out\
|
||||
-L .\
|
||||
-L $TINYCC_SEED\
|
||||
"$b".mes-gcc-o &> 1.link
|
||||
set +e
|
||||
"$b".mes-gcc-out arg1 arg2 arg3 arg4 arg5 > "$b".mes-gcc-stdout
|
||||
m=$?
|
||||
set -e
|
||||
[ -f "$t".exit ] && r=$(cat "$t".exit)
|
||||
[ $m = $r ]
|
||||
if [ -f "$t".expect ]; then
|
||||
$DIFF -ub "$t".expect "$b".mes-gcc-stdout;
|
||||
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".c &> 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\
|
||||
-L $TINYCC_SEED\
|
||||
"$t".c &> 2.link
|
||||
set +e
|
||||
"$b".mes-out arg1 arg2 arg3 arg4 arg5 > "$b".mes-stdout
|
||||
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;
|
||||
fi
|
||||
|
||||
#diff -y 1.s 2.s
|
||||
#diff -y 1 2
|
Loading…
Reference in New Issue