doc: Release update.

* BOOTSTRAP: Update.
* HACKING: Update.
* INSTALL: Update.
* NEWS: Update.
* README: Update.
* doc/ANNOUNCE-0.16: New file.
This commit is contained in:
Jan Nieuwenhuizen 2018-06-24 13:13:13 +02:00
parent 16f4adfbc2
commit 73be085f3a
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
6 changed files with 197 additions and 55 deletions

View file

@ -103,6 +103,7 @@ be source.
** x86_64, arm, the Hurd ** x86_64, arm, the Hurd
* DONE * DONE
** bootstrap gcc+glibc-built binutils-20.1, gcc-4.1.0.
** have tcc-boot compile gnutools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. ** 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 ** have tcc-boot's mes-tcc compile a fully functional tcc
** hex.0, hex.1, M0 ** hex.0, hex.1, M0

16
HACKING
View file

@ -62,10 +62,14 @@ mes.c.
- upstream mes-boot to GuixSD. - upstream mes-boot to GuixSD.
- add full source gcc-4.7 package build. - add full source gcc-4.7 package build.
- replace GuixSD bootstrap for x86. - replace GuixSD bootstrap for x86.
- tcc: remove or upstream patches from tcc-boot - replace bootstrap utils (with gash?): flex, bash, bzip2,
- mes: prepare src/mes.c for M2-Planet transpiler. coreutils, diffutils, gawk, grep, gzip, make, sed, tar.
- tcc: remove or upstream patches from tcc-boot.
- tcc: build 0.9.27 directly instead of via 0.9.26,
see tinycc wip-bootstrappable@0.9.27 branch
- mes: prepare src/mes.c for M2-Planet transpiler,
Jeremiah branched-out from mes; see https://github.com/oriansj/mes-m2.
- mes: real module support, bonus for supporting Guile's define-module/define-public syntax. - 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 suffix, 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?) + 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 + how about setting `guile' or even `guile-2' cond-expand features
@ -89,8 +93,9 @@ mes.c.
*** release 1.0 *** release 1.0
- replace GuixSD's bootstrap binaries for x86. - replace GuixSD's bootstrap binaries for x86.
- add x86_64, replace GuixSD's bootstrap binaries for x86_64. - add x86_64, replace GuixSD's bootstrap binaries for x86_64.
- more architectures? - more architectures (does GuixSD require this, i.e. before 1.0?).
** DONE ** DONE
*** 0.16 Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
*** 0.15: MesCC now has a libc+gnu that supports compiling binutils-2.14, gcc-2.95.3 and glibc-2.2.5. *** 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.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.13: Mes+MesCC now compiles a modified, functional tcc.c (~25,000LOC) in 1h30'.
@ -100,7 +105,7 @@ mes.c.
*** 0.9: Mescc now writes M1 macro assembly files and compiles tcc. *** 0.9: Mescc now writes M1 macro assembly files and compiles tcc.
*** 0.8: Mescc now writes object files in stage0's labeled hex2 format. *** 0.8: Mescc now writes object files in stage0's labeled hex2 format.
*** 0.7: Mescc supports -E, -c, -o options, include more complete set of header files, *** 0.7: Mescc supports -E, -c, -o options, include more complete set of header files,
eenough to work on compiling tinycc's tcc.c albeit a somewhat modified version. enough to work on compiling tinycc's tcc.c albeit a somewhat modified version.
*** 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's tests/test2 suite. *** 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's tests/test2 suite.
*** 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and mescc, *** 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and mescc,
Support call-with-current-continuation, refactor catch/throw Support call-with-current-continuation, refactor catch/throw
@ -130,6 +135,7 @@ eenough to work on compiling tinycc's tcc.c albeit a somewhat modified version.
* Bugs * Bugs
** tcc: tcc-built lib/libc+tcc.c segfaults with mes, with tcc.
** mes: remove pmatch-car/pmatch-cdr hack. ** mes: remove pmatch-car/pmatch-cdr hack.
** mescc: softcode stack frame size, now hardcoded and very large ** mescc: softcode stack frame size, now hardcoded and very large
** mes+mescc: parse tcc.c->tcc.E works, compile tcc.E -> tcc.M1 segfaults. ** mes+mescc: parse tcc.c->tcc.E works, compile tcc.E -> tcc.M1 segfaults.

77
INSTALL
View file

@ -1,53 +1,64 @@
-*- org -*- -*- org -*-
Building and Installing Mes Building and Installing Mes
* Get it Mes can be built in two modes: as a regulare package build or as
a bootstrap package.
After bootstrapping Mes, it can be used to bootstrap TinyCC (tcc) in a
similar way.
* Get it
git clone https://gitlab.com/janneke/mes git clone https://gitlab.com/janneke/mes
* Prerequisites * Regular build
** Bootstrapping ** Prerequisites
For bootstrapping, the M1 macro assembler and hex2 linker and Nyacc
*** [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.4 is known to work.
*** [[https://savannah.gnu.org/projects/nyacc][Nyacc]], [[https://gitlab.com/janneke/nyacc][patched Nyacc]] 0.80.42 is known to work.
For development
** Development
For development, there are some more dependencies.
*** Guix *** Guix
guix environment -l guix.scm #64 bit + 32bit guix environment -l guix.scm #64 bit + 32bit
guix environment --system=i686-linux -l guix.scm #32 bit only guix environment --system=i686-linux -l guix.scm #32 bit only
*** Other GNU/Linux *** Other GNU/Linux
**** [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.4 is known to work. - [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.4 is known to work.
**** [[https://savannah.gnu.org/projects/nyacc][Nyacc]], [[https://gitlab.com/janneke/nyacc][patched Nyacc]] 0.80.42 is known to work. - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], [[https://gitlab.com/janneke/nyacc][patched Nyacc]] 0.80.42 is known to work.
**** GNU Gcc, 4.9.3 is known to work. - GNU Gcc, 4.9.3 is known to work.
The idea is to drop this requirement, of course. - GNU Guile, version 2.0.12 or is know to work.
- SH, /bin/sh, GNU Bash 4.3 is known to work.
**** GNU Guile, version 2.0.12 or is know to work. - GNU coreutils
Guile is not strictly necessary but it is used by the configure script - sed, GNU sed 4.2 is known to work.
and in development. - git, 2.10 is known to work.
- Perl, 5.22 is known to work.
**** /bin/sh, GNU Bash 4.3 is known to work.
Let's just say for now that it gets awkward without a shell.
**** GNU coreutils
**** sed, GNU sed 4.2 is known to work.
**** git, 2.10 is known to work.
**** Perl, 5.22 is known to work.
* Build it
** Build it
./configure ./configure
make make
* Check it ** Check it
make check make check
* Install it ** Install it
make install make install
* Guix it...
* Guix it
guix package -f guix.scm guix package -f guix.scm
* Bootstrap build
The bootstrap build is being prototyped in GuixSD, see
https://gitlab.com/janneke/guix/blob/wip-bootstrap/gnu/packages/mes.scm
** Prerequisites
- [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.4 is known to work.
- [[https://savannah.gnu.org/projects/nyacc][Nyacc]], [[https://gitlab.com/janneke/nyacc][patched Nyacc]] 0.80.42 is known to work.
- [[https://github.com/oriansj/mescc-tools][mes-seed]], 0.15 is known to work.
** Build it
<setup environment, e.g. PREFIX, MES_SEED>
./build.sh
** Check it
./check.sh
** Install it
./install.sh

18
NEWS
View file

@ -10,6 +10,24 @@ Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Please send Mes bug reports to janneke@gnu.org. Please send Mes bug reports to janneke@gnu.org.
* Changes in 0.16 since 0.15
** Core
*** Support building with tcc, including Mes Lib C in-line assembly.
*** core:execl now supports 1000 arguments.
** MesCC
*** Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
*** MesCC binaries now run on Linux 4.17 too, i.e. survive Linus' new `sane mmap limits.'
*** MesCC now runs with mescc-tools 0.5 (no = in long options).
**** 3 new C test
88-strrchrc, 97-fopen.c, 98-fopen.c.
** Noteworthy bug fixes
*** strrchr now stops when it reaches start of string.
*** fopen now return 0 upon failure. Supports binutils' hack: fd=-2 means `cached'.
*** vfprintf, vsprintf now support precision and width on integers strings better.
*** fread now produces ungetc'd chars too.
*** memcmp now supports comparing 0 bytes, supporting binutils.
*** The unused ELF header data section, identical to the text section, has been removed.
* Changes in 0.15 since 0.14 * Changes in 0.15 since 0.14
** Core ** Core
*** Support fork, exec, waitpid. *** Support fork, exec, waitpid.

