build: Fix configure crashing when no compiler is present.
[mes.git] / INSTALL
1                                                               -*- org -*-
2 #+TITLE: Building and Installing GNU Mes
3
4 Copyright © 2016,2017,2018,2019,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
5
6   Copying and distribution of this file, with or without modification,
7   are permitted in any medium without royalty provided the copyright
8   notice and this notice are preserved.
9
10 Mes can be built in two modes: as a regulare package build or as a
11 bootstrap package.
12
13 After bootstrapping Mes it can be used to bootstrap TinyCC (tcc) in a
14 similar way.
15
16 * Get it
17    git clone [[git://git.savannah.gnu.org][git://git.savannah.gnu.org/mes.git]]
18
19 * Regular build
20 ** Prerequisites
21 *** Guix
22    #+BEGIN_SRC bash
23    guix shell #64 bit + 32bit
24    guix shell --system=i686-linux #32 bit only
25    guix shell --system=armhf-linux #32 bit only
26    #+END_SRC
27
28 *** Other GNU/Linux
29   - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 1.4.0 is known to work.
30   - [[https://github.com/oriansj/m2-planet][M2-Planet]] (optional), 1.9.0 is known to work.
31   - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 1.00.2 is known to work.
32   - GNU Gcc, 7.5.0 is known to work.
33   - GNU Guile, version 3.0.4 is know to work.
34   - SH, /bin/sh, GNU Bash 5.0.16 is known to work.
35   - GNU coreutils
36   - sed, GNU sed 4.8 is known to work.
37
38 ** Build it
39
40    #+BEGIN_SRC bash
41    ./configure
42    make
43    #+END_SRC
44
45 If you get something like
46
47    #+BEGIN_SRC bash
48    mes.c:(.text+0x8da0): undefined reference to `__stack_chk_fail'
49    #+END_SRC
50
51 then your compiler inserts stack protection code.  The Mes C Library
52 does not support that.  Turn it off lik this
53
54    #+BEGIN_SRC bash
55    ./configure CFLAGS=-fno-stack-protector
56    #+END_SRC
57
58 ** Check it
59
60    #+BEGIN_SRC bash
61    make check
62    #+END_SRC
63
64 ** Install it
65
66    #+BEGIN_SRC bash
67    make install
68    #+END_SRC
69
70 * Guix it
71
72    #+BEGIN_SRC bash
73    guix build -f guix.scm
74    #+END_SRC
75
76 * Bootstrap build
77
78 The bootstrap build is part of Guix, see
79 https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm
80
81 ** Prerequisites
82   - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 1.4.0 is known to work.
83   - [[https://github.com/oriansj/m2-planet][M2-Planet]], 1.9.0 is known to work.
84   - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 1.00.2 is known to work.
85
86 ** Build it
87
88    #+BEGIN_SRC bash
89    sh configure.sh [--prefix=<prefix>]
90    sh bootstrap.sh
91    #+END_SRC
92
93 ** Check it
94
95    #+BEGIN_SRC bash
96    sh check.sh
97    #+END_SRC
98
99 ** Install it
100
101    #+BEGIN_SRC bash
102    sh install.sh
103    #+END_SRC
104 * Regular build and bootstrap combine
105
106 To build mes.c using MesCC, configure using --with-bootstrap:
107
108    #+BEGIN_SRC bash
109    ./configure --with-bootstrap
110    make
111    #+END_SRC
112
113 This creates bin/mes-gcc and bin/mes-mescc.