-*- org -*- #+TITLE: Building and Installing GNU Mes Copyright © 2016,2017,2018,2019,2021,2022,2023 Jan (janneke) Nieuwenhuizen 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. 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 [[git://git.savannah.gnu.org][git://git.savannah.gnu.org/mes.git]] * Regular build ** Prerequisites *** Guix #+BEGIN_SRC bash guix shell #64 bit + 32bit guix shell --system=i686-linux #32 bit only guix shell --system=armhf-linux #32 bit only #+END_SRC *** Other GNU/Linux - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 1.4.0 is known to work. - [[https://github.com/oriansj/m2-planet][M2-Planet]] (optional), 1.11.0 is known to work. - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 1.00.2 is known to work. - GNU Gcc, 7.5.0 is known to work. - GNU Guile, version 3.0.4 is known to work. - SH, /bin/sh, GNU Bash 5.0.16 is known to work. - GNU coreutils. - sed, GNU sed 4.8 is known to work. ** Build it #+BEGIN_SRC bash ./configure make #+END_SRC If you get something like #+BEGIN_SRC bash mes.c:(.text+0x8da0): undefined reference to `__stack_chk_fail' #+END_SRC then your compiler inserts stack protection code. The Mes C Library does not support that. Turn it off lik this #+BEGIN_SRC bash ./configure CFLAGS=-fno-stack-protector #+END_SRC ** Check it #+BEGIN_SRC bash make check #+END_SRC ** Install it #+BEGIN_SRC bash make install #+END_SRC * Guix it #+BEGIN_SRC bash guix build -f guix.scm #+END_SRC * Bootstrap build The bootstrap build is part of Guix, see https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm ** Prerequisites - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 1.4.0 is known to work. - [[https://github.com/oriansj/m2-planet][M2-Planet]], 1.9.0 is known to work. - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 1.00.2 is known to work. ** Build it #+BEGIN_SRC bash sh configure.sh [--prefix=] sh bootstrap.sh #+END_SRC ** Check it #+BEGIN_SRC bash sh check.sh #+END_SRC ** Install it #+BEGIN_SRC bash sh install.sh #+END_SRC * Regular build and bootstrap combine To build mes.c using MesCC, configure using --with-bootstrap: #+BEGIN_SRC bash ./configure --with-bootstrap make #+END_SRC This creates bin/mes-gcc and bin/mes-mescc.