build: Use arch-dir.
* lib/x86-mes: Move from stage0. * build-aux/build-cc.sh: Create libraries in lib/gcc. Update users. * build-aux/build-mes.sh: Create libraries in lib/x86-mes. Update users. * build-aux/build-mes-gcc.sh: Rename from build-mlibc.sh. Create libraries in lib/x86-mes-gcc. Update callers. * build-aux/cc-mes-gcc.sh: Rename from cc-mlibc.sh. Update callers.
This commit is contained in:
parent
9f90960392
commit
272b522962
34
.gitignore
vendored
34
.gitignore
vendored
|
@ -1,35 +1,32 @@
|
||||||
*-
|
*-
|
||||||
*.blood-elf-M1
|
|
||||||
*.blood-elf-hex2
|
|
||||||
*.go
|
|
||||||
*~
|
*~
|
||||||
.#*
|
.#*
|
||||||
*.0-M1
|
|
||||||
*.0-guile
|
|
||||||
*.0-hex2
|
|
||||||
*.E
|
*.E
|
||||||
*.S
|
*.S
|
||||||
*.o
|
|
||||||
*.blood-elf
|
*.blood-elf
|
||||||
|
*.blood-elf-M1
|
||||||
|
*.blood-elf-hex2
|
||||||
*.gcc
|
*.gcc
|
||||||
|
*.gcc-o
|
||||||
|
*.gcc-out
|
||||||
|
*.go
|
||||||
*.guile
|
*.guile
|
||||||
*.log
|
*.log
|
||||||
*.gcc-o
|
*.mes-gcc
|
||||||
|
*.mes-gcc-o
|
||||||
|
*.mes-gcc-out
|
||||||
|
*.mes-gcc-out
|
||||||
|
*.mes-gcc-stdout
|
||||||
*.mes-o
|
*.mes-o
|
||||||
|
*.mes-out
|
||||||
*.mes-stdout
|
*.mes-stdout
|
||||||
*.mini-M1
|
*.mini-M1
|
||||||
*.mini-guile
|
*.mini-guile
|
||||||
*.mini-hex2
|
*.mini-hex2
|
||||||
*.mlibc-gcc
|
*.o
|
||||||
*.mlibc-o
|
*.seed-out
|
||||||
*.mlibc-out
|
|
||||||
*.mlibc-stdout
|
|
||||||
*.stderr
|
*.stderr
|
||||||
*.stdout
|
*.stdout
|
||||||
*.tcc-guile
|
|
||||||
!/stage0/*
|
|
||||||
!/stage0/*.c
|
|
||||||
/stage0/exit-42.*
|
|
||||||
|
|
||||||
/src/*.h
|
/src/*.h
|
||||||
/src/*.i
|
/src/*.i
|
||||||
|
@ -39,11 +36,6 @@
|
||||||
/.store
|
/.store
|
||||||
/.tarball-version
|
/.tarball-version
|
||||||
/ChangeLog
|
/ChangeLog
|
||||||
/a.out
|
|
||||||
*.gcc-out
|
|
||||||
*.mes-out
|
|
||||||
*.mlibc-out
|
|
||||||
*.seed-out
|
|
||||||
|
|
||||||
#keep this: bootstrap
|
#keep this: bootstrap
|
||||||
#/mes.mes
|
#/mes.mes
|
||||||
|
|
|
@ -14,8 +14,8 @@ all:
|
||||||
cc:
|
cc:
|
||||||
build-aux/build-cc.sh
|
build-aux/build-cc.sh
|
||||||
|
|
||||||
mlibc:
|
mes-gcc:
|
||||||
build-aux/build-mlibc.sh
|
build-aux/build-mes-gcc.sh
|
||||||
|
|
||||||
mes:
|
mes:
|
||||||
build-aux/build-mes.sh
|
build-aux/build-mes.sh
|
||||||
|
@ -43,7 +43,7 @@ seed: all-go
|
||||||
MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
|
MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
|
||||||
cd $(MES_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
|
cd $(MES_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
|
||||||
MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
|
MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
|
||||||
build-aux/build-mlibc.sh
|
build-aux/build-mes-gcc.sh
|
||||||
cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
|
cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
|
||||||
|
|
||||||
define HELP_TOP
|
define HELP_TOP
|
||||||
|
@ -53,7 +53,7 @@ Targets:
|
||||||
all update everything
|
all update everything
|
||||||
all-go update .go files
|
all-go update .go files
|
||||||
cc update src/mes.gcc-out
|
cc update src/mes.gcc-out
|
||||||
mlibc update src/mes.mlibc-out
|
mes-gcc update src/mes.mes-gcc-out
|
||||||
mes update src/mes
|
mes update src/mes
|
||||||
check run unit tests
|
check run unit tests
|
||||||
clean run git clean -dfx
|
clean run git clean -dfx
|
||||||
|
|
|
@ -50,4 +50,5 @@ build-aux/mes-snarf.scm src/posix.c
|
||||||
build-aux/mes-snarf.scm src/reader.c
|
build-aux/mes-snarf.scm src/reader.c
|
||||||
build-aux/mes-snarf.scm src/vector.c
|
build-aux/mes-snarf.scm src/vector.c
|
||||||
|
|
||||||
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc.sh lib/libmes
|
||||||
sh build-aux/cc.sh src/mes
|
sh build-aux/cc.sh src/mes
|
||||||
|
|
|
@ -62,17 +62,17 @@ C32FLAGS=${C32FLAGS-"
|
||||||
-nostdlib
|
-nostdlib
|
||||||
"}
|
"}
|
||||||
|
|
||||||
NOLINK=1 sh build-aux/cc-mlibc.sh lib/crt1
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/crt1
|
||||||
NOLINK=1 sh build-aux/cc-mlibc.sh lib/libc-mini-gcc
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/libc-mini
|
||||||
NOLINK=1 sh build-aux/cc-mlibc.sh lib/libc-gcc
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/libc
|
||||||
NOLINK=1 sh build-aux/cc-mlibc.sh lib/libc+tcc-gcc
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/libc+tcc
|
||||||
|
|
||||||
sh build-aux/cc-mlibc.sh scaffold/main
|
sh build-aux/cc-mes-gcc.sh scaffold/main
|
||||||
sh build-aux/cc-mlibc.sh scaffold/hello
|
sh build-aux/cc-mes-gcc.sh scaffold/hello
|
||||||
sh build-aux/cc-mlibc.sh scaffold/argv
|
sh build-aux/cc-mes-gcc.sh scaffold/argv
|
||||||
sh build-aux/cc-mlibc.sh scaffold/malloc
|
sh build-aux/cc-mes-gcc.sh scaffold/malloc
|
||||||
sh build-aux/cc-mlibc.sh scaffold/micro-mes
|
sh build-aux/cc-mes-gcc.sh scaffold/micro-mes
|
||||||
sh build-aux/cc-mlibc.sh scaffold/tiny-mes
|
sh build-aux/cc-mes-gcc.sh scaffold/tiny-mes
|
||||||
sh build-aux/cc-mlibc.sh scaffold/mini-mes
|
sh build-aux/cc-mes-gcc.sh scaffold/mini-mes
|
||||||
|
|
||||||
sh build-aux/cc-mlibc.sh src/mes
|
sh build-aux/cc-mes-gcc.sh src/mes
|
|
@ -55,24 +55,24 @@ HEX2FLAGS=${HEX2FLAGS-"
|
||||||
if [ -d "$MES_SEED" ]; then
|
if [ -d "$MES_SEED" ]; then
|
||||||
$M1\
|
$M1\
|
||||||
$M1FLAGS\
|
$M1FLAGS\
|
||||||
-f stage0/x86.M1\
|
-f lib/x86-mes/x86.M1\
|
||||||
-f $MES_SEED/crt1.M1\
|
-f $MES_SEED/x86-mes/crt1.S\
|
||||||
-o lib/crt1.o
|
-o lib/x86-mes/crt1.o
|
||||||
$M1\
|
$M1\
|
||||||
$M1FLAGS\
|
$M1FLAGS\
|
||||||
-f stage0/x86.M1\
|
-f lib/x86-mes/x86.M1\
|
||||||
-f $MES_SEED/libc-mes.M1\
|
-f $MES_SEED/x86-mes/libc.S\
|
||||||
-o lib/libc-mes.o
|
-o lib/x86-mes/libc.o
|
||||||
$M1\
|
$M1\
|
||||||
--LittleEndian\
|
--LittleEndian\
|
||||||
--Architecture=1\
|
--Architecture=1\
|
||||||
-f stage0/x86.M1\
|
-f lib/x86-mes/x86.M1\
|
||||||
-f $MES_SEED/mes.M1\
|
-f $MES_SEED/x86-mes/mes.S\
|
||||||
-o src/mes.o
|
-o src/mes.o
|
||||||
$BLOOD_ELF\
|
$BLOOD_ELF\
|
||||||
-f stage0/x86.M1\
|
-f lib/x86-mes/x86.M1\
|
||||||
-f $MES_SEED/mes.M1\
|
-f $MES_SEED/x86-mes/mes.S\
|
||||||
-f $MES_SEED/libc-mes.M1\
|
-f $MES_SEED/x86-mes/libc.S\
|
||||||
-o src/mes.S.blood-elf
|
-o src/mes.S.blood-elf
|
||||||
$M1\
|
$M1\
|
||||||
--LittleEndian\
|
--LittleEndian\
|
||||||
|
@ -81,9 +81,9 @@ if [ -d "$MES_SEED" ]; then
|
||||||
-o src/mes.o.blood-elf
|
-o src/mes.o.blood-elf
|
||||||
$HEX2\
|
$HEX2\
|
||||||
$HEX2FLAGS\
|
$HEX2FLAGS\
|
||||||
-f stage0/elf32-header.hex2\
|
-f lib/x86-mes/elf32-header.hex2\
|
||||||
-f lib/crt1.o\
|
-f lib/x86-mes/crt1.o\
|
||||||
-f lib/libc-mes.o\
|
-f lib/x86-mes/libc.o\
|
||||||
-f src/mes.o\
|
-f src/mes.o\
|
||||||
-f src/mes.o.blood-elf\
|
-f src/mes.o.blood-elf\
|
||||||
--exec_enable\
|
--exec_enable\
|
||||||
|
@ -91,25 +91,20 @@ if [ -d "$MES_SEED" ]; then
|
||||||
cp src/mes.seed-out src/mes
|
cp src/mes.seed-out src/mes
|
||||||
$M1\
|
$M1\
|
||||||
$M1FLAGS\
|
$M1FLAGS\
|
||||||
-f stage0/x86.M1\
|
-f lib/x86-mes/x86.M1\
|
||||||
-f $MES_SEED/libc+tcc-mes.M1\
|
-f $MES_SEED/x86-mes/libc+tcc.S\
|
||||||
-o lib/libc+tcc-mes.o
|
-o lib/x86-mes/libc+tcc.o
|
||||||
fi
|
fi
|
||||||
|
|
||||||
PREPROCESS=1
|
PREPROCESS=1
|
||||||
NOLINK=1 sh build-aux/cc-mes.sh lib/crt1
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crt1
|
||||||
NOLINK=1 sh build-aux/cc-mes.sh lib/libc-mini-mes
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc-mini
|
||||||
NOLINK=1 sh build-aux/cc-mes.sh lib/libc-mes
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc
|
||||||
NOLINK=1 sh build-aux/cc-mes.sh lib/libc+tcc-mes
|
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc+tcc
|
||||||
|
|
||||||
cp lib/crt1.mes-o lib/crt1.o
|
|
||||||
cp lib/libc-mini-mes.mes-o lib/libc-mini-mes.o
|
|
||||||
cp lib/libc-mes.mes-o lib/libc-mes.o
|
|
||||||
cp lib/libc+tcc-mes.mes-o lib/libc+tcc-mes.o
|
|
||||||
|
|
||||||
[ -n "$SEED" ] && exit 0
|
[ -n "$SEED" ] && exit 0
|
||||||
|
|
||||||
MES_ARENA=${MES_ARENA-30000000}
|
MES_ARENA=${MES_ARENA-10000000}
|
||||||
sh build-aux/mes-snarf.scm --mes src/gc.c
|
sh build-aux/mes-snarf.scm --mes src/gc.c
|
||||||
sh build-aux/mes-snarf.scm --mes src/lib.c
|
sh build-aux/mes-snarf.scm --mes src/lib.c
|
||||||
sh build-aux/mes-snarf.scm --mes src/math.c
|
sh build-aux/mes-snarf.scm --mes src/math.c
|
||||||
|
|
|
@ -43,23 +43,35 @@ C32FLAGS=${C32FLAGS-"
|
||||||
-nostdinc
|
-nostdinc
|
||||||
-nostdlib
|
-nostdlib
|
||||||
"}
|
"}
|
||||||
LIBC=${LIBC-lib/libc}
|
LIBC=${LIBC-c}
|
||||||
|
if [ -n "$LIBC" ]; then
|
||||||
|
CC32LIBS="lib/x86-mes-gcc/lib$LIBC.o"
|
||||||
|
fi
|
||||||
|
|
||||||
c=$1
|
c=$1
|
||||||
|
|
||||||
|
if [ -z "$ARCHDIR" ]; then
|
||||||
|
o="$c"
|
||||||
|
p="mes-gcc-"
|
||||||
|
else
|
||||||
|
b=${c##*/}
|
||||||
|
d=${c%/*}
|
||||||
|
o="$d/x86-mes-gcc/$b"
|
||||||
|
mkdir -p $d/x86-mes-gcc
|
||||||
|
fi
|
||||||
|
|
||||||
$CC32\
|
$CC32\
|
||||||
-c\
|
-c\
|
||||||
$CPPFLAGS\
|
$CPPFLAGS\
|
||||||
$C32FLAGS\
|
$C32FLAGS\
|
||||||
-o "$c".mlibc-o\
|
-o "$o".${p}o\
|
||||||
"$c".c
|
"$c".c
|
||||||
|
|
||||||
if [ -z "$NOLINK" ]; then
|
if [ -z "$NOLINK" ]; then
|
||||||
$CC32\
|
$CC32\
|
||||||
$C32FLAGS\
|
$C32FLAGS\
|
||||||
-o "$c".mlibc-out\
|
-o "$o".${p}out\
|
||||||
lib/crt1.mlibc-o\
|
lib/x86-mes-gcc/crt1.o\
|
||||||
"$c".mlibc-o\
|
"$o".${p}o\
|
||||||
$LIBC-gcc.mlibc-o\
|
|
||||||
$CC32LIBS
|
$CC32LIBS
|
||||||
fi
|
fi
|
|
@ -52,21 +52,31 @@ c=$1
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
if [ -z "$ARCHDIR" ]; then
|
||||||
|
o="$c"
|
||||||
|
p="mes-"
|
||||||
|
else
|
||||||
|
b=${c##*/}
|
||||||
|
d=${c%/*}
|
||||||
|
o="$d/x86-mes/$b"
|
||||||
|
mkdir -p $d/x86-mes
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$PREPROCESS" ]; then
|
if [ -n "$PREPROCESS" ]; then
|
||||||
sh $MESCC $MESCCFLAGS $CPPFLAGS -E "$c".c
|
sh $MESCC $MESCCFLAGS $CPPFLAGS -E -o "$o.E" "$c".c
|
||||||
sh $MESCC $MESCCFLAGS -S "$c".E
|
sh $MESCC $MESCCFLAGS -S "$o".E
|
||||||
sh $MESCC $MESCCFLAGS -c -o "$c".mes-o "$c".S
|
sh $MESCC $MESCCFLAGS -c -o "$o".${p}o "$o".S
|
||||||
if [ -z "$NOLINK" ]; then
|
if [ -z "$NOLINK" ]; then
|
||||||
sh $MESCC $MESCCFLAGS -o "$c".mes-out "$c".mes-o $MESCCLIBS
|
sh $MESCC $MESCCFLAGS -o "$o".${p}out "$o".${p}o $MESCCLIBS
|
||||||
fi
|
fi
|
||||||
elif [ -n "$COMPILE" ]; then
|
elif [ -n "$COMPILE" ]; then
|
||||||
sh $MESCC $MESCCFLAGS $CPPFLAGS -S "$c".c
|
sh $MESCC $MESCCFLAGS $CPPFLAGS -S -o "$o.S" "$c".c
|
||||||
sh $MESCC $MESCCFLAGS -c -o "$c".mes-o "$c".S
|
sh $MESCC $MESCCFLAGS -c -o "$o".${p}o "$o".S
|
||||||
if [ -z "$NOLINK" ]; then
|
if [ -z "$NOLINK" ]; then
|
||||||
sh $MESCC $MESCCFLAGS -o "$c".mes-out "$c".mes-o $MESCCLIBS
|
sh $MESCC $MESCCFLAGS -o "$o".${p}out "$o".${p}o $MESCCLIBS
|
||||||
fi
|
fi
|
||||||
elif [ -z "$NOLINK" ]; then
|
elif [ -z "$NOLINK" ]; then
|
||||||
sh $MESCC $MESCCFLAGS $CPPFLAGS -o "$c".mes-out "$c".c $MESCCLIBS
|
sh $MESCC $MESCCFLAGS $CPPFLAGS -o "$o".${p}out "$c".c $MESCCLIBS
|
||||||
else
|
else
|
||||||
sh $MESCC $MESCCFLAGS $CPPFLAGS -c -o "$c".mes-out "$c".c
|
sh $MESCC $MESCCFLAGS $CPPFLAGS -c -o "$o".${p}out "$c".c
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -41,18 +41,28 @@ CFLAGS=${CFLAGS-"
|
||||||
|
|
||||||
c=$1
|
c=$1
|
||||||
|
|
||||||
|
if [ -z "$ARCHDIR" ]; then
|
||||||
|
o="$c"
|
||||||
|
p="gcc-"
|
||||||
|
else
|
||||||
|
b=${c##*/}
|
||||||
|
d=${c%/*}
|
||||||
|
o="$d/gcc/$b"
|
||||||
|
mkdir -p $d/gcc
|
||||||
|
fi
|
||||||
|
|
||||||
$CC\
|
$CC\
|
||||||
-c\
|
-c\
|
||||||
$CPPFLAGS\
|
$CPPFLAGS\
|
||||||
$CFLAGS\
|
$CFLAGS\
|
||||||
-D POSIX=1\
|
-D POSIX=1\
|
||||||
-o "$c".gcc-o\
|
-o "$o".${p}o\
|
||||||
"$c".c
|
"$c".c
|
||||||
|
|
||||||
if [ -z "$NOLINK" ]; then
|
if [ -z "$NOLINK" ]; then
|
||||||
$CC\
|
$CC\
|
||||||
$CFLAGS\
|
$CFLAGS\
|
||||||
-o "$c".gcc-out\
|
-o "$o".${p}out\
|
||||||
"$c".gcc-o\
|
"$o".${p}o\
|
||||||
lib/libc-gcc.gcc-o
|
lib/gcc/libmes.o
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -26,7 +26,7 @@ export BLOOD_ELF GUILE HEX2 M1 MES MESCC
|
||||||
export M1FLAGS HEX2FLAGS PREPROCESS
|
export M1FLAGS HEX2FLAGS PREPROCESS
|
||||||
export MES_ARENA MES_PREFIX MES_SEED
|
export MES_ARENA MES_PREFIX MES_SEED
|
||||||
export BUILD_DEBUG
|
export BUILD_DEBUG
|
||||||
export CC32LIBS MESCCLIBS
|
export LIBC CC32LIBS MESCCLIBS
|
||||||
|
|
||||||
MES=${MES-src/mes}
|
MES=${MES-src/mes}
|
||||||
MESCC=${MESCC-scripts/mescc}
|
MESCC=${MESCC-scripts/mescc}
|
||||||
|
@ -144,17 +144,15 @@ expect=$(echo $broken | wc -w)
|
||||||
pass=0
|
pass=0
|
||||||
fail=0
|
fail=0
|
||||||
total=0
|
total=0
|
||||||
MESCCLIBS=
|
|
||||||
LIBC=libc/libc
|
|
||||||
for t in $tests; do
|
for t in $tests; do
|
||||||
if [ -z "${t/[012][0-9]-*/}" ]; then
|
if [ -z "${t/[012][0-9]-*/}" ]; then
|
||||||
LIBC="lib/libc-mini"
|
LIBC=c-mini
|
||||||
MESCCLIBS="-l c-mini"
|
MESCCLIBS="-l c-mini"
|
||||||
elif [ -z "${t/8[0-9]-*/}" ]; then
|
elif [ -z "${t/8[0-9]-*/}" ]; then
|
||||||
LIBC="lib/libc+tcc"
|
LIBC=c+tcc
|
||||||
MESCCLIBS="-l c+tcc"
|
MESCCLIBS="-l c+tcc"
|
||||||
else
|
else
|
||||||
LIBC=libc/libc
|
LIBC=c
|
||||||
MESCCLIBS=
|
MESCCLIBS=
|
||||||
fi
|
fi
|
||||||
sh build-aux/test.sh "scaffold/tests/$t" &> scaffold/tests/"$t".log
|
sh build-aux/test.sh "scaffold/tests/$t" &> scaffold/tests/"$t".log
|
||||||
|
@ -251,6 +249,7 @@ broken="$broken
|
||||||
42_function_pointer
|
42_function_pointer
|
||||||
46_grep
|
46_grep
|
||||||
49_bracket_evaluation
|
49_bracket_evaluation
|
||||||
|
55_lshift_type
|
||||||
"
|
"
|
||||||
|
|
||||||
#22_floating_point ; float
|
#22_floating_point ; float
|
||||||
|
|
|
@ -34,21 +34,21 @@ shift
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
rm -f "$t".mlibc-out
|
rm -f "$t".mes-gcc-out
|
||||||
if [ -n "$CC32" ]; then
|
if [ -n "$CC32" ]; then
|
||||||
sh build-aux/cc-mlibc.sh "$t"
|
sh build-aux/cc-mes-gcc.sh "$t"
|
||||||
|
|
||||||
r=0
|
r=0
|
||||||
[ -f "$t".exit ] && r=$(cat "$t".exit)
|
[ -f "$t".exit ] && r=$(cat "$t".exit)
|
||||||
set +e
|
set +e
|
||||||
"$t".mlibc-out > "$t".mlibc-stdout
|
"$t".mes-gcc-out > "$t".mes-gcc-stdout
|
||||||
m=$?
|
m=$?
|
||||||
cat "$t".mlibc-stdout
|
cat "$t".mes-gcc-stdout
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
[ $m = $r ]
|
[ $m = $r ]
|
||||||
if [ -f "$t".expect ]; then
|
if [ -f "$t".expect ]; then
|
||||||
$DIFF -ub "$t".expect "$t".mlibc-stdout;
|
$DIFF -ub "$t".expect "$t".mes-gcc-stdout;
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
6
build.sh
6
build.sh
|
@ -34,7 +34,7 @@ CC32=${CC32-$(command -v i686-unknown-linux-gnu-gcc)}
|
||||||
MESCC=${MESCC-$(command -v mescc)}
|
MESCC=${MESCC-$(command -v mescc)}
|
||||||
MES_SEED=${MES_SEED-../mes-seed}
|
MES_SEED=${MES_SEED-../mes-seed}
|
||||||
GUILE=${GUILE-$(command -v guile)}
|
GUILE=${GUILE-$(command -v guile)}
|
||||||
MES_ARENA=${MES_ARENA-300000000}
|
MES_ARENA=${MES_ARENA-100000000}
|
||||||
MES_DEBUG=${MES_DEBUG-1}
|
MES_DEBUG=${MES_DEBUG-1}
|
||||||
|
|
||||||
PREFIX=${PREFIX-/usr/local}
|
PREFIX=${PREFIX-/usr/local}
|
||||||
|
@ -86,8 +86,8 @@ if [ -n "$CC" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$CC32" ]; then
|
if [ -n "$CC32" ]; then
|
||||||
sh build-aux/build-mlibc.sh
|
sh build-aux/build-mes-gcc.sh
|
||||||
cp src/mes.mlibc-out src/mes
|
cp src/mes.mes-gcc-out src/mes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sh build-aux/build-mes.sh
|
sh build-aux/build-mes.sh
|
||||||
|
|
2
check.sh
2
check.sh
|
@ -25,7 +25,7 @@ export BUILD_DEBUG
|
||||||
CC32=${CC32-$(command -v i686-unknown-linux-gnu-gcc)}
|
CC32=${CC32-$(command -v i686-unknown-linux-gnu-gcc)}
|
||||||
GUILE=${GUILE-guile}
|
GUILE=${GUILE-guile}
|
||||||
MES=${MES-src/mes}
|
MES=${MES-src/mes}
|
||||||
MES_ARENA=${MES_ARENA-300000000}
|
MES_ARENA=${MES_ARENA-100000000}
|
||||||
PREFIX=
|
PREFIX=
|
||||||
|
|
||||||
if ! command -v $GUILE > /dev/null; then
|
if ! command -v $GUILE > /dev/null; then
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <libmes.h>
|
||||||
|
|
||||||
int test ();
|
int test ();
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -17,7 +17,7 @@ mkdir -p $MES_PREFIX/lib
|
||||||
cp scripts/mescc $PREFIX/bin/mescc
|
cp scripts/mescc $PREFIX/bin/mescc
|
||||||
|
|
||||||
mkdir -p $MES_PREFIX
|
mkdir -p $MES_PREFIX
|
||||||
tar -cf- doc guile include lib module scaffold stage0 | tar -xf- -C $MES_PREFIX
|
tar -cf- doc guile include lib module scaffold | tar -xf- -C $MES_PREFIX
|
||||||
|
|
||||||
GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-2.2}
|
GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-2.2}
|
||||||
DATADIR=${MODULEDIR-$PREFIX/share/mes}
|
DATADIR=${MODULEDIR-$PREFIX/share/mes}
|
||||||
|
|
|
@ -29,12 +29,6 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <libc-gcc.c>
|
|
||||||
#include <linux+tcc-gcc.c>
|
|
||||||
#include <libc+tcc.c>
|
|
||||||
#include <getopt.c>
|
|
||||||
#include <m4.c>
|
|
||||||
|
|
||||||
int errno;
|
int errno;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -29,11 +29,6 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <libc-mes.c>
|
|
||||||
#include <linux+tcc-mes.c>
|
|
||||||
#include <libc+tcc.c>
|
|
||||||
#include <getopt.c>
|
|
||||||
|
|
||||||
int errno;
|
int errno;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -30,6 +30,23 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <libc.c>
|
||||||
|
|
||||||
|
#if __MESC__
|
||||||
|
|
||||||
|
#include <linux+tcc-mes.c>
|
||||||
|
#include <libc+tcc-mes.c>
|
||||||
|
#include <getopt.c>
|
||||||
|
|
||||||
|
#else // !__MESC__
|
||||||
|
|
||||||
|
#include <linux+tcc-gcc.c>
|
||||||
|
#include <libc+tcc-gcc.c>
|
||||||
|
#include <getopt.c>
|
||||||
|
#include <m4.c>
|
||||||
|
|
||||||
|
#endif // !__MESC__
|
||||||
|
|
||||||
int
|
int
|
||||||
dlclose (void *handle)
|
dlclose (void *handle)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +125,10 @@ ftell (FILE *stream)
|
||||||
int
|
int
|
||||||
fseek (FILE *stream, long offset, int whence)
|
fseek (FILE *stream, long offset, int whence)
|
||||||
{
|
{
|
||||||
return lseek ((int)stream, offset, whence);
|
int pos = lseek ((int)stream, offset, whence);
|
||||||
|
if (pos >= 0)
|
||||||
|
return 0;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
/* -*-comment-start: "//";comment-end:""-*-
|
|
||||||
* Mes --- Maxwell Equations of Software
|
|
||||||
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
||||||
*
|
|
||||||
* This file is part of Mes.
|
|
||||||
*
|
|
||||||
* Mes is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or (at
|
|
||||||
* your option) any later version.
|
|
||||||
*
|
|
||||||
* Mes is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <libmes.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <libmes.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <linux-mini-gcc.c>
|
|
||||||
#include <libc-mini.c>
|
|
||||||
#include <linux-gcc.c>
|
|
||||||
#include <libmes.c>
|
|
||||||
#include <libc.c>
|
|
|
@ -1,32 +0,0 @@
|
||||||
/* -*-comment-start: "//";comment-end:""-*-
|
|
||||||
* Mes --- Maxwell Equations of Software
|
|
||||||
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
||||||
*
|
|
||||||
* This file is part of Mes.
|
|
||||||
*
|
|
||||||
* Mes is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or (at
|
|
||||||
* your option) any later version.
|
|
||||||
*
|
|
||||||
* Mes is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <libmes.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
void _env ();
|
|
||||||
|
|
||||||
#include <linux-mini-mes.c>
|
|
||||||
#include <libc-mini.c>
|
|
||||||
#include <linux-mes.c>
|
|
||||||
#include <libmes.c>
|
|
||||||
#include <libc.c>
|
|
|
@ -1,22 +0,0 @@
|
||||||
/* -*-comment-start: "//";comment-end:""-*-
|
|
||||||
* Mes --- Maxwell Equations of Software
|
|
||||||
* Copyright © 2016,2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
||||||
*
|
|
||||||
* This file is part of Mes.
|
|
||||||
*
|
|
||||||
* Mes is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or (at
|
|
||||||
* your option) any later version.
|
|
||||||
*
|
|
||||||
* Mes is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux-mini-gcc.c>
|
|
||||||
#include <libc-mini.c>
|
|
|
@ -1,22 +0,0 @@
|
||||||
/* -*-comment-start: "//";comment-end:""-*-
|
|
||||||
* Mes --- Maxwell Equations of Software
|
|
||||||
* Copyright © 2016,2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
||||||
*
|
|
||||||
* This file is part of Mes.
|
|
||||||
*
|
|
||||||
* Mes is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or (at
|
|
||||||
* your option) any later version.
|
|
||||||
*
|
|
||||||
* Mes is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux-mini-mes.c>
|
|
||||||
#include <libc-mini.c>
|
|
|
@ -47,3 +47,13 @@ puts (char const* s)
|
||||||
write (1, s, i);
|
write (1, s, i);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __MESC__
|
||||||
|
|
||||||
|
#include <linux-mini-mes.c>
|
||||||
|
|
||||||
|
#else // !__MESC__
|
||||||
|
|
||||||
|
#include <linux-mini-gcc.c>
|
||||||
|
|
||||||
|
#endif // !__MESC__
|
||||||
|
|
38
lib/libc.c
38
lib/libc.c
|
@ -22,15 +22,45 @@
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <libmes.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <libmes.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#if __MESC__
|
||||||
|
|
||||||
|
#include <linux-mes.c>
|
||||||
|
|
||||||
|
#else // !__MESC__
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <linux-gcc.c>
|
||||||
|
|
||||||
|
#endif // !__MESC__
|
||||||
|
|
||||||
|
#include <libc-mini.c>
|
||||||
|
#include <libmes.c>
|
||||||
|
|
||||||
int g_stdin = 0;
|
int g_stdin = 0;
|
||||||
|
|
||||||
void _env ();
|
void _env ();
|
||||||
|
|
||||||
int
|
int
|
||||||
eputc (int c)
|
getchar ()
|
||||||
{
|
{
|
||||||
return fdputc (c, STDERR);
|
return fdgetc (g_stdin);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
putchar (int c)
|
||||||
|
{
|
||||||
|
write (STDOUT, (char*)&c, 1);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -62,10 +92,6 @@ fopen (char const* file_name, char const* mode)
|
||||||
/* Everything else is a read */
|
/* Everything else is a read */
|
||||||
fd = open (file_name, 0, 0);
|
fd = open (file_name, 0, 0);
|
||||||
|
|
||||||
/* Negative numbers are error codes */
|
|
||||||
if (fd > 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return (FILE*)fd;
|
return (FILE*)fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
24
lib/libmes.c
24
lib/libmes.c
|
@ -19,6 +19,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libmes.h>
|
#include <libmes.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
isdigit (int c)
|
isdigit (int c)
|
||||||
|
@ -169,13 +171,6 @@ fdputc (int c, int fd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
putchar (int c)
|
|
||||||
{
|
|
||||||
write (STDOUT, (char*)&c, 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
fdputs (char const* s, int fd)
|
fdputs (char const* s, int fd)
|
||||||
{
|
{
|
||||||
|
@ -192,8 +187,19 @@ fdungetc (int c, int fd)
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if POSIX
|
||||||
|
#define STDERR 2
|
||||||
int
|
int
|
||||||
getchar ()
|
eputs (char const* s)
|
||||||
{
|
{
|
||||||
return fdgetc (g_stdin);
|
int i = strlen (s);
|
||||||
|
write (STDERR, s, i);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
eputc (int c)
|
||||||
|
{
|
||||||
|
return fdputc (c, STDERR);
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,8 +100,6 @@
|
||||||
hex2-file-name))
|
hex2-file-name))
|
||||||
|
|
||||||
(define (mescc:link options)
|
(define (mescc:link options)
|
||||||
(define (library->hex2 o)
|
|
||||||
(prefix-file options (string-append "lib/lib" o "-mes.o")))
|
|
||||||
(let* ((files (option-ref options '() '("a.c")))
|
(let* ((files (option-ref options '() '("a.c")))
|
||||||
(source-files (filter (disjoin .c? .E?) files))
|
(source-files (filter (disjoin .c? .E?) files))
|
||||||
(S-files (filter .S? files))
|
(S-files (filter .S? files))
|
||||||
|
@ -120,9 +118,9 @@
|
||||||
(list (infos->hex2 options hex2-file-name infos)))))
|
(list (infos->hex2 options hex2-file-name infos)))))
|
||||||
(libraries (filter-map (multi-opt 'library) options))
|
(libraries (filter-map (multi-opt 'library) options))
|
||||||
(libraries (if (pair? libraries) libraries '("c")))
|
(libraries (if (pair? libraries) libraries '("c")))
|
||||||
(hex2-libraries (map library->hex2 libraries))
|
(hex2-libraries (map (cut find-library options ".o" <>) libraries))
|
||||||
(hex2-files (append hex2-files hex2-libraries))
|
(hex2-files (append hex2-files hex2-libraries))
|
||||||
(S-files (append S-files (map (cut replace-suffix <> ".S") hex2-libraries)))
|
(S-files (append S-files (map (cut find-library options ".S" <>) libraries)))
|
||||||
(debug-info? (option-ref options 'debug-info #f))
|
(debug-info? (option-ref options 'debug-info #f))
|
||||||
(S-files (cons (replace-suffix input-file-name ".S") S-files))
|
(S-files (cons (replace-suffix input-file-name ".S") S-files))
|
||||||
(elf-footer (and debug-info?
|
(elf-footer (and debug-info?
|
||||||
|
@ -157,7 +155,7 @@
|
||||||
(command `(,M1
|
(command `(,M1
|
||||||
"--LittleEndian"
|
"--LittleEndian"
|
||||||
"--Architecture=1"
|
"--Architecture=1"
|
||||||
"-f" ,(prefix-file options "stage0/x86.M1")
|
"-f" ,(arch-find options "x86.M1")
|
||||||
,@(append-map (cut list "-f" <>) M1-files)
|
,@(append-map (cut list "-f" <>) M1-files)
|
||||||
"-o" ,hex2-file-name)))
|
"-o" ,hex2-file-name)))
|
||||||
(when verbose?
|
(when verbose?
|
||||||
|
@ -170,21 +168,20 @@
|
||||||
(elf-file-name (cond ((option-ref options 'output #f))
|
(elf-file-name (cond ((option-ref options 'output #f))
|
||||||
(else (replace-suffix input-file-name ""))))
|
(else (replace-suffix input-file-name ""))))
|
||||||
(verbose? (option-ref options 'verbose #f))
|
(verbose? (option-ref options 'verbose #f))
|
||||||
(elf-footer (or elf-footer (prefix-file options "stage0/elf32-footer-single-main.hex2")))
|
(elf-footer (or elf-footer (arch-find options "elf32-footer-single-main.hex2")))
|
||||||
(hex2 (or (getenv "HEX2") "hex2"))
|
(hex2 (or (getenv "HEX2") "hex2"))
|
||||||
(command `(,hex2
|
(command `(,hex2
|
||||||
"--LittleEndian"
|
"--LittleEndian"
|
||||||
"--Architecture=1"
|
"--Architecture=1"
|
||||||
"--BaseAddress=0x1000000"
|
"--BaseAddress=0x1000000"
|
||||||
"-f" ,(prefix-file options "stage0/elf32-header.hex2")
|
"-f" ,(arch-find options "elf32-header.hex2")
|
||||||
"-f" ,(prefix-file options "lib/crt1.o")
|
"-f" ,(arch-find options "crt1.o")
|
||||||
,@(append-map (cut list "-f" <>) hex2-files)
|
,@(append-map (cut list "-f" <>) hex2-files)
|
||||||
"-f" ,elf-footer
|
"-f" ,elf-footer
|
||||||
"--exec_enable"
|
"--exec_enable"
|
||||||
"-o" ,elf-file-name)))
|
"-o" ,elf-file-name)))
|
||||||
(when verbose?
|
(when verbose?
|
||||||
(stderr "command=~s\n" command)
|
(stderr "~a\n" (string-join command)))
|
||||||
(format (current-error-port) "~a\n" (string-join command)))
|
|
||||||
(and (zero? (apply system* command))
|
(and (zero? (apply system* command))
|
||||||
elf-file-name)))
|
elf-file-name)))
|
||||||
|
|
||||||
|
@ -196,7 +193,7 @@
|
||||||
(verbose? (option-ref options 'verbose #f))
|
(verbose? (option-ref options 'verbose #f))
|
||||||
(blood-elf (or (getenv "BLOOD_ELF") "blood-elf"))
|
(blood-elf (or (getenv "BLOOD_ELF") "blood-elf"))
|
||||||
(command `(,blood-elf
|
(command `(,blood-elf
|
||||||
"-f" ,(prefix-file options "stage0/x86.M1")
|
"-f" ,(arch-find options "x86.M1")
|
||||||
,@(append-map (cut list "-f" <>) M1-files)
|
,@(append-map (cut list "-f" <>) M1-files)
|
||||||
"-o" ,M1-blood-elf-footer)))
|
"-o" ,M1-blood-elf-footer)))
|
||||||
(when verbose?
|
(when verbose?
|
||||||
|
@ -211,12 +208,27 @@
|
||||||
(base (if (pair? (cdr parts)) (drop-right parts 1))))
|
(base (if (pair? (cdr parts)) (drop-right parts 1))))
|
||||||
(string-append (string-join base ".") suffix)))
|
(string-append (string-join base ".") suffix)))
|
||||||
|
|
||||||
|
(define (find-library options ext o)
|
||||||
|
(arch-find options (string-append "lib" o ext)))
|
||||||
|
|
||||||
|
(define* (arch-find options file-name)
|
||||||
|
(let* ((path (cons (prefix-file options "lib")
|
||||||
|
(filter-map (multi-opt 'library-dir) options)))
|
||||||
|
(arch-file-name (string-append "x86-mes/" file-name))
|
||||||
|
(verbose? (option-ref options 'verbose #f)))
|
||||||
|
(when verbose?
|
||||||
|
(stderr "arch-find=~s\n" arch-file-name)
|
||||||
|
(stderr " path=~s\n" path)
|
||||||
|
(stderr " => ~s\n" (search-path path arch-file-name)))
|
||||||
|
(search-path path arch-file-name)))
|
||||||
|
|
||||||
(define (prefix-file options file-name)
|
(define (prefix-file options file-name)
|
||||||
(let ((prefix (option-ref options 'prefix "")))
|
(let ((prefix (option-ref options 'prefix "")))
|
||||||
(define (prefix-file o)
|
(define (prefix-file o)
|
||||||
(if (string-null? prefix) o (string-append prefix "/" o)))
|
(if (string-null? prefix) o (string-append prefix "/" o)))
|
||||||
(prefix-file file-name)))
|
(prefix-file file-name)))
|
||||||
|
|
||||||
|
|
||||||
(define (multi-opt option-name) (lambda (o) (and (eq? (car o) option-name) (cdr o))))
|
(define (multi-opt option-name) (lambda (o) (and (eq? (car o) option-name) (cdr o))))
|
||||||
|
|
||||||
(define (.c? o) (or (string-suffix? ".c" o)
|
(define (.c? o) (or (string-suffix? ".c" o)
|
||||||
|
|
|
@ -57,16 +57,6 @@ add2 (void *ptab)
|
||||||
|
|
||||||
struct foo *hash_ident[10];
|
struct foo *hash_ident[10];
|
||||||
|
|
||||||
#if !defined (__TINYC__)
|
|
||||||
void *
|
|
||||||
memset (void *s, int c, size_t n)
|
|
||||||
{
|
|
||||||
char *p = s;
|
|
||||||
while (n--) *p++ = c;
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
test ()
|
test ()
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,15 +24,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if !defined ( __TINYC__)
|
|
||||||
unsigned long long
|
|
||||||
strtoull (char const *p, char **end, int base)
|
|
||||||
{
|
|
||||||
*end = p;
|
|
||||||
return abtoi (end, base);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
test ()
|
test ()
|
||||||
{
|
{
|
||||||
|
@ -43,10 +34,10 @@ test ()
|
||||||
if (strcmp (p, "foo\n")) return 2;
|
if (strcmp (p, "foo\n")) return 2;
|
||||||
|
|
||||||
p = "2azar\n";
|
p = "2azar\n";
|
||||||
n = strtoull (p, (char**)&p, 16);
|
n = strtoull (p, (char**)&p, 16);
|
||||||
if (n != 42) return 3;
|
if (n != 42) return 3;
|
||||||
eputs (p);
|
eputs (p);
|
||||||
if (strcmp (p, "zar\n")) return 4;
|
if (strcmp (p, "zar\n")) return 4;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,10 @@ PREFIX=${PREFIX-@PREFIX@}
|
||||||
if [ "$PREFIX" = @PREFIX""@ -o ! -d "$PREFIX" ]
|
if [ "$PREFIX" = @PREFIX""@ -o ! -d "$PREFIX" ]
|
||||||
then
|
then
|
||||||
MES_PREFIX=${MES_PREFIX-$(cd $(dirname $0)/.. && pwd)}
|
MES_PREFIX=${MES_PREFIX-$(cd $(dirname $0)/.. && pwd)}
|
||||||
export MES_PREFIX
|
else
|
||||||
|
MES_PREFIX=${MES_PREFIX-$PREFIX/share/mes}
|
||||||
fi
|
fi
|
||||||
|
export MES_PREFIX
|
||||||
mes_p=$(command -v mes)
|
mes_p=$(command -v mes)
|
||||||
if [ '(' -z "$mes_p" -a -z "$MES" ')' -o "$MES" = "guile" -o "$MES" = "mes.guile" ]; then
|
if [ '(' -z "$mes_p" -a -z "$MES" ')' -o "$MES" = "guile" -o "$MES" = "mes.guile" ]; then
|
||||||
GODIR=${GODIR-@GODIR@}
|
GODIR=${GODIR-@GODIR@}
|
||||||
|
@ -50,7 +52,10 @@ fi
|
||||||
#:use-module (mescc mescc)
|
#:use-module (mescc mescc)
|
||||||
#:export (main))
|
#:export (main))
|
||||||
|
|
||||||
(define %prefix (if (string-prefix? "@PREFIX" "@PREFIX@") (or (getenv "MES_PREFIX") "") "@PREFIX@"))
|
(define %prefix (or (getenv "MES_PREFIX")
|
||||||
|
(if (string-prefix? "@PREFIX" "@PREFIX@")
|
||||||
|
""
|
||||||
|
"@PREFIX@/share/mes")))
|
||||||
|
|
||||||
(define %version (if (string-prefix? "@VERSION" "@VERSION@") "git"
|
(define %version (if (string-prefix? "@VERSION" "@VERSION@") "git"
|
||||||
"@VERSION@"))
|
"@VERSION@"))
|
||||||
|
@ -76,6 +81,7 @@ fi
|
||||||
(debug-info (single-char #\g))
|
(debug-info (single-char #\g))
|
||||||
(help (single-char #\h))
|
(help (single-char #\h))
|
||||||
(include (single-char #\I) (value #t))
|
(include (single-char #\I) (value #t))
|
||||||
|
(library-dir (single-char #\L) (value #t))
|
||||||
(library (single-char #\l) (value #t))
|
(library (single-char #\l) (value #t))
|
||||||
(preprocess (single-char #\E))
|
(preprocess (single-char #\E))
|
||||||
(output (single-char #\o) (value #t))
|
(output (single-char #\o) (value #t))
|
||||||
|
@ -99,6 +105,7 @@ Usage: mescc [OPTION]... FILE...
|
||||||
-g add debug info [GDB, objdump] TODO: hex2 footer
|
-g add debug info [GDB, objdump] TODO: hex2 footer
|
||||||
-h, --help display this help and exit
|
-h, --help display this help and exit
|
||||||
-I DIR append DIR to include path
|
-I DIR append DIR to include path
|
||||||
|
-L DIR append DIR to library path
|
||||||
-l LIBNAME link with LIBNAME
|
-l LIBNAME link with LIBNAME
|
||||||
-o FILE write output to FILE
|
-o FILE write output to FILE
|
||||||
-S preprocess and compile only; do not assemble or link
|
-S preprocess and compile only; do not assemble or link
|
||||||
|
|
|
@ -25,12 +25,8 @@
|
||||||
#include <libmes.h>
|
#include <libmes.h>
|
||||||
|
|
||||||
//#define MES_MINI 1
|
//#define MES_MINI 1
|
||||||
#if _POSIX_SOURCE
|
|
||||||
int ARENA_SIZE = 300000000; // 32b: 4GiB, 64b: 8 GiB
|
|
||||||
#else
|
|
||||||
int ARENA_SIZE = 200000; // 32b: 2MiB, 64b: 4 MiB
|
int ARENA_SIZE = 200000; // 32b: 2MiB, 64b: 4 MiB
|
||||||
#endif
|
int MAX_ARENA_SIZE = 100000000;
|
||||||
int MAX_ARENA_SIZE = 300000000;
|
|
||||||
|
|
||||||
int JAM_SIZE = 20000;
|
int JAM_SIZE = 20000;
|
||||||
int GC_SAFETY = 2000;
|
int GC_SAFETY = 2000;
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
;;; -*-scheme-*-
|
|
||||||
;;; Copyright (C) 2016 Jeremiah Orians
|
|
||||||
;;; Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
||||||
;;; This file is part of stage0.
|
|
||||||
;;;
|
|
||||||
;;; stage0 is free software: you an redistribute it and/or modify
|
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
|
||||||
;;; (at your option) any later version.
|
|
||||||
;;;
|
|
||||||
;;; stage0 is distributed in the hope that it will be useful,
|
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
;;; GNU General Public License for more details.
|
|
||||||
;;;
|
|
||||||
;;; You should have received a copy of the GNU General Public License
|
|
||||||
;;; along with stage0. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
;;; elf32.hex3: 32 bit elf header in hex3
|
|
||||||
|
|
||||||
;; ELF Header
|
|
||||||
("*elf-header*"
|
|
||||||
#X7F #x45 #X4C #x46 ; e_ident[EI_MAG0-3] ELF's magic number
|
|
||||||
|
|
||||||
#x01 ; e_ident[EI_CLASS] Indicating 32 bit
|
|
||||||
#x01 ; e_ident[EI_DATA] Indicating little endianness
|
|
||||||
#x01 ; e_ident[EI_VERSION] Indicating original elf
|
|
||||||
|
|
||||||
#x00 ; e_ident[EI_OSABI] Set at 0 because none cares
|
|
||||||
#x00 ; e_ident[EI_ABIVERSION] See above
|
|
||||||
|
|
||||||
#x00 #x00 #x00 #x00 #x00 #x00 #x00 ; e_ident[EI_PAD]
|
|
||||||
#x02 #x00 ; e_type Indicating Executable
|
|
||||||
#x03 #x00 ; e_machine Indicating AMD64
|
|
||||||
#x01 #x00 #x00 #x00 ; e_version Indicating original elf
|
|
||||||
|
|
||||||
#x54 #x80 #x04 #x08 ; e_entry Address of the entry point
|
|
||||||
#x34 #x00 #x00 #x00 ; e_phoff Address of program header table
|
|
||||||
#x00 #x00 #x00 #x00 ; e_shoff Address of section header table
|
|
||||||
|
|
||||||
#x00 #x00 #x00 #x00 ; e_flags
|
|
||||||
#x34 #x00 ; e_ehsize Indicating our 52 Byte header
|
|
||||||
|
|
||||||
#x20 #x00 ; e_phentsize size of a program header table
|
|
||||||
#x01 #x00 ; e_phnum number of entries in program table
|
|
||||||
|
|
||||||
#x00 #x00 ; e_shentsize size of a section header table
|
|
||||||
#x00 #x00 ; e_shnum number of entries in section table
|
|
||||||
|
|
||||||
#x00 #x00 ; e_shstrndx index of the section names
|
|
||||||
|
|
||||||
;; Program Header
|
|
||||||
#x01 #x00 #x00 #x00 ; p_type
|
|
||||||
#x00 #x00 #x00 #x00 ; p_offset
|
|
||||||
|
|
||||||
#x00 #x80 #x04 #x08 ; p_vaddr
|
|
||||||
#x00 #x80 #x04 #x08 ; p_physaddr
|
|
||||||
|
|
||||||
;; FIXME!
|
|
||||||
;;#x60 #x00 #x00 #x00 ; p_filesz
|
|
||||||
;;#x60 #x00 #x00 #x00 ; p_memsz
|
|
||||||
|
|
||||||
;#x65 #x01 #x00 #x00 ; p_filesz
|
|
||||||
;#x65 #x01 #x00 #x00 ; p_memsz
|
|
||||||
|
|
||||||
#xff #xff #x00 #x00 ; p_filesz
|
|
||||||
#xff #xff #x00 #x00 ; p_memsz
|
|
||||||
|
|
||||||
|
|
||||||
#x07 #x00 #x00 #x00 ; p_flags
|
|
||||||
#x01 #x00 #x00 #x00 ; alignment
|
|
||||||
|
|
||||||
;; _start
|
|
||||||
; exit (42) -- works!
|
|
||||||
;#xbb #x2a #x00 #x00 #x00 ; mov $42,%ebx
|
|
||||||
;#xb8 #x01 #x00 #x00 #x00 ; mov $0x1,%eax
|
|
||||||
;#xcd #x80 ; int $0x80
|
|
||||||
)
|
|
||||||
|
|
||||||
("shstr" 0
|
|
||||||
#\. #\t #\e #\x #\t 0
|
|
||||||
#\. #\d #\a #\t #\a 0
|
|
||||||
#\. #\c #\o #\m #\m #\e #\n #\t 0
|
|
||||||
#\. #\s #\h #\s #\t #\r #\t #\a #\b 0
|
|
||||||
#\. #\s #\y #\m #\t #\a #\b 0
|
|
||||||
#\. #\s #\t #\r #\t #\a #\b 0)
|
|
Loading…
Reference in a new issue