diff options
author | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-07-18 21:11:54 +0300 |
---|---|---|
committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-07-18 21:11:54 +0300 |
commit | 1564f79cfc7d790e15298d28f52b4c5c216ce9e5 (patch) | |
tree | aecfbd80e8b68a36fdd441625a190cd0acf2fe0a | |
parent | 296d6abd85a16c9c9d112fe6282f8ac81ce088d3 (diff) | |
download | ngc-1564f79cfc7d790e15298d28f52b4c5c216ce9e5.tar.gz ngc-1564f79cfc7d790e15298d28f52b4c5c216ce9e5.zip |
add ngc driver
-rwxr-xr-x | ngc | 62 |
1 files changed, 62 insertions, 0 deletions
@@ -0,0 +1,62 @@ +#!/bin/sh +if [ -n "${NGC_DEBUG+x}" ]; then + set -x +fi + +if [ -z "${NGC_CC+x}"]; then + NGC_CC=cc +fi + +ARGS= +SOURCES= +OUTPUT= +# we don't want our temporary files to end up in makefile rules so pick all +# depflags out as well +DEPFLAGS= + +# pick out some important options +while true; do + case "$1" in + "") break;; + -M) DEPFLAGS="$DEPFLAGS $1" ; shift ;; + -MM) DEPFLAGS="$DEPFLAGS $1" ; shift ;; + -MF) DEPFLAGS="$DEPFLAGS $1 $2"; shift 2;; + -MG) DEPFLAGS="$DEPFLAGS $1" ; shift ;; + -MP) DEPFLAGS="$DEPFLAGS $1" ; shift ;; + -MT) DEPFLAGS="$DEPFLAGS $1 $2"; shift 2;; + -MQ) DEPFLAGS="$DEPFLAGS $1 $2"; shift 2;; + -MD) DEPFLAGS="$DEPFLAGS $1" ; shift ;; + -MMD) DEPFLAGS="$DEPFLAGS $1" ; shift ;; + *.c) SOURCES="$SOURCES $1"; shift;; + -o) OUTPUT="$2"; shift 2;; + *) ARGS="$ARGS $1"; shift;; + esac +done + +if [ -z "${SOURCES}" ]; then + # there must be an output, although I guess an assertion would be nice? + $NGC_CC $DEPFLAGS $ARGS -o "$OUTPUT" + exit 0 +fi + +TMPFILE1=$(mktemp --suffix=.i) +TMPFILE2=$(mktemp --suffix=.c) + +cleanup() { + if [ -z "${NGC_LEAVE_DIRTY+x}" ]; then + rm "$TMPFILE1" "$TMPFILE2" + fi + + exit $1 +} + +$NGC_CC -E $DEPFLAGS $ARGS $SOURCES -o "$TMPFILE1" || cleanup 1 +ngc1 "$TMPFILE1" > "$TMPFILE2" || cleanup 2 + +if [ -z "$OUTPUT" ]; then + $NGC_CC $ARGS "$TMPFILE2" || cleanup 3 +else + $NGC_CC $ARGS "$TMPFILE2" -o "$OUTPUT" || cleanup 4 +fi + +cleanup 0 |