#! /bin/sh # -*-scheme-*- MES=${MES-$(dirname $0)/mes} moduledir=module/ echo '()' | cat $moduledir/mes/base-0.mes $0 /dev/stdin | $MES $MES_FLAGS -- "$@" #paredit:|| r=$? ([ -f a.out ] && chmod +x a.out) exit $r !# ;;; Mes --- Maxwell Equations of Software ;;; Copyright © 2016,2017 Jan Nieuwenhuizen ;;; ;;; 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 . ;;; Commentary: ;;; mescc.mes is a proof-of-concept simplistic C compiler and linker ;;; Code: ;;LALR ;;(mes-use-module (language c compiler)) ;;Nyacc (let* ((files (cddr (command-line))) (file (if (pair? files) (car files)))) (cond ((equal? file "--help") (format (current-error-port) "Usage: mescc.mes [--help|--version|FILE] > a.out\n") (exit 0)) ((equal? file "--version") (format (current-error-port) "mescc.mes (mes) ~a\n" %version) (exit 0)))) (mes-use-module (mes guile)) (mes-use-module (language c99 compiler)) (format (current-error-port) "mescc.mes...\n") (define %datadir (if (string-prefix? "@DATADIR" "@DATADIR@") "" "@DATADIR@")) (define %docdir (if (string-prefix? "@DOCDIR" "@DOCDIR@") "doc/" "@DOCDIR@")) (define %moduledir "module/") (define %prefix (if (string-prefix? "@PREFIX" "@PREFIX@") "" "@PREFIX@")) (define %version (if (string-prefix? "@VERSION" "@VERSION@") "git" "@VERSION@")) (define (main arguments) (let* ((mfiles (cddr arguments)) (mfiles (if (or (null? mfiles) (not (equal? (car mfiles) "--"))) mfiles (cdr mfiles))) (mfile (if (null? mfiles) (string-append %docdir "examples/main.c") (car mfiles)))) (format (current-error-port) "input: ~a\n" mfile) (with-input-from-file mfile c99-input->elf))) (format (current-error-port) "compiler loaded\n") (format (current-error-port) "calling ~s\n" (cons 'main (command-line))) (main (command-line)) ()