From 4c138cb1fd66b04e3f2cba27a3d84e335d0daace Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 16 Nov 2025 10:31:38 +0100 Subject: driver: allow passing thru objs when building executable --- main.c | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/main.c b/main.c index a336591..6fbabdc 100644 --- a/main.c +++ b/main.c @@ -233,15 +233,16 @@ static int cc1(const char *out, const char *in); static const char *tempobj[arraylength(task.inf)]; static void mktemps(void) { - for (int i = 0; i < task.ninf; ++i) - tempobj[i] = tempfile(task.inf[i], "o"); + for (int i = 0; i < task.ninf; ++i) { + if (task.inft[i] == IFTc) + tempobj[i] = tempfile(task.inf[i], "o"); + } } static void cleantemps(void) { for (int i = 0; i < task.ninf; ++i) { - if (!tempobj[i]) break; - unlink(tempobj[i]); + if (tempobj[i]) unlink(tempobj[i]); } } @@ -253,18 +254,21 @@ compileobjs(void) if (!ccopt.dbg.any) mktemps(); for (int i = 0; i < task.ninf; ++i) { - if ((p = fork()) < 0) { - error(NULL, "fork(): %s\n", strerror(errno)); - exit(1); - } else if (p == 0) { - exit(cc1(tempobj[i], task.inf[i])); - } - waitpid(p, &wstat, 0); - if (!WIFEXITED(wstat)) exit(127); - if (WEXITSTATUS(wstat) != 0) { - cleantemps(); - exit(WEXITSTATUS(wstat)); - } + if (task.inft[i] == IFTc) { + if ((p = fork()) < 0) { + error(NULL, "fork(): %s\n", strerror(errno)); + exit(1); + } else if (p == 0) { + exit(cc1(tempobj[i], task.inf[i])); + } + waitpid(p, &wstat, 0); + if (!WIFEXITED(wstat)) exit(127); + if (WEXITSTATUS(wstat) != 0) { + cleantemps(); + exit(WEXITSTATUS(wstat)); + } + } else if (task.inft[i] == IFTobj) { + } else assert(!"not obj"); } if (!ccopt.dbg.any) atexit(cleantemps); } @@ -291,7 +295,13 @@ dolink(void) vpush(&cmd, task.out); assert(task.ninf > 0); for (int i = 0; i < task.ninf; ++i) { - vpush(&cmd, tempobj[i]); + const char *o; + switch (task.inft[i]) { + case IFTc: o = tempobj[i]; break; + case IFTobj: o = task.inf[i]; break; + default: assert(!"link obj?"); + } + vpush(&cmd, o); } if (task.verbose) { efmt("> "); -- cgit v1.2.3