40
README
View file

@ -6,7 +6,7 @@ of the [[http://bootstrappable.org][bootstrappable builds]] effort.
It currently consists of a mutual self-hosting Scheme interpreter It currently consists of a mutual self-hosting Scheme interpreter
prototype written in C and a Nyacc-based C compiler written in Scheme. prototype written in C and a Nyacc-based C compiler written in Scheme.
This C prototype is being simplified to be transpiled by [[https://github.com/oriansj/m2-planet][M2-Planet]]. This C prototype is [[https://github.com/oriansj/mes-m2][being simplified]] to be transpiled by [[https://github.com/oriansj/m2-planet][M2-Planet]].
The Scheme interpreter prototype (mes.c) has a Garbage Collector, a The Scheme interpreter prototype (mes.c) has a Garbage Collector, a
library of loadable Scheme modules-- notably Dominique Boucher's [[https://github.com/schemeway/lalr-scm][LALR]], library of loadable Scheme modules-- notably Dominique Boucher's [[https://github.com/schemeway/lalr-scm][LALR]],
@ -14,25 +14,14 @@ Pre-R6RS [[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][p
Guile's [[https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html][PEG]] --and test suite just barely enough to support a simple Guile's [[https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html][PEG]] --and test suite just barely enough to support a simple
REPL and simple C-compiler: MesCC. REPL and simple C-compiler: MesCC.
Mes+MesCC can compile a only [[https://gitlab.com/janneke/tinycc][lightly modified TinyCC]] that is Mes+MesCC can compile an only [[https://gitlab.com/janneke/tinycc][lightly patched TinyCC]] that is
self-hosting. Using the Mes C library, this tcc can now build the self-hosting. Using this tcc and the Mes C library we now have a
gnutools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. reduced-binary-seed bootstrap for the gnutools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-4.1.0.
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 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 McCarthy page 13, GNU Guix's source/binary packaging transparency and
Jeremiah Orians's stage0 ~300 byte self-hosting hex assembler. Jeremiah Orians's [[https://github.com/oriansj/stage0][stage0]] ~500 byte self-hosting hex assembler.
[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
Mes is free software, it is distributed under the terms of the GNU Mes is free software, it is distributed under the terms of the GNU
General Public Licence version 3 or later. See the file COPYING. General Public Licence version 3 or later. See the file COPYING.
@ -56,3 +45,20 @@ General Public Licence version 3 or later. See the file COPYING.
* MesCC compiler * MesCC compiler
scripts/mescc -c scaffold/main.c scripts/mescc -c scaffold/main.c
* Bugs
Please send Mes bug reports to janneke@gnu.org.
[0] https://gitlab.com/janneke/mes
[1] https://www.gnu.org/software/guix
[2] http://bootstrappable.org
[3] https://github.com/oriansj/mes-m2
[4] https://github.com/oriansj/m2-planet
[5] https://github.com/schemeway/lalr-scm
[6] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
[7] https://www.nongnu.org/nyacc
[8] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
[9] https://gitlab.com/janneke/tinycc
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf
[11] https://github.com/oriansj/stage0

100
doc/ANNOUNCE-0.16 Normal file
View file

@ -0,0 +1,100 @@
Subject: Mes 0.16 released
I am pleased to announce the release of Mes 0.16, representing 27
commits over 2 weeks.
A most annoying ELF header bug was fixed that suddenly had all Mes
binaries segfault before entering `_start' on Linux 4.17 and later.
We now have binutils-2.20.1 and gcc-4.1.0, both compiled with
gcc-2.95.3 and glibc-2.2.5.
This reduced-binary-seed bootstrap still depends on these bootstrap
binaries: BOOTSTRAP-GUILE, flex, bash, bzip2, coreutils, diffutils,
gawk, grep, gzip, make, sed, tar, on the small binary seeds:
tinycc-seed, mescc-seed and on the mes.M1 ASCII seed.
Next targets:
- build a Gcc 4.7 and Glibc 2.23
- upstream the x86 Mes bootstrap to GuixSD
- reduce the 1MB ASCII M1 seed to ~5000 LOC/~100KB of M2 source
- revive Gash: a posix shell for Guile to reduce the bootstrap binary
dependencies
- and/or otherwise reduce the bootstrap binary dependencies
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] effort.
It currently consists of a mutual self-hosting Scheme interpreter
prototype written in C and a Nyacc-based C compiler written in Scheme.
This C prototype is being simplified[3] to be transpiled by M2-Planet[4].
The Scheme interpreter prototype (mes.c) has a Garbage Collector, a
library of loadable Scheme modules-- notably Dominique Boucher's LALR[5],
Pre-R6RS portable syntax-case[6] with R7RS ellipsis, Matt Wette's Nyacc[7],
Guile's PEG[8] --and test suite just barely enough to support a simple
REPL and simple C-compiler: MesCC.
Mes+MesCC can compile an only lighty patched TinyCC[9] that is
self-hosting. Using this tcc and the Mes C library we now have a
reduced-binary-seed bootstrap for the gnutools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-4.1.0.
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] --
John McCarthy page 13, GNU Guix's source/binary packaging transparency
and Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
* Download
git clone https://gitlab.com/janneke/mes
wget https://gitlab.com/janneke/mes/-/archive/v0.16/mes-0.16.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
* Get informed, get involved
Join #bootstrappable on irc.freenode.net.
* Changes in 0.16 since 0.15
** Core
*** Support building with tcc, including Mes Lib C in-line assembly.
*** core:execl now supports 1000 arguments.
** MesCC
*** Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
*** MesCC binaries now run on Linux 4.17 too, i.e. survive Linus' new `sane mmap limits.'
*** MesCC now runs with mescc-tools 0.5 (no = in long options).
**** 3 new C test
88-strrchrc, 97-fopen.c, 98-fopen.c.
** Noteworthy bug fixes
*** strrchr now stops when it reaches start of string.
*** fopen now return 0 upon failure. Supports binutils' hack: fd=-2 means `cached'.
*** vfprintf, vsprintf now support precision and width on integers strings better.
*** fread now produces ungetc'd chars too.
*** memcmp now supports comparing 0 bytes, supporting binutils.
*** The unused ELF header data section, identical to the text section, has been removed.
Greetings,
janneke
[0] https://gitlab.com/janneke/mes
[1] https://www.gnu.org/software/guix
[2] http://bootstrappable.org
[3] https://github.com/oriansj/mes-m2
[4] https://github.com/oriansj/m2-planet
[5] https://github.com/schemeway/lalr-scm
[6] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
[7] https://www.nongnu.org/nyacc
[8] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
[9] https://gitlab.com/janneke/tinycc
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf
[11] https://github.com/oriansj/stage0