mescc: Support regular C99 compile, headers + mlibc.

* libc/include/assert.h: New file.
* libc/include/ctype.h: New file.
* libc/include/errno.h: New file.
* libc/include/fcntl.h: New file.
* libc/include/limits.h: New file.
* libc/include/mlibc.h: New file.
* libc/include/stdio.h: New file.
* libc/include/stdlib: New file.
* libc/include/string.h: New file.
* libc/include/unistd.h: New file.
* libc/mlibc.c: Remove declarations.
* make/bin.make (INCLUDES): Factor out standard includes.
* make/bin-mlibc.make: New file.
* scaffold/scaffold.make: Use it.
* src/src.make: Use it.
* module/language/c99/compiler.mes (ast-info): Handle more function declarations.
* scaffold/cons-mes.c: Remove mlibc definitionsa and mlibc.c include.
  Instead include <mlibc.h>.
* scaffold/hello.c: Likewise.
* scaffold/m.c: Likewise.
* scaffold/malloc.c: Likewise.
* scaffold/micro-mes.c: Likewise.
* scaffold/mini-mes.c: Likewise.
* scaffold/t.c: Likewise.
* scaffold/tiny-mes.c: Likewise.
* src/gc.c: Likewise.
* src/lib.c: Likewise.
* src/math.c: Likewise.
* src/mes.c: Likewise.
* src/posix.c: Likewise.
* src/reader.c: Likewise.
This commit is contained in:
Jan Nieuwenhuizen 2017-05-02 23:30:46 +02:00
parent d9780e66cd
commit fe727301c5
32 changed files with 463 additions and 226 deletions

View file

@ -5,7 +5,7 @@ QUIET:=@
default: all default: all
MES_DEBUG:=1 MES_DEBUG:=1
CFLAGS:=--std=gnu99 -O0 -g CFLAGS:=--std=gnu99 -O0 -g --include mlibc.c
OUT:=out OUT:=out
SUBDIRS:=\ SUBDIRS:=\

32
libc/include/assert.h Normal file
View file

@ -0,0 +1,32 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __ASSERT_H
#define __ASSERT_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <assert.h>
#else // ! (__GNUC__ && POSIX)
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
#endif // ! (__GNUC__ && POSIX)
#endif // __ASSERT_H

33
libc/include/ctype.h Normal file
View file

@ -0,0 +1,33 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __CTYPE_H
#define __CTYPE_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <ctype.h>
#else // ! (__GNUC__ && POSIX)
int isdigit (int);
#endif // ! (__GNUC__ && POSIX)
#endif // __CTYPE_H

30
libc/include/errno.h Normal file
View file

@ -0,0 +1,30 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __ERRNO_H
#define __ERRNO_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <errno.h>
#endif // ! (__GNUC__ && POSIX)
#endif // __ERRNO_H

34
libc/include/fcntl.h Normal file
View file

@ -0,0 +1,34 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __FCNTL_H
#define __FCNTL_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <fcntl.h>
#else // ! (__GNUC__ && POSIX)
#define O_RDONLY 0
int open (char const *s, int mode);
#endif // ! (__GNUC__ && POSIX)
#endif // __FCNTL_H

34
libc/include/limits.h Normal file
View file

@ -0,0 +1,34 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __LIMITS_H
#define __LIMITS_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <limits.h>
#else // ! (__GNUC__ && POSIX)
#define INT_MIN -2147483648
#define INT_MAX 2147483647
#endif // ! (__GNUC__ && POSIX)
#endif // __LIMITS_H

26
libc/include/mlibc.h Normal file
View file

@ -0,0 +1,26 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MLIBC_H
#define __MLIBC_H
char const* itoa (int);
#endif //__MLIBC_H

View file

