From 39e0a366be1851df229e1a0aa3734c7da75e893e Mon Sep 17 00:00:00 2001 From: fosslinux Date: Sat, 9 Jan 2021 19:19:16 +1100 Subject: [PATCH] Add tcc 0.9.26 This is the first tcc, which will be used to build 0.9.26p1. Instructions taken from bootstrap.sh in tcc-0.9.26p1. p1 denotes it has been patched. --- .gitmodules | 3 + rootfs.sh | 36 ++- sysa/after.kaem.run | 6 +- sysa/blynn-compiler-oriansj | 2 +- sysa/mes.kaem | 10 + sysa/tcc-0.9.26p1 | 1 + sysa/tcc-0.9.26p1-files/config.h | 0 sysa/tcc.kaem | 374 +++++++++++++++++++++++++++++++ 8 files changed, 424 insertions(+), 8 deletions(-) create mode 160000 sysa/tcc-0.9.26p1 create mode 100644 sysa/tcc-0.9.26p1-files/config.h create mode 100755 sysa/tcc.kaem diff --git a/.gitmodules b/.gitmodules index 546897d..b4dca09 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,6 @@ [submodule "sysa/nyacc"] path = sysa/nyacc url = https://git.savannah.gnu.org/git/nyacc.git +[submodule "sysa/tcc-0.9.26p1"] + path = sysa/tcc-0.9.26p1 + url = https://gitlab.com/janneke/tinycc diff --git a/rootfs.sh b/rootfs.sh index 73c6c31..2cbaa42 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -1,6 +1,9 @@ #!/bin/bash set -ex +QEMU_CMD=$1 +RAM=$2 + pushd sysa # SYSTEM A @@ -10,7 +13,6 @@ mkdir -p tmp/ sudo mount -t tmpfs -o size=8G tmpfs tmp # base: mescc-tools-seed - # copy in all the mescc-tools-seed stuff cp -r mescc-tools-seed/x86/* tmp cp -r mescc-tools-seed/{M2-Planet,mes-m2,mescc-tools} tmp/ @@ -21,15 +23,23 @@ cp -r ../bootstrap-seeds tmp/ # replace the init kaem with our own custom one mv tmp/kaem.run tmp/mescc-tools-seed.kaem.run cp base.kaem.run tmp/kaem.run +# checkout new version of mescc-tools +pushd tmp/mescc-tools +git fetch +git checkout 5768b2a79036f34b9bd420ab4801ad7dca15dff8 +popd # create directories needed mkdir tmp/bin -# after mescc-tools-seed we get into our own little directory because +# after mescc-tools-seed we get into our own directory because # the mescc-tools-seed one is hella messy mkdir tmp/after/bin -p mkdir tmp/after/{lib,include} +mkdir tmp/after/lib/{tcc,linux} +ln -s . tmp/after/lib/x86-mes +ln -s . tmp/after/lib/linux/x86-mes mkdir tmp/after/include/{mes,gnu,linux,sys,mach} -mkdir tmp/after/include/linux/x86 +mkdir tmp/after/include/linux/{x86,x86_64} # put all the kaems for after in cp after.kaem tmp/ cp after.kaem.run tmp/after/kaem.run @@ -46,13 +56,26 @@ popd # mes cp -r mes tmp/after/ +cp -r mes tmp/after/tcc-mes ln -s lib/x86-mes tmp/after/mes/x86-mes cp -r nyacc tmp/after/ cp mes.kaem tmp/after/ cp mes-files/mescc.scm tmp/after/bin/ cp mes-files/config.h tmp/after/mes/include/mes/ +cp mes-files/config.h tmp/after/tcc-mes/include/mes/ mkdir tmp/after/mes/{bin,m2} +# tcc 0.9.26 +cp tcc.kaem tmp/after/ +cp -r tcc-0.9.26p1 tmp/after/ +pushd tmp/after/tcc-0.9.26p1 +cp ../../../tcc-0.9.26p1-files/config.h . +ln -s ../mes/module . +ln -s ../mes/mes . +ln -s /after/lib x86-mes +ln -s /after/lib/linux . +popd + # General cleanup find tmp -name .git -exec rm -rf \; @@ -61,13 +84,14 @@ cd tmp find . | cpio -H newc -o | gzip > initramfs.igz # Run -qemu-system-x86_64 -enable-kvm \ - -m 16G \ +${QEMU_CMD:-qemu-system-x86_64} -enable-kvm \ + -m ${RAM:-8G} \ -nographic \ -no-reboot \ - -kernel ../../kernel -initrd initramfs.igz -append console=ttyS0,kernel.panic=2 + -kernel ../../kernel -initrd initramfs.igz -append console=ttyS0 cd ../.. # Cleanup sudo umount sysa/tmp + diff --git a/sysa/after.kaem.run b/sysa/after.kaem.run index 238c762..7b005bd 100755 --- a/sysa/after.kaem.run +++ b/sysa/after.kaem.run @@ -38,10 +38,14 @@ cd .. bin/get_machine bin/mes-m2 bin/kaem bin/catm # Part 4: blynn-compiler - cd blynn-compiler kaem --file go.kaem cd .. # Part 5: mes kaem --file mes.kaem + +# Part 6: tcc +cd tcc-0.9.26p1 +kaem --file ../tcc.kaem +cd .. diff --git a/sysa/blynn-compiler-oriansj b/sysa/blynn-compiler-oriansj index b65c902..75493bc 160000 --- a/sysa/blynn-compiler-oriansj +++ b/sysa/blynn-compiler-oriansj @@ -1 +1 @@ -Subproject commit b65c9026d3ddeed5007e5aa1e709dc4006778293 +Subproject commit 75493bc386a4bd19d8d1ce92cf004e994d8d9932 diff --git a/sysa/mes.kaem b/sysa/mes.kaem index c74132c..2fb7f2a 100755 --- a/sysa/mes.kaem +++ b/sysa/mes.kaem @@ -209,6 +209,14 @@ cp /after/bin/mes-new /after/bin/mes cp ${libdir}/x86-mes/libc.a /after/lib/ cp ${libdir}/x86-mes/libc+tcc.a /after/lib/ cp ${libdir}/x86-mes/libmescc.a /after/lib/ +cp ${libdir}/x86-mes/libc.s /after/lib/ +cp ${libdir}/x86-mes/libc+tcc.s /after/lib/ +cp ${libdir}/x86-mes/libmescc.s /after/lib/ +cp ${libdir}/x86-mes/x86.M1 /after/lib/ +cp crt1.o /after/lib/ +cp crt1.s /after/lib/ +cp ${libdir}/linux/x86-mes/elf32-footer-single-main.hex2 /after/lib/linux/ +cp ${libdir}/linux/x86-mes/elf32-header.hex2 /after/lib/linux/ # Install header files cp include/alloca.h /after/include/alloca.h @@ -279,3 +287,5 @@ cp include/sys/wait.h /after/include/sys/wait.h # Test mes libdir=/after/lib ${MES} -c "(display 'Hello,Mes!) (newline)" + +cd .. diff --git a/sysa/tcc-0.9.26p1 b/sysa/tcc-0.9.26p1 new file mode 160000 index 0000000..5bba73c --- /dev/null +++ b/sysa/tcc-0.9.26p1 @@ -0,0 +1 @@ +Subproject commit 5bba73ccca0e794a6557de166b91923228cb6f73 diff --git a/sysa/tcc-0.9.26p1-files/config.h b/sysa/tcc-0.9.26p1-files/config.h new file mode 100644 index 0000000..e69de29 diff --git a/sysa/tcc.kaem b/sysa/tcc.kaem new file mode 100755 index 0000000..5ecbae0 --- /dev/null +++ b/sysa/tcc.kaem @@ -0,0 +1,374 @@ +#!/bin/sh + +set -ex + +# Vars +bindir=/after/bin +libdir=/after/lib +GUILE_LOAD_PATH=/after/nyacc/module:/after/mes/mes/module +MES_PREFIX=/after/mes +MES_STACK=15000000 +MES_ARENA=30000000 +MES_MAX_ARENA=30000000 +MES_LIB=${MES_PREFIX}/lib +MES_SOURCE=${MES_PREFIX} +MES=/after/bin/mes + +# Initial tcc +${MES} --no-auto-compile -e main /after/bin/mescc.scm -- \ + -S \ + -o tcc.s \ + -I /after/mes/lib \ + -I /after/mes/include \ + -D BOOTSTRAP=1 \ + -I . \ + -D TCC_TARGET_I386=1 \ + -D inline= \ + -D CONFIG_TCCDIR=\"/after/lib/tcc\" \ + -D CONFIG_SYSROOT=\"/\" \ + -D CONFIG_TCC_CRTPREFIX=\"/after/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"/after/mes/include:/after/include\" \ + -D TCC_LIBGCC=\"/after/lib/libc.a\" \ + -D CONFIG_TCC_LIBTCC1_MES=0 \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"0.9.26\" \ + -D ONE_SOURCE=1 \ + tcc.c +${MES} --no-auto-compile -e main /after/bin/mescc.scm -- \ + -o mes-tcc \ + -L /after/lib \ + tcc.s \ + -l c+tcc +cp mes-tcc /after/bin/ +chmod 755 /after/bin/mes-tcc + +# test mes-tcc +mes-tcc -version + +# Recompile the mes C library +cd ../tcc-mes + +# Create unified libc files +catm unified-libc-1.c lib/mes/eputs.c lib/mes/oputs.c lib/mes/globals.c lib/stdlib/exit.c lib/linux/x86-mes-gcc/_exit.c lib/linux/x86-mes-gcc/_write.c lib/stdlib/puts.c lib/string/strlen.c lib/ctype/isnumber.c lib/mes/abtol.c lib/mes/cast.c lib/mes/eputc.c lib/mes/fdgetc.c lib/mes/fdputc.c lib/mes/fdputs.c lib/mes/fdungetc.c lib/mes/itoa.c lib/mes/ltoa.c lib/mes/ltoab.c lib/mes/mes_open.c lib/mes/ntoab.c lib/mes/oputc.c lib/mes/ultoa.c lib/mes/utoa.c lib/ctype/isdigit.c lib/ctype/isspace.c lib/ctype/isxdigit.c lib/mes/assert_msg.c lib/posix/write.c lib/stdlib/atoi.c lib/linux/lseek.c lib/mes/__assert_fail.c lib/mes/__buffered_read.c lib/mes/__mes_debug.c lib/posix/execv.c lib/posix/getcwd.c lib/posix/getenv.c lib/posix/isatty.c lib/posix/open.c lib/posix/buffered-read.c lib/posix/setenv.c lib/posix/wait.c lib/stdio/fgetc.c lib/stdio/fputc.c lib/stdio/fputs.c lib/stdio/getc.c lib/stdio/getchar.c lib/stdio/putc.c lib/stdio/putchar.c lib/stdio/ungetc.c lib/stdlib/free.c lib/stdlib/malloc.c lib/stdlib/realloc.c lib/string/memchr.c lib/string/memcmp.c lib/string/memcpy.c lib/string/memmove.c lib/string/memset.c lib/string/strcmp.c lib/string/strcpy.c lib/string/strncmp.c lib/posix/raise.c lib/linux/access.c lib/linux/brk.c lib/linux/chmod.c lib/linux/clock_gettime.c lib/linux/dup.c lib/linux/dup2.c lib/linux/execve.c lib/linux/fork.c lib/linux/fsync.c lib/linux/_getcwd.c lib/linux/gettimeofday.c lib/linux/ioctl3.c lib/linux/_open3.c lib/linux/_read.c lib/linux/time.c lib/linux/unlink.c lib/linux/waitpid.c lib/linux/x86-mes-gcc/syscall.c lib/linux/getpid.c lib/linux/kill.c lib/ctype/islower.c lib/ctype/isupper.c lib/ctype/tolower.c lib/ctype/toupper.c lib/mes/abtod.c lib/mes/dtoab.c lib/mes/search-path.c lib/posix/execvp.c lib/stdio/fclose.c lib/stdio/fdopen.c lib/stdio/ferror.c lib/stdio/fflush.c lib/stdio/fopen.c lib/stdio/fprintf.c lib/stdio/fread.c lib/stdio/fseek.c lib/stdio/ftell.c lib/stdio/fwrite.c +catm unified-libc-2.c lib/stdio/printf.c lib/stdio/remove.c lib/stdio/snprintf.c lib/stdio/sprintf.c lib/stdio/sscanf.c lib/stdio/vfprintf.c lib/stdio/vprintf.c lib/stdio/vsnprintf.c lib/stdio/vsprintf.c lib/stdio/vsscanf.c lib/stdlib/calloc.c lib/stdlib/qsort.c lib/stdlib/strtod.c lib/stdlib/strtof.c lib/stdlib/strtol.c lib/stdlib/strtold.c lib/stdlib/strtoll.c lib/stdlib/strtoul.c lib/stdlib/strtoull.c lib/string/memmem.c lib/string/strcat.c lib/string/strchr.c lib/string/strlwr.c lib/string/strncpy.c lib/string/strrchr.c lib/string/strstr.c lib/string/strupr.c lib/stub/sigaction.c lib/stub/ldexp.c lib/stub/mprotect.c lib/stub/localtime.c lib/stub/sigemptyset.c lib/x86-mes-gcc/setjmp.c lib/linux/close.c lib/linux/rmdir.c lib/linux/stat.c lib/ctype/isalnum.c lib/ctype/isalpha.c lib/ctype/isascii.c lib/ctype/iscntrl.c lib/ctype/isgraph.c lib/ctype/isprint.c lib/ctype/ispunct.c lib/dirent/__getdirentries.c lib/dirent/closedir.c lib/dirent/opendir.c lib/dirent/readdir.c lib/math/ceil.c lib/math/fabs.c lib/math/floor.c lib/mes/fdgets.c lib/posix/alarm.c lib/posix/execl.c lib/posix/execlp.c lib/posix/mktemp.c lib/posix/sbrk.c lib/posix/sleep.c lib/posix/unsetenv.c lib/stdio/clearerr.c lib/stdio/feof.c lib/stdio/fgets.c lib/stdio/fileno.c lib/stdio/freopen.c lib/stdio/fscanf.c lib/stdio/perror.c lib/stdio/vfscanf.c lib/stdlib/__exit.c lib/stdlib/abort.c lib/stdlib/abs.c lib/stdlib/alloca.c lib/stdlib/atexit.c lib/stdlib/atof.c lib/stdlib/atol.c lib/stdlib/mbstowcs.c lib/string/bcmp.c lib/string/bcopy.c lib/string/bzero.c lib/string/index.c lib/string/rindex.c lib/string/strcspn.c lib/string/strdup.c lib/string/strerror.c lib/string/strncat.c lib/string/strpbrk.c lib/string/strspn.c lib/stub/__cleanup.c lib/stub/atan2.c lib/stub/bsearch.c lib/stub/chown.c lib/stub/cos.c lib/stub/ctime.c lib/stub/exp.c lib/stub/fpurge.c lib/stub/freadahead.c lib/stub/frexp.c lib/stub/getgrgid.c lib/stub/getgrnam.c lib/stub/getlogin.c lib/stub/getpgid.c lib/stub/getpgrp.c lib/stub/getpwnam.c +catm unified-libc-3.c lib/stub/getpwuid.c lib/stub/gmtime.c lib/stub/log.c lib/stub/mktime.c lib/stub/modf.c lib/stub/pclose.c lib/stub/popen.c lib/stub/pow.c lib/stub/rand.c lib/stub/rewind.c lib/stub/setbuf.c lib/stub/setgrent.c lib/stub/setlocale.c lib/stub/setvbuf.c lib/stub/sigaddset.c lib/stub/sigblock.c lib/stub/sigdelset.c lib/stub/sigsetmask.c lib/stub/sin.c lib/stub/sqrt.c lib/stub/strftime.c lib/stub/sys_siglist.c lib/stub/system.c lib/stub/times.c lib/stub/ttyname.c lib/stub/umask.c lib/stub/utime.c lib/linux/chdir.c lib/linux/fcntl.c lib/linux/fstat.c lib/linux/getdents.c lib/linux/getegid.c lib/linux/geteuid.c lib/linux/getgid.c lib/linux/getppid.c lib/linux/getrusage.c lib/linux/getuid.c lib/linux/ioctl.c lib/linux/link.c lib/linux/lstat.c lib/linux/mkdir.c lib/linux/mknod.c lib/linux/nanosleep.c lib/linux/pipe.c lib/linux/readlink.c lib/linux/rename.c lib/linux/setgid.c lib/linux/settimer.c lib/linux/setuid.c lib/linux/signal.c lib/linux/sigprogmask.c lib/linux/symlink.c + +# crt1.o +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crt1.o lib/linux/x86-mes-gcc/crt1.c + +# crtn.o +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crtn.o lib/linux/x86-mes-gcc/crtn.c + +# crti.o +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crti.o lib/linux/x86-mes-gcc/crti.c + +# libc+gcc.a +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-1.o unified-libc-1.c +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-2.o unified-libc-2.c +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-3.o unified-libc-3.c +mes-tcc -ar cr ${libdir}/libc+gnu.a unified-libc-1.o unified-libc-2.o unified-libc-3.o +cp ${libdir}/libc+gnu.a ${libdir}/libc.a + +# libtcc1.a +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 lib/libtcc1.c +mes-tcc -ar cr ${libdir}/tcc/libtcc1.a libtcc1.o + +# libgetopt.a +mes-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 lib/posix/getopt.c +mes-tcc -ar cr ${libdir}/libgetopt.a getopt.o + +cd ../tcc-0.9.26p1 + +# boot0 +mes-tcc \ + -g \ + -v \ + -static \ + -o boot0-tcc \ + -D BOOTSTRAP=1 \ + -D HAVE_LONG_LONG_STUB=1 \ + -D HAVE_SETJMP=1 \ + -I . \ + -I /after/include \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"/after/lib/tcc\" \ + -D CONFIG_TCC_CRTPREFIX=\"/after/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_LIBPATHS=\"/after/lib:/after/lib/tcc\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"/after/lib/include\" \ + -D TCC_LIBGCC=\"/after/lib/libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"0.9.26\" \ + -D ONE_SOURCE=1 \ + -L . \ + -L /after/lib \ + tcc.c +cp boot0-tcc /after/bin/ +chmod 755 /after/bin/boot0-tcc +cd ../tcc-mes +boot0-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crt1.o lib/linux/x86-mes-gcc/crt1.c +boot0-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crtn.o lib/linux/x86-mes-gcc/crtn.c +boot0-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crti.o lib/linux/x86-mes-gcc/crti.c +boot0-tcc -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG_STUB=1 -I include -I include/linux/x86 lib/libtcc1.c +boot0-tcc -ar cr ${libdir}/tcc/libtcc1.a libtcc1.o +boot0-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-1.o unified-libc-1.c +boot0-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-2.o unified-libc-2.c +boot0-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-3.o unified-libc-3.c +boot0-tcc -ar cr ${libdir}/libc+gnu.a unified-libc-1.o unified-libc-2.o unified-libc-3.o +cp ${libdir}/libc+gnu.a ${libdir}/libc.a +cd ../tcc-0.9.26p1 + +# Test boot0 +boot0-tcc -version + +# boot1 +boot0-tcc \ + -g \ + -v \ + -static \ + -o boot1-tcc \ + -D BOOTSTRAP=1 \ + -D HAVE_BITFIELD=1 \ + -D HAVE_LONG_LONG=1 \ + -D HAVE_SETJMP=1 \ + -I . \ + -I /after/include \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"/after/lib/tcc\" \ + -D CONFIG_TCC_CRTPREFIX=\"/after/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_LIBPATHS=\"/after/lib:/after/lib/tcc\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"/after/lib/include\" \ + -D TCC_LIBGCC=\"/after/lib/libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"0.9.26\" \ + -D ONE_SOURCE=1 \ + -L . \ + tcc.c +cp boot1-tcc /after/bin +chmod 755 /after/bin/boot1-tcc +cd ../tcc-mes +boot1-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crt1.o lib/linux/x86-mes-gcc/crt1.c +boot1-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crtn.o lib/linux/x86-mes-gcc/crtn.c +boot1-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crti.o lib/linux/x86-mes-gcc/crti.c +boot1-tcc -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -I include -I include/linux/x86 lib/libtcc1.c +boot1-tcc -ar cr ${libdir}/tcc/libtcc1.a libtcc1.o +boot1-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-1.o unified-libc-1.c +boot1-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-2.o unified-libc-2.c +boot1-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-3.o unified-libc-3.c +boot1-tcc -ar cr ${libdir}/libc+gnu.a unified-libc-1.o unified-libc-2.o unified-libc-3.o +cp ${libdir}/libc+gnu.a ${libdir}/libc.a +cd ../tcc-0.9.26p1 + +# Test boot1 +boot1-tcc -version + +# boot2 +boot1-tcc \ + -g \ + -v \ + -static \ + -o boot2-tcc \ + -D BOOTSTRAP=1 \ + -D HAVE_BITFIELD=1 \ + -D HAVE_FLOAT_STUB=1 \ + -D HAVE_LONG_LONG=1 \ + -D HAVE_SETJMP=1 \ + -I . \ + -I /after/include \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"/after/lib/tcc\" \ + -D CONFIG_TCC_CRTPREFIX=\"/after/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_LIBPATHS=\"/after/lib:/after/lib/tcc\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"/after/lib/include\" \ + -D TCC_LIBGCC=\"/after/lib/libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"0.9.26\" \ + -D ONE_SOURCE=1 \ + -L . \ + tcc.c +cp boot2-tcc /after/bin +chmod 755 /after/bin/boot2-tcc +cd ../tcc-mes +boot2-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crt1.o lib/linux/x86-mes-gcc/crt1.c +boot2-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crtn.o lib/linux/x86-mes-gcc/crtn.c +boot2-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crti.o lib/linux/x86-mes-gcc/crti.c +boot2-tcc -c -D HAVE_CONFIG_H=1 -D HAVE_FLOAT_STUB=1 -D HAVE_LONG_LONG=1 -I include -I include/linux/x86 lib/libtcc1.c +boot2-tcc -ar cr ${libdir}/tcc/libtcc1.a libtcc1.o +boot2-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-1.o unified-libc-1.c +boot2-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-2.o unified-libc-2.c +boot2-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-3.o unified-libc-3.c +boot2-tcc -ar cr ${libdir}/libc+gnu.a unified-libc-1.o unified-libc-2.o unified-libc-3.o +cp ${libdir}/libc+gnu.a ${libdir}/libc.a +cd ../tcc-0.9.26p1 + +# Test boot2 +boot2-tcc -version + +# boot3 +boot2-tcc \ + -g \ + -v \ + -static \ + -o boot3-tcc \ + -D BOOTSTRAP=1 \ + -D HAVE_BITFIELD=1 \ + -D HAVE_FLOAT=1 \ + -D HAVE_LONG_LONG=1 \ + -D HAVE_SETJMP=1 \ + -I . \ + -I /after/include \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"/after/lib/tcc\" \ + -D CONFIG_TCC_CRTPREFIX=\"/after/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_LIBPATHS=\"/after/lib:/after/lib/tcc\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"/after/lib/include\" \ + -D TCC_LIBGCC=\"/after/lib/libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"0.9.26\" \ + -D ONE_SOURCE=1 \ + -L . \ + tcc.c +cp boot3-tcc /after/bin +chmod 755 /after/bin/boot3-tcc +cd ../tcc-mes +boot3-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crt1.o lib/linux/x86-mes-gcc/crt1.c +boot3-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crtn.o lib/linux/x86-mes-gcc/crtn.c +boot3-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crti.o lib/linux/x86-mes-gcc/crti.c +boot3-tcc -c -D HAVE_CONFIG_H=1 -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 -I include -I include/linux/x86 lib/libtcc1.c +boot3-tcc -ar cr ${libdir}/tcc/libtcc1.a libtcc1.o +boot3-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-1.o unified-libc-1.c +boot3-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-2.o unified-libc-2.c +boot3-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-3.o unified-libc-3.c +boot3-tcc -ar cr ${libdir}/libc+gnu.a unified-libc-1.o unified-libc-2.o unified-libc-3.o +cp ${libdir}/libc+gnu.a ${libdir}/libc.a +cd ../tcc-0.9.26p1 + +# Test boot3 +boot3-tcc -version + +# boot4 +boot3-tcc \ + -g \ + -v \ + -static \ + -o boot4-tcc \ + -D BOOTSTRAP=1 \ + -D HAVE_BITFIELD=1 \ + -D HAVE_FLOAT=1 \ + -D HAVE_LONG_LONG=1 \ + -D HAVE_SETJMP=1 \ + -I . \ + -I /after/include \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"/after/lib/tcc\" \ + -D CONFIG_TCC_CRTPREFIX=\"/after/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_LIBPATHS=\"/after/lib:/after/lib/tcc\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"/after/lib/include\" \ + -D TCC_LIBGCC=\"/after/lib/libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"0.9.26\" \ + -D ONE_SOURCE=1 \ + -L . \ + tcc.c +cp boot4-tcc /after/bin +chmod 755 /after/bin/boot4-tcc +cd ../tcc-mes +boot4-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crt1.o lib/linux/x86-mes-gcc/crt1.c +boot4-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crtn.o lib/linux/x86-mes-gcc/crtn.c +boot4-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crti.o lib/linux/x86-mes-gcc/crti.c +boot4-tcc -c -D HAVE_CONFIG_H=1 -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 -I include -I include/linux/x86 lib/libtcc1.c +boot4-tcc -ar cr ${libdir}/tcc/libtcc1.a libtcc1.o +boot4-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-1.o unified-libc-1.c +boot4-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-2.o unified-libc-2.c +boot4-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-3.o unified-libc-3.c +boot4-tcc -ar cr ${libdir}/libc+gnu.a unified-libc-1.o unified-libc-2.o unified-libc-3.o +cp ${libdir}/libc+gnu.a ${libdir}/libc.a +cd ../tcc-0.9.26p1 + +# Test boot4 +boot4-tcc -version + +# boot5 +boot4-tcc \ + -g \ + -v \ + -static \ + -o boot5-tcc \ + -D BOOTSTRAP=1 \ + -D HAVE_BITFIELD=1 \ + -D HAVE_FLOAT=1 \ + -D HAVE_LONG_LONG=1 \ + -D HAVE_SETJMP=1 \ + -I . \ + -I /after/include \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"/after/lib/tcc\" \ + -D CONFIG_TCC_CRTPREFIX=\"/after/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_LIBPATHS=\"/after/lib:/after/lib/tcc\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"/after/lib/include\" \ + -D TCC_LIBGCC=\"/after/lib/libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"0.9.26\" \ + -D ONE_SOURCE=1 \ + -L . \ + tcc.c +cp boot5-tcc /after/bin +chmod 755 /after/bin/boot5-tcc +cd ../tcc-mes +boot5-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crt1.o lib/linux/x86-mes-gcc/crt1.c +boot5-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crtn.o lib/linux/x86-mes-gcc/crtn.c +boot5-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ${libdir}/crti.o lib/linux/x86-mes-gcc/crti.c +boot5-tcc -c -D HAVE_CONFIG_H=1 -D HAVE_FLOAT=1 -D HAVE_LONG_LONG=1 -I include -I include/linux/x86 lib/libtcc1.c +boot5-tcc -ar cr ${libdir}/tcc/libtcc1.a libtcc1.o +boot5-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-1.o unified-libc-1.c +boot5-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-2.o unified-libc-2.c +boot5-tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o unified-libc-3.o unified-libc-3.c +boot5-tcc -ar cr ${libdir}/libc+gnu.a unified-libc-1.o unified-libc-2.o unified-libc-3.o +cp ${libdir}/libc+gnu.a ${libdir}/libc.a + +# Test boot5 +boot5-tcc -version + +# We have our final tcc 0.9.26! +cp /after/bin/boot5-tcc /after/bin/tcc +chmod 755 /after/bin/tcc + +# Also recompile getopt, we don't need to do this during the boot* stages +# because nothing is linked against it +tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 lib/posix/getopt.c +tcc -ar cr ${libdir}/libgetopt.a getopt.o + +cd ..