From 080f3a4c2d73367a857980ddaeb181ef07e00acf Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Thu, 7 Mar 2024 00:30:52 -0500 Subject: [PATCH] Add '-c' compiler flag --- tomo.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tomo.c b/tomo.c index 96c7d43..c2332e6 100644 --- a/tomo.c +++ b/tomo.c @@ -11,7 +11,7 @@ #include "typecheck.h" #include "types.h" -typedef enum { MODE_RUN, MODE_TRANSPILE, MODE_EXPANDED_TRANSPILE } mode_e; +typedef enum { MODE_RUN, MODE_COMPILE, MODE_TRANSPILE, MODE_EXPANDED_TRANSPILE } mode_e; int main(int argc, char *argv[]) { @@ -20,6 +20,8 @@ int main(int argc, char *argv[]) for (int i = 1; i < argc; i++) { if (streq(argv[i], "-t")) { mode = MODE_TRANSPILE; + } else if (streq(argv[i], "-c")) { + mode = MODE_COMPILE; } else if (streq(argv[i], "-E")) { mode = MODE_EXPANDED_TRANSPILE; } else { @@ -91,6 +93,22 @@ int main(int argc, char *argv[]) if (!cc) cc = "tcc"; switch (mode) { + case MODE_COMPILE: { + const char *run = heap_strf("%s -x c %s -c - -o %s.o", cc, cflags, f->filename); + FILE *runner = popen(run, "w"); + + CORD program = CORD_all( + "// File: ", f->filename, ".h\n", + module.header, + "\n", + "// File: ", f->filename, ".c\n", + module.c_file + ); + + CORD_put(program, runner); + int status = pclose(runner); + return WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE; + } case MODE_RUN: { const char *run = streq(cc, "tcc") ? heap_strf("tcc -run %s %s %s -", cflags, ldflags, ldlibs) : heap_strf("gcc -x c %s %s %s - -o program && ./program", cflags, ldflags, ldlibs);