doc: Release udpate.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 9 Jul 2017 16:40:12 +0000 (18:40 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 26 Jul 2017 13:57:38 +0000 (15:57 +0200)
* 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.

HACKING
INSTALL
NEWS
README
configure
doc/ANNOUNCE-0.9 [new file with mode: 0644]
guix.scm
make.scm
module/mes/M1.mes

diff --git a/HACKING b/HACKING
index 9708f3fa1dd9c4d2b79a300de99076a8e5437171..06874478eafce980c1ceef1d79ba9c25ec62e436 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -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
-
-Mes is supposed to serve as a full equivalent for GUILE, however mes is much, much
+   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
 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.
diff --git a/INSTALL b/INSTALL
index 5a00dbf4ca7f50c7fa027039b202e9edcf2d1207..c8ebddaf2eb380aa8b36c7c90dc569a451502500 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -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.
 
diff --git a/NEWS b/NEWS
index ad7c355757a2418b826870d7d5fd0aed37fc39a1..24719c18a2ea4415f95c9952d603d7176ba62a11 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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.
diff --git a/README b/README
index ae2653da78fbaa76a499c7b71fe82152410baed2..704f46b8baffb7e4262857edfee063dedd26d089 100644 (file)
--- a/README
+++ b/README
@@ -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'.
-
-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.
+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).
+
+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.
index ed42b9d8ea18f9b2275dcca5f31fb7f579c14bf4..1713256709f16e314431fbf743afb5a2e7e56d5d 100755 (executable)
--- a/configure
+++ b/configure
@@ -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))
diff --git a/doc/ANNOUNCE-0.9 b/doc/ANNOUNCE-0.9
new file mode 100644 (file)
index 0000000..662967e
--- /dev/null
@@ -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
index cb129c07d19dffd65e466e07057283aea7fd8351..857f216c9f9d56ed8f4d3c6a6431f50ab4f66e16 100644 (file)
--- a/guix.scm
+++ b/guix.scm
@@ -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"
     (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+))))
 
index c13e64eb4870310b3025dbc29d4d1e769a3c83ca..b2c95943c98c3f84095332407ae418717b9f5838 100755 (executable)
--- a/make.scm
+++ b/make.scm
@@ -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"))
 
index 14e1c48b8b7736990699b1f9aa5c9fae11bd1613..470a183863003aa78085a66b9fc03fc858ed10e5 100644 (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))