doc: Release udpate.

* HACKING: Update.
* INSTALL: Update.
* NEWS: Update.
* README: Update.
* doc/ANNOUNCE-0.9: New file.
* make.scm: Install it.
* guix.scm (mescc-tools): Bump to 0.2.
This commit is contained in:
Jan Nieuwenhuizen 2017-07-09 18:40:12 +02:00
parent 4b1de28449
commit e1e8f03735
9 changed files with 197 additions and 58 deletions

49
HACKING
View File

@ -10,12 +10,15 @@ development.
** DEVELOPMENT BUILD
To help development we assume ./configure sets these variables for make
CC -- gcc
CC32 -- i686-unknown-linux-gnu-gcc (or on x86, also gcc)
GUILE -- guile
MES -- unset
CC -- gcc
CC32 -- i686-unknown-linux-gnu-gcc (or on x86, also gcc)
GUILE -- guile
HEX2 -- hex2
MES -- unset
M1 -- M1
PREFIX -- ""
Mes is supposed to serve as a full equivalent for GUILE, however mes is much, much
Mes is supposed to serve as a full equivalent for Guile, however mes is much, much
slower than guile. That's why we usually don't use mes during development.
gcc is used to verify the sanity of our C sources.
@ -23,50 +26,46 @@ gcc is used to verify the sanity of our C sources.
i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
the gcc variant of mlbic: mlibc/libc-gcc.c and steal ideas.
guile is used to develop mescc, the C compiler in Scheme that during
Guile is used to develop mescc, the C compiler in Scheme that during
bootstrapping will be executed by mes.
** BOOTSTRAP BUILD
In bootstrap mode, we don't have gcc (CC), we don't have pa 32 bit gcc
(CC32), we have no guile (GUILE)...but we should have a bootstrap mes
(MES). FIXME.
(CC32), we have no guile (GUILE)...but we should have hex2, M1, and
FIXME: mes.M1.
mes is built from src/*.c and some out/src/*.h files that are snarfed from
src/*.c by build-aux/mes-snarf.scm.
Also, during bootstrap we don't have make. Running `make build-scripts'
generates several recipies of sh build scripts in out/.
Running ./make.scm produces a `script' file.
* ROADMAP
** TODO
*** release 0.8
- produce ELF_sym and ELF_str tables from hex2; nicer for objdump -d, gdb
*** release 0.10
- mescc: compile minimal main.c with tcc.mes https://gitlab.com/janneke/tinycc wip-mescc
*** release 0.x, unsorted
- simplify [at least the bootstrap] build process.
- seamless connection to stage0.
- mescc: compile tcc.c.
- mescc: support unsigned comparison, arithmetic.
- mescc: support bitfields.
- mescc: support unions.
- mescc: support anonymous unions.
- mescc: refactor compiler.mes, esp. (decl ..) bits.
- mescc: support floats.
- mescc: some success with 8cc/pcc/libguile/eval.c.
- build: guile/guix/make.scm: add file-types, intermediate, hash all dependencies
- build: make.scm: imperative->declaritive
- hex2: produce ELF_sym and ELF_str tables from hex2; nicer for objdump -d, gdb (in mescc-tools?)
- rewrite src/mes.c in stage0's stage2 LISP.
- and/or: rewrite src/mes.c in [annotated] assembly.
- and/or: rewrite src/mes.c in annotated hex2.
- and/or: rewrite src/mes.c M1
- and/or: connect to GNU Epsilon's VM
- and/or: compile Scheme to C, rewrite Mes.c into Mes.scm.
- real module support, bonus for supporting Guile's define-module/define-public syntax
- get full source syntax-case up (Andre van Tonder?) OR drop
- get full source syntax-case up (Andre van Tonder?) OR drop it
psyntax/syntax-case and rewrite Nyacc without syntax-case+R7RS Ellipsis
- support regexp OR rewrite Nyacc without regexps
- split-off Guile C compiler as standalone Guile project, still
respecting no-syntax-case bootstrap requirement
*** Compile the [[https://en.wikipedia.org/wiki/Tiny_C_Compiler][Tiny C Compiler]]
- build tcc (tinycc)
- split-off Guile C compiler as standalone Guile project
*** release 1.0
- work to replace GuixSD's bootstrap binaries for x86
- more architectures?
** DONE
** 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.7: Mescc supports -E, -c, -o options, include more complete set of header files,
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.

13
INSTALL
View File

@ -7,10 +7,10 @@ Building and Installing Mes
* Prerequisites
** Bootstrapping
For bootstrapping, the only dependency is the hex2 linker
*** [[https://github.com/oriansj/MESCC_Tools][MESCC_Tools]], 0.1 is known to work.
For bootstrapping, the M1 macro assembler and hex2 linker and Nyacc
*** [[https://github.com/oriansj/MESCC_Tools][MESCC_Tools]], 0.2 is known to work.
*** [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.80.3 is known to work.
For development
**
** Development
For development, there are some more dependencies.
*** Guix
@ -19,11 +19,8 @@ For development, there are some more dependencies.
guix environment --system=i686-linux -l guix.scm #32 bit only
*** Other GNU/Linux
**** [[https://github.com/oriansj/MESCC_Tools][MESCC_Tools]], 0.0 is known to work.
**** [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.78.0 is known to work.
Matt Wette's C99 LALR parser.
**** [[https://github.com/oriansj/MESCC_Tools][MESCC_Tools]], 0.2 is known to work.
**** [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.80.3 is known to work.
**** GNU Gcc, 4.9.3 is known to work.
The idea is to drop this requirement, of course.

35
NEWS
View File

@ -10,6 +10,41 @@ Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
Please send Mes bug reports to janneke@gnu.org.
* Changes in 0.9 since 0.8
** Core
*** Mes now builds better in non-Guix[SD] legacy distros/environments. Thanks, rain1!
** Mescc
*** Mescc now compiles a modified tinycc into a running [mostly segfaulting] tcc.mes.
https://gitlab.com/janneke/tinycc branch wip-mescc.
*** Mescc now supports locals stack frame larger than 1 byte offset.
*** Mescc now supports incomplete struct initializers {0}.
*** Mescc now supports >>=, <<=, ^=, ~.
*** Mescc now supports the comma operator.
*** Mescc now supports mullti-line string initializers.
*** Mescc now supports unions.
*** Mescc now supports arrays in structs.
*** Mescc now supports structs in structs.
*** Mescc now builds and runs with Guile-2.0 (legacy distro support, Guile-2.2 recommended).
*** Mescc has been refactored to use records.
*** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass].
*** Mescc now has an incremental test suite consisting of 56 tests.
*** Mescc now supports stdarg variable argument lists.
*** Mescc now has __GNUC__ unset, #f (WAS: 0).
*** Mescc now depends on Nyacc 0.80.3.
*** Mescc now depends on M1 from [[https://github.com/oriansj/MESCC_Tools][MESCC_Tools]] v0.2.
*** Mescc now compiles to M1 object files.
**** 7 new mlibc functions
calloc, close, getcwd, lseek, sprintf, unlink, vprintf.
**** 31 new mlibc stubs
execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek,
ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset,
qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr,
strtol, strtoll, strtoul, strtoull, time, vnsprintf.
**** 10 new header files
alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h,
stdnoreturn.h, sys/select.h, sys/wait.h.
** Noteworthy bug fixes
*** Many bugs and limitations in mescc have been fixed and removed.
* Changes in 0.8 since 0.7
** Mescc
*** Mescc now has experimental annotation support for hex2.

40
README
View File

@ -1,26 +1,38 @@
-*- org -*-
Mes -- Maxwell Equations of Software
Mes aims to create full source bootstrapping for GuixSD: an entirely
source-based bootstrap path. The target is to [have GuixSD] boostrap
from a minimal, easily inspectable binary --that should be readable as
source-- into something close to R6RS Scheme.
[[https://gitlab.com/janneke/mes][Mes]] aims to create full source bootstrapping for [[https://www.gnu.org/software/guix][GuixSD]] as part of the
[[http://bootstrappable.org][bootstrappable builds]] effort.
It currently consists of a mutual self-hosting [close to Guile-]
Scheme interpreter prototype in C and a Nyacc-based C compiler in
[Guile] Scheme.
[Guile] Scheme. This C prototype will be rewritten in [[https://github.com/oriansj/stage0][stage0]] M1
assembly (or possibly stage2 slow-LISP, or ...).
The Scheme interpreter prototype (mes.c) has a Garbage Collector, a
library of loadable Scheme modules-- notably [[https://github.com/schemeway/lalr-scm][Dominique Boucher's LALR]],
[[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][Pre-R6RS portable syntax-case]] with R7RS ellipsis, [[http://www.nongnu.org/nyacc/][Matt Wette's Nyacc]]
and [[https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html][Guile's PEG]] --and test suite just barely enough to support a
simple REPL (repl.mes) and simple C-compiler (mescc.mes) that can
produce the second initial ELF binary from binary from mes.c, in only
about 2h30'.
library of loadable Scheme modules-- notably Dominique Boucher's [[https://github.com/schemeway/lalr-scm][LALR]],
Pre-R6RS [[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][portable syntax-case]] with R7RS ellipsis, Matt Wette's [[https://www.nongnu.org/nyacc][Nyacc]],
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 (repl.mes) and simple C-compiler (mescc.mes).
Mes is inspired by The Maxwell Equations of Software: [[http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf][LISP-1.5]] -- John
McCarthy page 13, [[https://www.gnu.org/software/guix/][GNU Guix's]] source/binary packaging transparency and
[[https://github.com/oriansj/stage0][Jeremiah Orians's stage0]] bootstrap project.
The simple C compiler can now compile a [[https://gitlab.com/janneke/tinycc][modified TinyCC]]. This needs
more work. A with gcc compiled tcc is [[https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html][known]] to compile GCC.
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
Jeremiah Orians's stage0 ~300 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/stage0
[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] 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
Mes is free software, it is distributed under the terms of the GNU
General Public Licence version 3 or later. See the file COPYING.

4
configure vendored
View File

@ -174,7 +174,7 @@ exec ${GUILE} --no-auto-compile -L $(pwd) -C $(pwd) -e 'main' -s "$0" ${1+"$@"}
(if (member ARCH '("i686" "arm")) (string-append BUILD_TRIPLET "-" CC)
"i686-unknown-linux-gnu-gcc")))
(define HEX2 (or (getenv "HEX2") "hex2"))
(define M1 (or (getenv "M1") "M0"))
(define M1 (or (getenv "M1") "M1"))
(define (parse-opts args)
(let* ((option-spec
@ -220,7 +220,7 @@ Usage: ./configure [OPTION]...
(set! *verbose?* verbose?)
(check-version 'guile '(2 0))
(check-version HEX2 '(0 1))
;;(check-version M1 '(0 1)) ;; FIXME: 0xXX: bump to 0.2
(check-version M1 '(0 2))
(check-version 'nyacc '(0 80 3) #:command (string-append GUILE " -c '(use-modules (nyacc lalr)) (display *nyacc-version*)'"))
(check-version 'bash '(4 0))

93
doc/ANNOUNCE-0.9 Normal file
View File

@ -0,0 +1,93 @@
Subject: Mes 0.9 released
I am pleased to announce the release of Mes 0.9, representing 107
commits over 5 weeks. Mescc now compiles to a surprisingly readable
stage0 M1 macro assembler output format. Mescc now compiles a
modified TinyCC into a running [mostly segfaulting] executable. This
is a major milestone as tcc can compile GCC.
* About
Mes[0] aims to create full source bootstrapping for GuixSD[1] as
part of the bootstrappable builds[2] project.
It currently consists of a mutual self-hosting [close to Guile-]
Scheme interpreter prototype in C and a Nyacc-based C compiler in
[Guile] Scheme. This C prototype will be rewritten in stage0[3]
M1 assembly (or possibly stage2 slow-LISP, or ...).
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).
The simple C compiler can compile a modified TinyCC[8]. This
needs more work. A gcc-compiled tcc is known[9] to compile GCC.
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 ~300 byte self-hosting
hex assembler.
* Download
git clone https://gitlab.com/janneke/mes
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.9 -O mes-0.9.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.9 since 0.8
** Core
*** Mes now builds better in non-Guix[SD] legacy distros/environments. Thanks, rain1!
** Mescc
*** Mescc now compiles a modified tinycc into a running [mostly segfaulting] tcc.mes.
https://gitlab.com/janneke/tinycc branch wip-mescc.
*** Mescc now supports locals stack frame larger than 1 byte offset.
*** Mescc now supports incomplete struct initializers {0}.
*** Mescc now supports >>=, <<=, ^=, ~.
*** Mescc now supports the comma operator.
*** Mescc now supports mullti-line string initializers.
*** Mescc now supports unions.
*** Mescc now supports arrays in structs.
*** Mescc now supports structs in structs.
*** Mescc has been refactored to use records.
*** Mescc now builds and runs with Guile-2.0 (legacy distro support, not recommended).
*** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass].
*** Mescc now has an incremental test suite consisting of 56 tests.
*** Mescc now supports stdarg variable argument lists.
*** Mescc now has __GNUC__ unset, #f (WAS: 0).
*** Mescc now depends on Nyacc 0.80.3.
*** Mescc now depends on M1 from MESCC_Tools v0.2.
*** Mescc now compiles to M1 object files.
**** 7 new mlibc functions
calloc, close, getcwd, lseek, sprintf, unlink, vprintf.
**** 31 new mlibc stubs
execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek,
ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset,
qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr,
strtol, strtoll, strtoul, strtoull, time, vnsprintf.
**** 10 new header files
alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h,
stdnoreturn.h, sys/select.h, sys/wait.h.
Greetings,
janneke
[0] https://gitlab.com/janneke/mes
[1] https://www.gnu.org/software/guix
[2] http://bootstrappable.org
[3] https://github.com/oriansj/stage0
[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] 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

View File

@ -84,7 +84,7 @@
(define-public mescc-tools
(package
(name "mescc-tools")
(version "0.1")
(version "0.2")
(source (origin
(method url-fetch)
(uri (string-append
@ -94,8 +94,9 @@
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1lzi9sqv41269isn7in70q2hhh087n4v97zr5i2qzz69j2lkr3xb"))))
"13hcz7cpp6fsq55di2kbff0bxad95cbfyzcrziynybb16px5hgz4"))))
(build-system gnu-build-system)
(supported-systems '("i686-linux" "x86_64-linux"))
(arguments
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
#:test-target "test"
@ -104,7 +105,7 @@
(synopsis "Tools for the full source bootstrapping process")
(description
"Mescc-tools is a collection of tools for use in a full source
bootstrapping process. Currently consists of the M0 macro assembler and the
bootstrapping process. Currently consists of the M1 macro assembler and the
hex2 linker.")
(home-page "https://github.com/oriansj/MESCC_Tools")
(license gpl3+)))
@ -151,11 +152,12 @@ hex2 linker.")
build-aux/gitlog-to-changelog --srcdir=<git-checkout> > ChangeLog\n")))
#t))
(delete 'strip))))
(synopsis "Maxwell Equations of Software")
(synopsis "Scheme interpreter with C compiler for full source bootstrapping")
(description
"Mes aims to create full source bootstrapping for GuixSD. It
consists of a mutual self-hosting [close to Guile-] Scheme interpreter
prototype in C and a Nyacc-based C compiler in [Guile] Scheme.")
"Mes [Maxwell Equations of Software] aims to create full source
bootstrapping for GuixSD. It consists of a mutual self-hosting [close to
Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in
[Guile] Scheme.")
(home-page "https://gitlab.com/janneke/mes")
(license gpl3+))))

View File

@ -533,7 +533,8 @@ exec ${GUILE-guile} --no-auto-compile -L . -L guile -C . -C guile -s "$0" ${1+"$
"HACKING"
"INSTALL"
"NEWS"
"README"))
"README"
"doc/ANNOUNCE-0.9"))
(add-target (install "doc/fosdem/fosdem.pdf" #:dir "share/doc/mes"))

View File

@ -74,7 +74,7 @@
(define (hex2:offset1 o)
(string-append "!" o))
(define hex? #f) ; We need unreleased messc-tools 0.2 wih 0xXX support for this
(define hex? #t)
(define (hex2:immediate o)
(if hex? (string-append "%0x" (dec->hex o))