#include #include #include #include "io.h" #include "options.h" #include "types.h" /* Create a new options struct. */ struct options options(int argc, char *argv[]) { return (struct options){ .inputs = { 0 }, .ninputs = 0, .modules = { 0 }, .nmodules = 0, .argv = argv, .argc = argc, .output = NULL, }; } /* Parse the command line options. */ int options_parse(struct options *o) { for (int i = 1; i < o->argc; i++) { if (o->argv[i][0] != '-') { o->inputs[o->ninputs++] = o->argv[i]; continue; } char *arg = &o->argv[i][1]; if (!strcmp(arg, "o")) { if (++i >= o->argc) bail("`-o` requires an output path"); o->output = o->argv[i]; } else if (!strcmp(arg, "mod")) { if (++i >= o->argc) bail("`-mod` requires a module path"); o->modules[o->nmodules++] = o->argv[i]; } else if (!strcmp(arg, "pkg") || !strcmp(arg, "entry")) { /* Ignored; consumed by the self-hosted compiler only. */ i++; } else if (!strcmp(arg, "test") || !strcmp(arg, "dump")) { /* Ignored; consumed by the self-hosted compiler only. */ } else { bail("unknown option `-%s`", arg); } } return 0; }