GNU Mes is a Scheme interpreter and C compiler for bootstrapping the GNU System.
Go to file
R. Masters b28f42de07
lib: Support uppercase hex conversions.
Uppercase hex number conversions fail for abtol, strtol, strtoul,
strtoull, atoi, and abtod.

The following patch fixes it.  This allows tcc to handle assembly
language, which is necessary to build the Fiwix kernel as part of the
kernel bootstrapping in progress for the live-bootstrap project.

* lib/ctype/isxdigit.c (isxdigit): Also allow A-F.
* lib/mes/abtol.c (abtol): Also cater for A-F.
2023-01-31 08:22:49 -08:00
build-aux lib: stat: Use SYS_stat64 for 32bit platforms. 2022-10-29 13:17:58 +02:00
doc doc: Use HTTPS. 2022-10-30 09:40:40 +01:00
guix/git guix: mes: Update to 0.24.1. 2022-10-16 10:14:43 +02:00
include lib: stat: Use SYS_stat64 for 32bit platforms. 2022-10-29 13:17:58 +02:00
lib lib: Support uppercase hex conversions. 2023-01-31 08:22:49 -08:00
mes/module build: Release 0.24. 2022-04-30 16:14:55 +02:00
module mescc: Fix Guile warnings. 2022-10-19 10:01:48 +02:00
scaffold scaffold: Remove obsolete malloc. 2022-05-07 08:45:06 +02:00
scripts mescc: Make sure includedir, libdir are set. 2021-01-23 08:40:55 +01:00
src core: Simplify math expressions. 2022-05-10 22:23:40 +02:00
tests mes: Remove PEG. 2020-12-30 17:28:21 +01:00
.dir-locals.el .dir-locals: Add test macro indentation. 2020-12-30 11:47:32 +01:00
.gitignore lib: stat: Use SYS_stat64 for 32bit platforms. 2022-10-29 13:17:58 +02:00
AUTHORS doc: Update 'AUTHORS'. 2021-01-02 13:45:00 +01:00
BLURB doc: Release update. 2019-11-04 19:59:13 +01:00
BOOTSTRAP doc: Migration to Libera Chat. 2021-06-14 20:05:19 +02:00
COPYING doc: Use HTTPS. 2022-10-30 09:40:40 +01:00
ChangeLog Add missing copyright headers and READMEs. 2018-07-26 19:17:12 +02:00
HACKING doc: Use HTTPS. 2022-10-30 09:40:40 +01:00
INSTALL doc: Update dependencies, add M2-Planet. 2022-04-30 11:12:48 +02:00
NEWS doc: Update `NEWS'. 2022-10-15 10:01:10 +02:00
PORTING doc: Update `PORTING'. 2022-06-01 14:24:34 +02:00
README doc: Use HTTPS. 2022-10-30 09:40:40 +01:00
ROADMAP doc: Update `ROADMAP'. 2022-10-15 10:05:13 +02:00
configure lib: stat: Use SYS_stat64 for 32bit platforms. 2022-10-29 13:17:58 +02:00
configure.sh lib: stat: Use SYS_stat64 for 32bit platforms. 2022-10-29 13:17:58 +02:00
guix.scm doc: Use `guix shell' instead of `guix environment'. 2022-04-30 09:44:57 +02:00
kaem.run lib: stat: Use SYS_stat64 for 32bit platforms. 2022-10-29 13:17:58 +02:00
simple.make simple.make: Resurrect. 2022-05-03 22:51:21 +02:00
simple.sh lib: stat: Use SYS_stat64 for 32bit platforms. 2022-10-29 13:17:58 +02:00

README

#+COMMENT:                                                            -*- org -*-
#+TITLE: About GNU Mes

#+SUBTITLE: Maxwell Equations of Software

[[https://www.gnu.org/software/mes][GNU Mes]] is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  Since version 0.22 it has again helped to halve the size of
opaque, uninspectable binary seeds that are currently being used in the
[[https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25][Further Reduced Binary Seed bootstrap]] of [[https://www.gnu.org/software/guix][GNU Guix]].  The final goal is to
help create a full-source bootstrap as part of the [[https://bootstrappable.org][bootstrappable builds]]
effort for UNIX-like operating systems.

The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from [[https://github.com/oriansj/m2-planet][M2-Planet]] and [[https://savannah.nongnu.org/projects/mescc-tools][Mescc-Tools]].

Mes has a Garbage Collector, a 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]] --and test suite, just enough to
support a REPL and a C99 compiler: mescc.

Mes + MesCC + Mes C Library can build a [[https://gitlab.com/janneke/tinycc][bootstrappable TinyCC]] 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-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.

Mes is inspired by The Maxwell Equations of Software: [[https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf][LISP-1.5]] -- John
McCarthy page 13, GNU Guix's source/binary packaging transparency and
Jeremiah Orians's [[https://github.com/oriansj/stage0][stage0]] ~500 byte self-hosting hex assembler.

We are very grateful to NLNet for sponsoring the [[https://nlnet.nl/project/GNUMes][Reduced Binary Seed
bootstrap]], the [[https://nlnet.nl/project/GNUMes-arm][ARM port]], and the [[https://nlnet.nl/project/GNUMes-ARM_RISC-V][Full Source Bootstrap.]]

GNU Mes is free software, it is distributed under the terms of the GNU
General Public Licence version 3 or later.  See the file [[file:COPYING][COPYING]].

* Get it

   #+BEGIN_SRC bash
   git clone git://git.savannah.gnu.org/mes.git
   #+END_SRC

* Build it (see [[file:INSTALL][INSTALL]] for full instructions)

   #+BEGIN_SRC bash
   ./configure
   make all
   make check
   #+END_SRC

* REPL it

   #+BEGIN_SRC bash
   ./pre-inst-env mes
   #+END_SRC

* MesCC compiler

   #+BEGIN_SRC bash
   ./pre-inst-env mescc -c scaffold/main.c
   #+END_SRC

* Bugs

    Please send Mes bug reports to [[mailto:bug-mes@gnu.org][bug-mes@gnu.org]].

* Links
  [0] https://www.gnu.org/software/mes
  [1] https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25
  [2] https://www.gnu.org/software/guix
  [3] https://bootstrappable.org
  [4] https://github.com/oriansj/m2-planet
  [5] https://savannah.nongnu.org/projects/mescc-tools
  [6] https://github.com/schemeway/lalr-scm
  [7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
  [8] https://www.nongnu.org/nyacc
  [9] https://gitlab.com/janneke/tinycc
  [10] [[https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf]]
  [11] https://savannah.nongnu.org/projects/stage0
  [12] https://nlnet.nl/project/GNUMes
  [13] https://nlnet.nl/project/GNUMes-arm
  [14] https://nlnet.nl/project/GNUMes-ARM_RISC-V

* Legalese
Copyright © 2016,2017,2018,2019,2020,2021,2022 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]>

  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
  notice and this notice are preserved.