diff --git a/BOOTSTRAP b/BOOTSTRAP index 39135975..0ee93c89 100644 --- a/BOOTSTRAP +++ b/BOOTSTRAP @@ -92,7 +92,9 @@ be source. https://gitlab.com/janneke/tinycc * TODO -** have bootstrapped tcc compile gcc-4.7 +** upstream mes-boot to GuixSD. +** add full source gcc-4.7 package build. +** replace GuixSD bootstrap for x86. ** remove or upstream patches from tcc-boot ** prepare src/mes.c for M2-Planet transpiler. ** fix bootstrap-loops: (Nyacc?, mes.M2, psyntax.pp?) @@ -101,6 +103,7 @@ be source. ** x86_64, arm, the Hurd * DONE +** have tcc-boot compile gnutools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. ** have tcc-boot's mes-tcc compile a fully functional tcc ** hex.0, hex.1, M0 ** M1, hex2_linker prototyped in C diff --git a/HACKING b/HACKING index 6c399326..f69dffe3 100644 --- a/HACKING +++ b/HACKING @@ -57,14 +57,16 @@ mes.c. * ROADMAP -** TODO +** TODO *** release 0.x, unsorted - - mes-tcc: have bootstrapped tcc compile gcc-4.7. + - upstream mes-boot to GuixSD. + - add full source gcc-4.7 package build. + - replace GuixSD bootstrap for x86. - tcc: remove or upstream patches from tcc-boot - mes: prepare src/mes.c for M2-Planet transpiler. - mes: real module support, bonus for supporting Guile's define-module/define-public syntax. - mes: produce functional mes from mes.M1 transpiled by M2-Planet. - - mes: we're a full Scheme now, drop .MES prefix, use .SCM. + - mes: we're a full Scheme now, drop .MES suffix, use .SCM. + find a way to fix foo.mes/foo.scm trickery (full Guile-like module support?) + how about setting `guile' or even `guile-2' cond-expand features for external libraries (Nyacc) we look like Guile/Guile-2 @@ -89,6 +91,7 @@ mes.c. - add x86_64, replace GuixSD's bootstrap binaries for x86_64. - more architectures? ** DONE +*** 0.15: MesCC now has a libc+gnu that supports compiling binutils-2.14, gcc-2.95.3 and glibc-2.2.5. *** 0.14: Mes+MesCC now compiles a slightly patched self-hosting tcc. *** 0.13: Mes+MesCC now compiles a modified, functional tcc.c (~25,000LOC) in 1h30'. *** 0.12: Mes+MesCC now compiles mes.c (~3000LOC) in ~4min. @@ -110,7 +113,7 @@ eenough to work on compiling tinycc's tcc.c albeit a somewhat modified version. * DEBUG MES_DEBUG= mes ** Levels - 1) Informational: + 1) Informational: - MODULEDIR - included SCM modules and sources - result of program @@ -159,7 +162,7 @@ neat, Lisp/Scheme, bootstrapping and trusted binaries are probably not in scope as there is no mention of such things; only ML is mentioned while Guile is used for bootstrapping. -* Assorted ideas and info +* Assorted ideas and info ** Using GDB on assembly/a.out info registers p/x $eax @@ -186,7 +189,7 @@ out/i686-unknown-linux-gnu-mes --dump < module/mes/read-0.mes > module/mes/read- ** SC - c as s-expressions sc: http://sph.mn/content/3d3 ** RNRS -*** [[http://www.scheme-reports.org/][Scheme Reports]] +*** [[http://www.scheme-reports.org/][Scheme Reports]] *** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-349.pdf][Scheme - Report on Scheme]] *** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-452.pdf][RRS - Revised Report on Scheme]] @@ -237,4 +240,3 @@ https://miyuki.github.io/2017/10/04/gcc-archaeology-1.html ** rain1's Bootstrapping Wiki: https://bootstrapping.miraheze.org/wiki/Main_Page ** rain1's hex86 https://notabug.org/rain1/hex86/src/master/tests/hex0b3.hex86 - diff --git a/NEWS b/NEWS index 78dd8a09..153047d8 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,40 @@ Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen Please send Mes bug reports to janneke@gnu.org. +* Changes in 0.15 since 0.14 +** Core +*** Support fork, exec, waitpid. +*** Boot-0 loading has been refactored. +*** MesCC now has out of the box Geiser support. +** Language +*** 2 new functions +drop, drop-right. +** MesCC +*** MesCC and Mes Lib C can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5. +*** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those. +*** Mes Lib C now supports compiling glibc-2.2.25. +*** Mes Lib C now supports compiling gcc-2.95.3 +*** Mes Lib C now supports compiling binutils-2.30. +*** Mes Lib C now supports compiling m4-1.4. +*** Mes Lib C has been split into archs: gcc, x86-mes-gcc and x86-mes. +*** MesCC now has a posixy command line interface. +**** 70 new functions +abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero, +chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof, +fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid, +getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii, +iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp, +nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir, +sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror, +strncat, strpbrk, strspn, unlink, unsetenv, waitpid. +**** 23 new stubs +abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead, +frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf, +sigsetmask, strftime, sys_siglist, system, times, umask, utime. +**** 10 new C tests +51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c, +92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c. + * Changes in 0.14 since 0.13 ** Core *** Bootstrapped Mes+MesCC now compiles a tcc that is self-hosting and only slightly patched. diff --git a/README b/README index c688d2dc..0b6dd0c1 100644 --- a/README +++ b/README @@ -15,7 +15,8 @@ Guile's [[https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing. REPL and simple C-compiler: MesCC. Mes+MesCC can compile a only [[https://gitlab.com/janneke/tinycc][lightly modified TinyCC]] that is -self-hosting. A GNU Ccc-compiled tcc is [[https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html][known]] to compile GCC. +self-hosting. Using the Mes C library, this tcc can now build the +gnutools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. Mes is inspired by The Maxwell Equations of Software: [[http://www.softwarepreservation.org/projects/LISP/book/LISP%2525201.5%252520Programmers%252520Manual.pdf][LISP-1.5]] -- John McCarthy page 13, GNU Guix's source/binary packaging transparency and @@ -30,9 +31,8 @@ Jeremiah Orians's stage0 ~300 byte self-hosting hex assembler. [6] https://www.nongnu.org/nyacc [7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html [8] https://gitlab.com/janneke/tinycc -[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html -[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf -[11] https://github.com/oriansj/stage0 +[9] http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf +[10] https://github.com/oriansj/stage0 Mes is free software, it is distributed under the terms of the GNU General Public Licence version 3 or later. See the file COPYING. diff --git a/doc/ANNOUNCE-0.14 b/doc/ANNOUNCE-0.14 index 5ecc09b3..e302a3c5 100644 --- a/doc/ANNOUNCE-0.14 +++ b/doc/ANNOUNCE-0.14 @@ -1,16 +1,18 @@ Subject: Mes 0.14 released -I am pleased to announce the release of Mes 0.14, representing 93 -commits over 3 weeks. Mes+MesCC now compiles a self-hosting tcc that -has only been slightly patched. +I am pleased to announce the release of Mes 0.14, representing 98 +commits over 4 weeks. Mes+MesCC now compiles a self-hosting TinyCC +that has only been slightly patched. This means that we can now build a tcc that depends only on a 1MB ASCII M1 seed. GuixSD currently uses a ~250MB binary seed to build gcc. Next targets are: build gcc using this almost full-source bootstrapped -tcc, and reduce the 1MB ASCII M1 seed to a ~100KB almost source seed -of M2 (a simple C-like language). +tcc, and reduce the 1MB ASCII M1 seed to ~100KB of M2 source, which is +a restricted subset of C. + +Packages are available from Guix's wip-bootstrap branch. * About @@ -28,7 +30,7 @@ of M2 (a simple C-like language). enough to support a simple REPL (repl.mes) and simple C-compiler MesCC. - Mes+MesCC can compile a only slightly patched TinyCC[8] that is + Mes+MesCC can compile an only slightly patched TinyCC[8] that is self-hosting. A GNU Ccc-compiled tcc is known[9] to compile GCC. Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] @@ -79,8 +81,8 @@ installed in Guix[SD] by the usual **** 4 new functions __lshrdi3, __ashldi3, __ashrdi3, strncpy. **** 9 new mlibc stubs -__fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp, - __fixunsxfdi, __floatundixf, ldexp, strtod, strtof, strtold. + __fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp, + strtod, strtof, strtold. Greetings, janneke diff --git a/doc/ANNOUNCE-0.15 b/doc/ANNOUNCE-0.15 new file mode 100644 index 00000000..588f222d --- /dev/null +++ b/doc/ANNOUNCE-0.15 @@ -0,0 +1,106 @@ +Subject: Mes 0.15 released + +I am pleased to announce the release of Mes 0.15, representing 45 +commits over 3 weeks. The GNU toolchain is getting bootstrapped! + +As of 0.14, Mes+MesCC compiles a self-hosting TinyCC. Using the 0.15 +Mes C library, this TinyCC can build the GNU tools triplet: +binutils-2.14, gcc-2.95.3, glibc-2.2.5. + +This means that we can build a GNU toolchain that depends only on a +critical 1MB ASCII M1 seed. GuixSD currently uses a ~250MB binary +seed to build gcc. + +Next targets are: upstream the Mes bootstrap to GuixSD, build a +Gcc-4.7 and Glibc-2.23, bootstrap utilities like bison, flex, grep, +sed..., replace GuixSD's bootstrap for x86 and reduce the 1MB ASCII M1 +seed to ~5000 LOC/~100KB of M2 source, which is a restricted subset of +C. + +Packages are available from Guix's wip-bootstrap branch. + +* About + + Mes[0] aims to help create full source bootstrapping for GuixSD[1] + as part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting Scheme interpreter + prototype in C and a Nyacc-based C compiler in Scheme. This C + prototype is being simplified to be transpiled by M2-Planet[3]. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + MesCC. + + Mes+MesCC can compile an only slightly patched TinyCC[8] that is + self-hosting. Using the Mes C library, this tcc can now build the + GNU tools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[9] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0[10] ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/-/archive/v0.15/mes-0.15.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.15 since 0.14 + ** Core + *** Support fork, exec, waitpid. + *** Boot-0 loading has been refactored. + *** MesCC now has out of the box Geiser support. + ** Language + *** 2 new functions + drop, drop-right. + ** MesCC + *** MesCC and Mes Lib C can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5. + *** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those. + *** Mes Lib C now supports compiling glibc-2.2.25. + *** Mes Lib C now supports compiling gcc-2.95.3 + *** Mes Lib C now supports compiling binutils-2.30. + *** Mes Lib C now supports compiling m4-1.4. + *** Mes Lib C has been split into archs: gcc, x86-mes-gcc and x86-mes. + *** MesCC now has a posixy command line interface. + **** 70 new functions + abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero, + chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof, + fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid, + getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii, + iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp, + nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir, + sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror, + strncat, strpbrk, strspn, unlink, unsetenv, waitpid. + **** 23 new stubs + abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead, + frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf, + sigsetmask, strftime, sys_siglist, system, times, umask, utime. + **** 10 new C tests + 51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c, + 92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c. + + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/m2-planet +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf +[10] https://github.com/oriansj/stage0