/* ARM/StrongARM machines running RISC OS (Q System) with LCC CPP and UnixLibQ */

#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include "lcc.h"

char *suffixes[] = {".c", ".i", ".s", ".q", 0};
char inputs[256] = "";
char *cpp[] = {
  	"lcc-cpp",
	"-N",
	"-D__CHAR_UNSIGNED__",
/*	"-lang-c", "-undef", "-trigraphs",*/
	"-D__STDC__=1", "-Darm", "-Driscos", "-D__arm__", "-D__riscos__", "-D__arm",
	"-D__riscos", "-D__LCC__=4",
	"-D__JMP_BUF_SIZE=24",
/*	"-Asystem(riscos)", "-Acpu(arm)", "-Amachine(arm)", */
	"-DSTDC_HEADERS", "-D__LCC_LT=1",
	"-ILCC:",
	"-IUnixQ:",
	"$1", "$2", "$3", 0 };
char *include[] = { 0 };
char *com[] = { "rcc", "-target=arm/riscos",
	"$1", "$2", "$3", 0 };
char *as[] = { "qas", "-o", "$3", "$1", "$2", 0 };
char *ld[] = { "qld", "-o", "$3", "$1",
	"-LLCC:", "-LQ:", "-LUnixQ:", "-llcc", "-lq", "-lUnixLib",
	"$2", "-codenames", 0 };

#define WO(s)	\
  else if(strcmp(arg, s) == 0) {	\
    clist = append(arg, clist);		\
    return 1;				\
  }

int option(char *arg)
{
  if(strcmp(arg, "-g") == 0)
    return 0;
  else if(strcmp(arg, "-b") == 0)
    return 1;
  else if(strcmp(arg, "-a") == 0)
    return 1;
  else if(strcmp(arg, "-G") == 0)
    return 0;
  else if(strcmp(arg, "-p") == 0)
    return 0;
  else if(strcmp(arg, "-pg") == 0)
    return 0;
  else if(strcmp(arg, "-Wochar-signed") == 0) {
    cpp[2] = "-D__CHAR_SIGNED__";
    clist = append(arg, clist);
    return 1;
  } else if(strcmp(arg, "-Wochar-unsigned") == 0) {
    cpp[2] = "-D__CHAR_UNSIGNED__";
    clist = append(arg, clist);
    return 1;
  }

  WO("-Woversion")
  WO("-Wofast-locals")
  WO("-Wono-fast-locals")
  WO("-Wocheck-stack")
  WO("-Wono-check-stack")
  WO("-Wouse-fpincall")
  WO("-Wono-use-fpincall")
  WO("-Wosave-fps")
  WO("-Wono-save-fps")
  else if (strncmp(arg, "-ld=", 4) == 0) {
    ld[0] = &arg[4];
    return 1;
  } else if (strncmp(arg, "-as=", 4) == 0) {
    as[0] = &arg[4];
    return 1;
  } else
    return 0;
}

#undef WO

void lcc_riscos_setup(void)
{
  /* we need to make /tmp/q, /tmp/s, /tmp/i */
  system("cdir <Wimp$ScrapDir>.lcc");
  system("cdir <Wimp$ScrapDir>.lcc.i");
  system("cdir <Wimp$ScrapDir>.lcc.q");
  system("cdir <Wimp$ScrapDir>.lcc.s");
}