@ -1,6 +1,66 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __STDIO_H #ifndef __STDIO_H
#define __STDIO_H 1 #define __STDIO_H 1
char **g_environment;
int g_stdin;
#define EOF -1
#define STDIN 0
#define STDOUT 1
#define STDERR 2
int printf (char const* format, ...); int printf (char const* format, ...);
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <stdio.h>
int fdputs (char const* s, int fd);
#undef puts
#define puts(x) fdputs(x, STDOUT)
#define eputs(x) fdputs(x, STDERR)
#define fputs fdputs
#ifdef putc
#undef putc
#endif
int getchar ();
int fdputc (int c, int fd);
#define fputc fdputc
#define ungetc fdungetc
int fdungetc (int c, int fd);
#else // !POSIX
#undef fputs
#undef fdputs
int fdputs (char const* s, int fd);
#endif // __GNUC__ && POSIX
#endif // __STDIO_H #endif // __STDIO_H

40
libc/include/stdlib.h Normal file
View file

@ -0,0 +1,40 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __STDLIB_H
#define __STDLIB_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <stdlib.h>
#else // !(__GNUC__ && POSIX)
#ifndef __SIZE_T
#define __SIZE_T
typedef long size_t;
#endif
void *malloc (size_t);
void exit (int);
#endif // !(__GNUC__ && POSIX)
#endif // __STDLIB_H

41
libc/include/string.h Normal file
View file

@ -0,0 +1,41 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __STRING_H
#define __STRING_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <string.h>
#else // ! (__GNUC__ && POSIX)
#ifndef __SIZE_T
#define __SIZE_T
typedef long size_t;
#endif
size_t strlen (char const*);
int strcmp (char const*, char const*);
int strncmp (char const*, char const*, size_t);
#endif // ! (__GNUC__ && POSIX)
#endif // __STRING_H

40
libc/include/unistd.h Normal file
View file

