diff options
author | Michael Forney <mforney@mforney.org> | 2020-01-30 23:37:56 -0800 |
---|---|---|
committer | Michael Forney <mforney@mforney.org> | 2020-01-30 23:37:56 -0800 |
commit | 003a6cc717b12756c7f2d4ff2c757ccb8297c15c (patch) | |
tree | 5ba086696a0924b41e1a16bc0d342d58a37e6000 | |
parent | 5b575aa2e3e42085d9087210b41560cf5849c746 (diff) | |
download | cproc-003a6cc717b12756c7f2d4ff2c757ccb8297c15c.tar.xz |
driver: Allow preprocessing C headers
-rw-r--r-- | driver.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -22,6 +22,7 @@ enum filetype { ASM, /* assembly source */ ASMPP, /* assembly source requiring preprocessing */ C, /* C source */ + CHDR, /* C header */ CPPOUT, /* preprocessed C source */ OBJ, /* object file */ QBE, /* QBE IL */ @@ -89,6 +90,8 @@ detectfiletype(const char *name) ++dot; if (strcmp(dot, "c") == 0) return C; + if (strcmp(dot, "h") == 0) + return CHDR; if (strcmp(dot, "i") == 0) return CPPOUT; if (strcmp(dot, "qbe") == 0) @@ -409,6 +412,7 @@ main(int argc, char *argv[]) case ASM: input->stages = 1<<ASSEMBLE|1<<LINK; break; case ASMPP: input->stages = 1<<PREPROCESS| 1<<ASSEMBLE|1<<LINK; break; case C: input->stages = 1<<PREPROCESS|1<<COMPILE|1<<CODEGEN|1<<ASSEMBLE|1<<LINK; break; + case CHDR: input->stages = 1<<PREPROCESS ; break; case CPPOUT: input->stages = 1<<COMPILE|1<<CODEGEN|1<<ASSEMBLE|1<<LINK; break; case QBE: input->stages = 1<<CODEGEN|1<<ASSEMBLE|1<<LINK; break; case OBJ: input->stages = 1<<LINK; break; @@ -529,6 +533,8 @@ main(int argc, char *argv[]) filetype = NONE; else if (strcmp(arg, "c") == 0) filetype = C; + else if (strcmp(arg, "c-header") == 0) + filetype = CHDR; else if (strcmp(arg, "cpp-output") == 0) filetype = CPPOUT; else if (strcmp(arg, "qbe") == 0) @@ -559,6 +565,9 @@ main(int argc, char *argv[]) } } arrayforeach (&inputs, input) { + /* ignore the input if it doesn't participate in the last stage */ + if (!(input->stages & 1 << last)) + continue; /* only run up through the last stage */ input->stages &= (1 << last + 1) - 1; buildobj(input, output); |