build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-gcc.
[mes.git] / simple.sh
1 #! /bin/sh
2
3 # GNU Mes --- Maxwell Equations of Software
4 # Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
5 #
6 # This file is part of GNU Mes.
7 #
8 # GNU Mes is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or (at
11 # your option) any later version.
12 #
13 # GNU Mes is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
20
21 set -ex
22
23 ################################################################################
24 # SYSTEM_LIBC build
25
26 ## Clean ##
27 rm -rf out-system-libc
28 mkdir out-system-libc
29
30 ## Configure ##
31 mes_cpu=x86_64
32 mes_bits=64
33 cat > include/mes/config.h <<EOF
34 #define SYSTEM_LIBC 1
35 #define MES_VERSION "git"
36 #define MES_PKGDATADIR "/usr/local/share/mes"
37 EOF
38
39 ## Build ##
40 gcc -g -D HAVE_CONFIG_H=1 -I include\
41     -o out-system-libc/mes\
42     \
43     lib/mes/eputs.c\
44     lib/mes/oputs.c\
45     \
46     lib/mes/div.c\
47     lib/mes/itoa.c\
48     lib/mes/ltoa.c\
49     lib/mes/ltoab.c\
50     lib/mes/ultoa.c\
51     lib/mes/utoa.c\
52     lib/mes/eputc.c\
53     lib/mes/fdgetc.c\
54     lib/mes/fdputc.c\
55     lib/mes/fdputs.c\
56     lib/mes/fdungetc.c\
57     lib/mes/mes_open.c\
58     lib/mes/ntoab.c\
59     lib/mes/oputc.c\
60     \
61     src/gc.c\
62     src/hash.c\
63     src/lib.c\
64     src/math.c\
65     src/mes.c\
66     src/module.c\
67     src/posix.c\
68     src/reader.c\
69     src/string.c\
70     src/struct.c\
71     src/vector.c
72
73 ## Check ##
74
75 # Any light?
76 out-system-libc/mes --help
77
78 # Simplest of tests
79 echo '(display "hello\n")' | MES_BOOT=boot-01.scm out-system-libc/mes
80
81 # Basic test.  We should be safe, but there are ~30 more in tests/*.test.
82 MES_DEBUG=4 MES=out-system-libc/mes tests/base.test
83
84 # GC test
85 MES_DEBUG=3 MES_ARENA=10000 MES_MAX_ARENA=10000 MES_BOOT=scaffold/gc-test.scm out-system-libc/mes
86
87 # MesCC test
88 MES_DEBUG=2 MES=out-system-libc/mes sh -x scripts/mescc -m $mes_bits -nostdlib\
89          -I include -I include/$mes_kernel/$mes_cpu\
90          -o out-system-libc/hello\
91          lib/linux/$mes_cpu-mes-mescc/crt1.c\
92          \
93          lib/mes/eputs.c\
94          \
95          lib/linux/$mes_cpu-mes-mescc/mini.c\
96          \
97          lib/mes/write.c\
98          lib/string/strlen.c\
99          \
100          scaffold/hello.c
101 set +e
102 out-system-libc/hello
103 r=$?
104 if [ $r != 42 ]; then
105    exit 1
106 fi
107
108 ################################################################################
109 # Mes C lib build
110
111 # To get a i686-unknown-linux-gnu-gcc, you may do:
112 #    guix environment -l guix.scm
113 # or
114 #    guix environment --ad-hoc -e '(begin (use-modules (gnu packages cross-base)) (list (cross-binutils "i686-unknown-linux-gnu") (cross-gcc "i686-unknown-linux-gnu")))'
115
116 ## Clean ##
117 rm -rf out-mes
118 mkdir out-mes
119
120 ## Configure ##
121 mes_kernel=linux
122 CC=gcc
123 mes_cpu=x86_64
124 #CC=i686-unknown-linux-gnu-gcc
125 #mes_cpu=x86
126 cat > include/mes/config.h <<EOF
127 // #define SYSTEM_LIBC 0
128 #define MES_VERSION "git"
129 #define MES_PKGDATADIR "/usr/local/share/mes"
130 EOF
131
132 ## Build ##
133 compiler=gcc     # not configurable
134 $CC -g -D HAVE_CONFIG_H=1 -I include -I include/$mes_kernel/$mes_cpu\
135     -nostdinc -nostdlib -fno-builtin -fno-stack-protector\
136     -o out-mes/mes\
137     \
138     lib/linux/$mes_cpu-mes-gcc/crt1.c\
139     \
140     lib/mes/eputs.c\
141     lib/mes/oputs.c\
142     \
143     lib/posix/write.c\
144     lib/string/strlen.c\
145     lib/stdlib/puts.c\
146     lib/stdlib/exit.c\
147     lib/$mes_kernel/$mes_cpu-mes-$compiler/mini.c\
148     \
149     lib/mes/div.c\
150     lib/mes/itoa.c\
151     lib/mes/ltoa.c\
152     lib/mes/ltoab.c\
153     lib/mes/ultoa.c\
154     lib/mes/utoa.c\
155     lib/mes/eputc.c\
156     lib/mes/fdgetc.c\
157     lib/mes/fdputc.c\
158     lib/mes/fdputs.c\
159     lib/mes/fdungetc.c\
160     lib/mes/mes_open.c\
161     lib/mes/ntoab.c\
162     lib/mes/oputc.c\
163     \
164     lib/stdlib/atoi.c\
165     lib/mes/abtol.c\
166     lib/ctype/isdigit.c\
167     lib/ctype/isnumber.c\
168     lib/ctype/isspace.c\
169     lib/ctype/isxdigit.c\
170     \
171     lib/mes/__assert_fail.c\
172     lib/mes/__buffered_read.c\
173     lib/mes/__mes_debug.c\
174     lib/posix/execv.c\
175     lib/posix/getcwd.c\
176     lib/posix/getenv.c\
177     lib/posix/isatty.c\
178     lib/posix/open.c\
179     lib/posix/read.c\
180     lib/posix/setenv.c\
181     lib/posix/wait.c\
182     lib/stdio/fgetc.c\
183     lib/stdio/fputc.c\
184     lib/stdio/fputs.c\
185     lib/stdio/getc.c\
186     lib/stdio/getchar.c\
187     lib/stdio/putc.c\
188     lib/stdio/putchar.c\
189     lib/stdio/ungetc.c\
190     lib/stdlib/free.c\
191     lib/stdlib/malloc.c\
192     lib/stdlib/realloc.c\
193     lib/string/memchr.c\
194     lib/string/memcmp.c\
195     lib/string/memcpy.c\
196     lib/string/memmove.c\
197     lib/string/memset.c\
198     lib/string/strcmp.c\
199     lib/string/strcpy.c\
200     lib/string/strncmp.c\
201     \
202     lib/linux/lseek.c\
203     \
204     lib/linux/access.c\
205     lib/linux/brk.c\
206     lib/linux/chmod.c\
207     lib/linux/clock_gettime.c\
208     lib/linux/dup.c\
209     lib/linux/dup2.c\
210     lib/linux/execve.c\
211     lib/linux/fork.c\
212     lib/linux/fsync.c\
213     lib/linux/_getcwd.c\
214     lib/linux/gettimeofday.c\
215     lib/linux/ioctl.c\
216     lib/linux/_open3.c\
217     lib/linux/_read.c\
218     lib/linux/time.c\
219     lib/linux/unlink.c\
220     lib/linux/waitpid.c\
221     lib/linux/$mes_cpu-mes-$compiler/syscall.c\
222     \
223     src/gc.c\
224     src/hash.c\
225     src/lib.c\
226     src/math.c\
227     src/mes.c\
228     src/module.c\
229     src/posix.c\
230     src/reader.c\
231     src/string.c\
232     src/struct.c\
233     src/vector.c
234
235 ## Check ##
236
237 # Any light?
238 out-mes/mes --help
239
240 # Simplest of tests
241 echo '(display "hello\n")' | MES_BOOT=boot-01.scm out-mes/mes
242
243 # Basic test.  We should be safe, but there are ~30 more in tests/*.test.
244 MES_DEBUG=4 MES=out-mes/mes tests/base.test
245
246 # GC test
247 MES_DEBUG=3 MES_ARENA=10000 MES_MAX_ARENA=10000 MES_BOOT=scaffold/gc-test.scm out-mes/mes
248
249 # MesCC test
250 MES_DEBUG=2 MES=out-mes/mes sh -x scripts/mescc -m $mes_bits -nostdlib\
251          -I include -I include/$mes_kernel/$mes_cpu\
252          -o out-mes/hello\
253          lib/linux/$mes_cpu-mes-mescc/crt1.c\
254          \
255          lib/mes/eputs.c\
256          \
257          lib/linux/$mes_cpu-mes-mescc/mini.c\
258          \
259          lib/mes/write.c\
260          lib/string/strlen.c\
261          \
262          scaffold/hello.c
263 set +e
264 out-mes/hello
265 r=$?
266 if [ $r != 42 ]; then
267    exit 1
268 fi