23f4f03203b075b5e6b480a1138df9693244ab55
[mes.git] / scripts / mescc.mes
1 #! /bin/sh
2 # -*-scheme-*-
3 MES=${MES-$(dirname $0)/mes}
4 moduledir=module/
5 echo '()' | cat $moduledir/mes/base-0.mes $0 /dev/stdin | $MES $MES_FLAGS -- "$@"
6 #paredit:||
7 r=$?
8 ([ -f a.out ] && chmod +x a.out)
9 exit $r
10 !#
11
12 ;;; Mes --- Maxwell Equations of Software
13 ;;; Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
14 ;;;
15 ;;; This file is part of Mes.
16 ;;;
17 ;;; Mes is free software; you can redistribute it and/or modify it
18 ;;; under the terms of the GNU General Public License as published by
19 ;;; the Free Software Foundation; either version 3 of the License, or (at
20 ;;; your option) any later version.
21 ;;;
22 ;;; Mes is distributed in the hope that it will be useful, but
23 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
24 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25 ;;; GNU General Public License for more details.
26 ;;;
27 ;;; You should have received a copy of the GNU General Public License
28 ;;; along with Mes.  If not, see <http://www.gnu.org/licenses/>.
29
30 ;;; Commentary:
31
32 ;;; mescc.mes is a proof-of-concept simplistic C compiler and linker
33
34 ;;; Code:
35
36 ;;LALR
37 ;;(mes-use-module (language c compiler))
38 ;;Nyacc
39
40 (let* ((files (cddr (command-line)))
41        (file (if (pair? files) (car files))))
42     (cond ((equal? file "--help")
43            (format (current-error-port) "Usage: mescc.mes [--help|--version|FILE] > a.out\n")
44            (exit 0))
45           ((equal? file "--version")
46            (format (current-error-port) "mescc.mes (mes) ~a\n" %version)
47            (exit 0))))
48
49 (mes-use-module (mes guile))
50 (mes-use-module (language c99 compiler))
51
52 (format (current-error-port) "mescc.mes...\n")
53
54 (define %datadir (if (string-prefix? "@DATADIR" "@DATADIR@") "" "@DATADIR@"))
55 (define %docdir (if (string-prefix? "@DOCDIR" "@DOCDIR@") "doc/" "@DOCDIR@"))
56 (define %moduledir "module/")
57 (define %prefix (if (string-prefix? "@PREFIX" "@PREFIX@") "" "@PREFIX@"))
58 (define %version (if (string-prefix? "@VERSION" "@VERSION@") "git" "@VERSION@"))
59
60 (define (main arguments)
61   (let* ((mfiles (cddr arguments))
62          (mfiles (if (or (null? mfiles) (not (equal? (car mfiles) "--"))) mfiles
63                      (cdr mfiles)))
64          (mfile (if (null? mfiles) (string-append %docdir "examples/main.c")
65                     (car mfiles))))
66     (format (current-error-port) "input: ~a\n" mfile)
67     (with-input-from-file mfile
68       c99-input->elf)))
69
70 (format (current-error-port) "compiler loaded\n")
71 (format (current-error-port) "calling ~s\n" (cons 'main (command-line)))
72 (main (command-line))
73 ()