@ -0,0 +1,40 @@
/* -*-comment-start: "//";comment-end:""-*-
* Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of Mes.
*
* Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __UNISTD_H
#define __UNISTD_H 1
#if __GNUC__ && POSIX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include_next <unistd.h>
#else // ! (__GNUC__ && POSIX)
#ifndef __SIZE_T
#define __SIZE_T
typedef long size_t;
#endif
int read (int fd, void* buf, size_t n);
int write (int fd, char const* s, int n);
#endif // ! (__GNUC__ && POSIX)
#endif // __UNISTD_H

View file

@ -21,22 +21,12 @@
char **g_environment = 0; char **g_environment = 0;
int g_stdin = 0; int g_stdin = 0;
#define EOF -1 #include <stdio.h>
#define STDIN 0 #include <mlibc.h>
#define STDOUT 1
#define STDERR 2
#if __GNUC__ && !POSIX #if __GNUC__ && !POSIX
#define O_RDONLY 0 #include <stdlib.h>
#define INT_MIN -2147483648
#define INT_MAX 2147483647
typedef long size_t;
void *malloc (size_t i);
int open (char const *s, int mode);
int read (int fd, void* buf, size_t n);
int write (int fd, char const* s, int n);
void void
exit (int code) exit (int code)
@ -288,7 +278,7 @@ ungetc (int c, int fd)
char const* itoa (int); char const* itoa (int);
int int
strncmp (char const* a, char const* b, int length) strncmp (char const* a, char const* b, size_t length)
{ {
while (*a && *b && *a == *b && --length) {a++;b++;} while (*a && *b && *a == *b && --length) {a++;b++;}
return *a - *b; return *a - *b;
@ -432,22 +422,13 @@ itoa (int x)
} }
#if POSIX #if POSIX
#define _GNU_SOURCE #define _GNU_SOURCE
#include <assert.h> #include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#endif // POSIX
#undef puts
#define puts(x) fdputs(x, STDOUT)
#define eputs(x) fdputs(x, STDERR)
#define fputs fdputs
int int
fdputs (char const* s, int fd) fdputs (char const* s, int fd)
{ {
@ -456,10 +437,8 @@ fdputs (char const* s, int fd)
return 0; return 0;
} }
#ifdef putc #if POSIX
#undef putc
#endif
#define fputc fdputc
int int
fdputc (int c, int fd) fdputc (int c, int fd)
{ {
@ -496,7 +475,6 @@ getchar ()
return i; return i;
} }
#define ungetc fdungetc
int int
fdungetc (int c, int fd) fdungetc (int c, int fd)
{ {
@ -504,15 +482,5 @@ fdungetc (int c, int fd)
ungetc_buf[++ungetc_char] = c; ungetc_buf[++ungetc_char] = c;
return c; return c;
} }
#else
#define fputs fdputs #endif // POSIX
int
fdputs (char const* s, int fd)
{
int i = strlen (s);
write (fd, s, i);
return 0;
}
#endif

View file

@ -52,4 +52,4 @@ _start ()
); );
exit (r); exit (r);
} }
#endif #endif // __GNUC__

5
make/bin-mlibc.make Normal file
View file

@ -0,0 +1,5 @@
C_FLAGS:=-nostdinc --include mstart.c -fno-builtin
LD_FLAGS:=-nostdlib
CROSS:=$(CC32:%gcc=%)
include make/bin.make

View file

@ -11,6 +11,8 @@ endif
CLEAN+=$(O_FILES) $(OUT)/$(TARGET) CLEAN+=$(O_FILES) $(OUT)/$(TARGET)
DIST-CLEAN+=$(D_FILES) DIST-CLEAN+=$(D_FILES)
INCLUDES+=libc/include libc $(OUT)/$(DIR)
$(OUT)/$(TARGET): ld:=$(CROSS)LD $(OUT)/$(TARGET): ld:=$(CROSS)LD
$(OUT)/$(TARGET): LD:=$(CROSS)$(LD) $(OUT)/$(TARGET): LD:=$(CROSS)$(LD)
$(OUT)/$(TARGET): CC:=$(CROSS)$(CC) $(OUT)/$(TARGET): CC:=$(CROSS)$(CC)

View file

@ -1732,8 +1732,24 @@
(let ((types (.types info))) (let ((types (.types info)))
(clone info #:types (cons (cons name (assoc-ref types type)) types)))) (clone info #:types (cons (cons name (assoc-ref types type)) types))))
;; int foo ();
((decl (decl-spec-list (type-spec (fixed-type ,type))) (init-declr-list (init-declr (ftn-declr (ident ,name) (param-list . ,param-list)))))
info)
;; void foo ();
((decl (decl-spec-list (type-spec (void))) (init-declr-list (init-declr (ftn-declr (ident ,name) (param-list . ,param-list)))))
info)
;; void foo (*);
((decl (decl-spec-list (type-spec (void))) (init-declr-list (init-declr (ptr-declr (pointer) (ftn-declr (ident ,name) (param-list . ,param-list))))))
info)
;; char const* itoa ();
((decl (decl-spec-list (type-spec (fixed-type ,type)) (type-qual ,qual)) (init-declr-list (init-declr (ptr-declr (pointer) (ftn-declr (ident ,name) (param-list . ,param-list))))))
info)
;; printf (char const* format, ...) ;; printf (char const* format, ...)
((decl (decl-spec-list (type-spec (fixed-type ,type))) (init-declr-list (init-declr (ftn-declr (ident ,name) (param-list ,param-list (ellipsis)))))) ((decl (decl-spec-list (type-spec (fixed-type ,type))) (init-declr-list (init-declr (ftn-declr (ident ,name) (param-list ,param-list . (ellipsis))))))
info) info)
;; int i = 0, j = 0; ;; int i = 0, j = 0;

View file

@ -22,15 +22,11 @@
#error "POSIX not supported" #error "POSIX not supported"
#endif #endif
#if __MESC__ #include <stdio.h>
char **g_environment; #include <assert.h>
int g_stdin = 0; #include <stdlib.h>
#define assert(x) ((x) ? (void)0 : assert_fail (#x)) #include <string.h>
#endif #include <mlibc.h>
#if !__MESC__
#include "mlibc.c"
#endif
char arena[2000]; char arena[2000];
@ -878,7 +874,3 @@ main (int argc, char *argv[])
return 0; return 0;
} }
#if !__MESC__
#include "mstart.c"
#endif

View file

@ -18,15 +18,7 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if __MESC__ #include <mlibc.h>
char **g_environment;
int g_stdin = 0;
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
#endif
#if !__MESC__
#include "mlibc.c"
#endif
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
@ -40,7 +32,3 @@ main (int argc, char *argv[])
if (argc > 1 && !strcmp (argv[1], "--help")) {puts ("argc > 1 && --help\n"); return argc;} if (argc > 1 && !strcmp (argv[1], "--help")) {puts ("argc > 1 && --help\n"); return argc;}
return 42; return 42;
} }
#if !__MESC__ && !POSIX
#include "mstart.c"
#endif

View file

@ -18,15 +18,7 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if __MESC__ #include <mlibc.h>
char **g_environment;
int g_stdin = 0;
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
#endif
#if !__MESC__
#include "mlibc.c"
#endif
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
@ -40,7 +32,3 @@ main (int argc, char *argv[])
} }
return c; return c;
} }
#if !__MESC__ && !POSIX
#include "mstart.c"
#endif

View file

@ -22,14 +22,7 @@
#error "POSIX not supported" #error "POSIX not supported"
#endif #endif
#if __MESC__ #include <mlibc.h>
int g_stdin = 0;
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
#endif
#if !__MESC__
#include "mlibc.c"
#endif
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
@ -59,7 +52,3 @@ main (int argc, char *argv[])
} }
return 0; return 0;
} }
#if __GNUC__
#include "mstart.c"
#endif

View file

@ -22,15 +22,7 @@
#error "POSIX not supported" #error "POSIX not supported"
#endif #endif
#if __MESC__ #include <mlibc.h>
char **g_environment;
int g_stdin = 0;
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
#endif
#if !__MESC__
#include "mlibc.c"
#endif
typedef int SCM; typedef int SCM;
@ -79,7 +71,3 @@ main (int argc, char *argv[])
int i = argc; int i = argc;
return i; return i;
} }
#if !__MESC__
#include "mstart.c"
#endif

View file

@ -22,15 +22,11 @@
#error "POSIX not supported" #error "POSIX not supported"
#endif #endif
#if __MESC__ #include <stdio.h>
char **g_environment; #include <assert.h>
int g_stdin = 0; #include <stdlib.h>
#define assert(x) ((x) ? (void)0 : assert_fail (#x)) #include <string.h>
#endif #include <mlibc.h>
#if !__MESC__
#include "mlibc.c"
#endif
int ARENA_SIZE = 100000; int ARENA_SIZE = 100000;
int MAX_ARENA_SIZE = 40000000; int MAX_ARENA_SIZE = 40000000;
@ -1201,23 +1197,18 @@ bload_env (SCM a) ///((internal))
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
eputs ("Hello mini-mes!\n"); char *p;
#if _POSIX_SOURCE if (p = getenv ("MES_DEBUG")) g_debug = atoi (p);
g_debug = getenv ("MES_DEBUG"); if (g_debug) {eputs (";;; MODULEDIR=");eputs (MODULEDIR);eputs ("\n");}
if (g_debug) {eputs ("MODULEDIR=");eputs (MODULEDIR);eputs ("\n");} if (p = getenv ("MES_MAX_ARENA")) MAX_ARENA_SIZE = atoi (p);
if (getenv ("MES_ARENA")) ARENA_SIZE = atoi (getenv ("MES_ARENA")); if (p = getenv ("MES_ARENA")) ARENA_SIZE = atoi (p);
#endif if (argc > 1 && !strcmp (argv[1], "--help")) return puts ("Usage: mes [--dump|--load] < FILE\n");
g_debug = 1; if (argc > 1 && !strcmp (argv[1], "--version")) {puts ("Mes ");puts (VERSION);puts ("\n");return 0;};
if (argc > 1 && !strcmp (argv[1], "--help")) return puts ("Usage: mes [--dump|--load] < FILE");
if (argc > 1 && !strcmp (argv[1], "--version")) {puts ("Mes ");puts (VERSION);return 0;};
g_stdin = STDIN;
r0 = mes_environment (); r0 = mes_environment ();
SCM program = bload_env (r0); SCM program = bload_env (r0);
SCM lst = cell_nil; SCM lst = cell_nil;
#if !__MESC__
for (int i=argc-1; i>=0; i--) lst = cons (MAKE_STRING (cstring_to_list (argv[i])), lst); for (int i=argc-1; i>=0; i--) lst = cons (MAKE_STRING (cstring_to_list (argv[i])), lst);
#endif
r0 = acons (cell_symbol_argv, lst, r0); r0 = acons (cell_symbol_argv, lst, r0);
push_cc (r2, cell_unspecified, r0, cell_unspecified); push_cc (r2, cell_unspecified, r0, cell_unspecified);
if (g_debug) if (g_debug)
@ -1239,7 +1230,3 @@ main (int argc, char *argv[])
} }
return 0; return 0;
} }
#if !__MESC__
#include "mstart.c"
#endif

View file

@ -29,11 +29,7 @@ include make/check.make
TARGET:=m.mlibc TARGET:=m.mlibc
C_FILES:=$(DIR)/m.c C_FILES:=$(DIR)/m.c
INCLUDES:=libc include make/bin-mlibc.make
C_FLAGS:=-nostdinc
LD_FLAGS:=-nostdlib
CROSS:=$(CC32:%gcc=%)
include make/bin.make
TARGET:=m.mlibc TARGET:=m.mlibc
EXPECT:=255 EXPECT:=255
@ -41,11 +37,7 @@ include make/check.make
TARGET:=hello.mlibc TARGET:=hello.mlibc
C_FILES:=$(DIR)/hello.c C_FILES:=$(DIR)/hello.c
INCLUDES:=libc include make/bin-mlibc.make
C_FLAGS:=-nostdinc -g
LD_FLAGS:=-nostdlib -g
CROSS:=$(CC32:%gcc=%)
include make/bin.make
TARGET:=hello.mlibc TARGET:=hello.mlibc
EXPECT:=42 EXPECT:=42
@ -53,11 +45,7 @@ include make/check.make
TARGET:=micro-mes.mlibc TARGET:=micro-mes.mlibc
C_FILES:=$(DIR)/micro-mes.c C_FILES:=$(DIR)/micro-mes.c
INCLUDES:=libc include make/bin-mlibc.make
C_FLAGS:=-nostdinc
LD_FLAGS:=-nostdlib
CROSS:=$(CC32:%gcc=%)
include make/bin.make
TEST:=micro-mes.mlibc-check TEST:=micro-mes.mlibc-check
$(TEST): $(OUT)/micro-mes.mlibc $(TEST): $(OUT)/micro-mes.mlibc
@ -66,48 +54,35 @@ include make/check.make
TARGET:=tiny-mes.mlibc TARGET:=tiny-mes.mlibc
C_FILES:=$(DIR)/tiny-mes.c C_FILES:=$(DIR)/tiny-mes.c
INCLUDES:=libc include make/bin-mlibc.make
C_FLAGS:=-nostdinc
LD_FLAGS:=-nostdlib
CROSS:=$(CC32:%gcc=%)
include make/bin.make
TARGET:=tiny-mes.mlibc TARGET:=tiny-mes.mlibc
include make/check.make include make/check.make
TARGET:=cons-mes.mlibc TARGET:=cons-mes.mlibc
C_FILES:=$(DIR)/cons-mes.c C_FILES:=$(DIR)/cons-mes.c
INCLUDES:=libc
C_FLAGS:=-nostdinc
LD_FLAGS:=-nostdlib
DEFINES:=VERSION='"$(VERSION)"' DEFINES:=VERSION='"$(VERSION)"'
CROSS:=$(CC32:%gcc=%) include make/bin-mlibc.make
include make/bin.make
TARGET:=cons-mes.mlibc TARGET:=cons-mes.mlibc
include make/check.make include make/check.make
TARGET:=t.mlibc TARGET:=t.mlibc
C_FILES:=$(DIR)/t.c C_FILES:=$(DIR)/t.c
INCLUDES:=libc include make/bin-mlibc.make
C_FLAGS:=-nostdinc
LD_FLAGS:=-nostdlib
CROSS:=$(CC32:%gcc=%)
include make/bin.make
TARGET:=t.mlibc TARGET:=t.mlibc
include make/check.make include make/check.make
CROSS:=$(CC32:%gcc=%)
#$(OUT)/$(DIR)/mini-mes.$(CROSS)o: $(SNARF.MES)
$(OUT)/mini-mes: $(SNARF.MES) $(OUT)/mini-mes: $(SNARF.MES)
TARGET:=mini-mes.mlibc TARGET:=mini-mes.mlibc
C_FILES:=$(DIR)/mini-mes.c C_FILES:=$(DIR)/mini-mes.c
DEFINES:=FIXED_PRIMITIVES=1 VERSION='"$(VERSION)"' PREFIX='"$(PREFIX)"' DEFINES:=FIXED_PRIMITIVES=1 VERSION='"$(VERSION)"' MODULEDIR='"$(MODULEDIR)"' PREFIX='"$(PREFIX)"'
INCLUDES:=libc src $(OUT)/src INCLUDES:=src $(OUT)/src
C_FLAGS:=-nostdinc include make/bin-mlibc.make
LD_FLAGS:=-nostdlib
CROSS:=$(CC32:%gcc=%)
include make/bin.make
TEST:=mini-mes.mlibc-check TEST:=mini-mes.mlibc-check
$(TEST): $(OUT)/mini-mes.mlibc $(TEST): $(OUT)/mini-mes.mlibc
@ -174,7 +149,7 @@ $(TEST): $(OUT)/mini-mes.guile
include make/check.make include make/check.make
# scripts/mescc.mes # scripts/mescc.mes
ifeq ($(MES_SKIP_MES),)
TARGET:=m.mes TARGET:=m.mes
C_FILES:=$(DIR)/m.c C_FILES:=$(DIR)/m.c
include make/mescc-mes.make include make/mescc-mes.make
@ -223,6 +198,7 @@ include make/mescc-mes.make
TARGET:=t.mes TARGET:=t.mes
include make/check.make include make/check.make
endif
ifneq ($(BOOTSTRAP),) ifneq ($(BOOTSTRAP),)
$(OUT)/mini-mes.mes: module/mes/read-0-32.mo $(OUT)/mini-mes.mes: module/mes/read-0-32.mo

View file

@ -18,14 +18,9 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if __MESC__ #include <mlibc.h>
int g_stdin = 0; #include <assert.h>
#define assert(x) ((x) ? (void)0 : assert_fail (#x)) #include <stdlib.h>
#endif
#if !__MESC__
#include "mlibc.c"
#endif
struct scm { struct scm {
int type; int type;
@ -924,7 +919,3 @@ main (int argc, char *argv[])
return 22; return 22;
} }
#if !POSIX && !__MESC__
#include "mstart.c"
#endif

View file

@ -22,15 +22,7 @@
#error "POSIX not supported" #error "POSIX not supported"
#endif #endif
#if __MESC__ #include <mlibc.h>
char **g_environment;
int g_stdin = 0;
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
#endif
#if !__MESC__
#include "mlibc.c"
#endif
char arena[300]; char arena[300];
@ -346,7 +338,3 @@ main (int argc, char *argv[])
return 0; return 0;
} }
#if !__MESC__
#include "mstart.c"
#endif

View file

@ -18,6 +18,8 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <errno.h>
SCM SCM
gc_up_arena () ///((internal)) gc_up_arena () ///((internal))
{ {

View file

@ -18,6 +18,10 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if !__MESC__
#define fputs fdputs
#endif
int g_depth; int g_depth;
SCM fdisplay_ (SCM, int); SCM fdisplay_ (SCM, int);

View file

@ -18,6 +18,8 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <limits.h>
SCM SCM
greater_p (SCM x) ///((name . ">") (arity . n)) greater_p (SCM x) ///((name . ">") (arity . n))
{ {

View file

@ -18,15 +18,11 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if __MESC__ #include <stdio.h>
char **g_environment; #include <assert.h>
int g_stdin = 0; #include <stdlib.h>
#define assert(x) ((x) ? (void)0 : assert_fail (#x)) #include <string.h>
#endif #include <mlibc.h>
#if !__MESC__
#include "mlibc.c"
#endif
int ARENA_SIZE = 100000; int ARENA_SIZE = 100000;
int MAX_ARENA_SIZE = 20000000; int MAX_ARENA_SIZE = 20000000;
@ -1376,7 +1372,3 @@ main (int argc, char *argv[])
} }
return 0; return 0;
} }
#if !_POSIX_SOURCE && !__MESC__
#include "mstart.c"
#endif

View file

@ -18,6 +18,8 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <fcntl.h>
int int
ungetchar (int c) ungetchar (int c)
{ {

View file

@ -18,11 +18,7 @@
* along with Mes. If not, see <http://www.gnu.org/licenses/>. * along with Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
// #if _POSIX_SOURCE #include <ctype.h>
// #undef fputs
// #undef fdputs
// #undef fdputc
// #endif
SCM SCM
___end_of_mes___ () ___end_of_mes___ ()

View file

@ -40,25 +40,16 @@ snarf-mes: $(SNARF.MES)
include make/reset.make include make/reset.make
# a full 32 bit cross compiler with glibc
# CROSS:=$(CC32:%gcc=%)
# TARGET:=$(CROSS)mes # TARGET:=$(CROSS)mes
# $(OUT)/$(DIR)/mes.$(CROSS)o: $(SNARF.MES)
# C_FILES:=$(DIR)/mes.c
# DEFINES:=FIXED_PRIMITIVES=1 MES_FULL=1 POSIX=1 VERSION='"$(VERSION)"' MODULEDIR='"$(MODULEDIR)"' PREFIX='"$(PREFIX)"'
# INCLUDES:=libc $(OUT)/src
# include make/bin.make
# a simple non-glibc cross compiler, using mlibc.
CROSS:=$(CC32:%gcc=%) CROSS:=$(CC32:%gcc=%)
TARGET:=$(CROSS)mes $(OUT)/$(CROSS)%: $(OUT)/%.mlibc
@ln -sf $(<F) $@
TARGET:=mes.mlibc
$(OUT)/$(DIR)/mes.$(CROSS)o: $(SNARF.MES) $(OUT)/$(DIR)/mes.$(CROSS)o: $(SNARF.MES)
C_FILES:=$(DIR)/mes.c C_FILES:=$(DIR)/mes.c
DEFINES:=FIXED_PRIMITIVES=1 MES_FULL=1 VERSION='"$(VERSION)"' MODULEDIR='"$(MODULEDIR)"' PREFIX='"$(PREFIX)"' DEFINES:=FIXED_PRIMITIVES=1 MES_FULL=1 VERSION='"$(VERSION)"' MODULEDIR='"$(MODULEDIR)"' PREFIX='"$(PREFIX)"'
INCLUDES:=libc $(OUT)/src include make/bin-mlibc.make
C_FLAGS:=-nostdinc
LD_FLAGS:=-nostdlib
include make/bin.make
TARGET:=mes.guile TARGET:=mes.guile
$(OUT)/mes.mes: module/mes/read-0-32.mo $(OUT)/mes.mes: module/mes/read-0-32.mo