Feature: Add capability to build multiple files.
This commit is contained in:
@@ -12,31 +12,56 @@
|
||||
|
||||
// TODO: This file is UNSAFE. This file is purely here for MVP purposes, and to self-host this program itself.
|
||||
|
||||
Command command_create(Arena* a, Discovery* d, Configuration* c)
|
||||
Command command_create_f_to_o(CommandOptions* co)
|
||||
{
|
||||
assert(d != NULL);
|
||||
assert(a != NULL);
|
||||
assert(c != NULL);
|
||||
assert(co != NULL);
|
||||
|
||||
size_t len_args = 6;
|
||||
|
||||
size_t flag_count = 0;
|
||||
|
||||
StringView* dep_flags_buf = NULL;
|
||||
|
||||
Command cmd;
|
||||
cmd.a = a;
|
||||
cmd.app = d->cc;
|
||||
|
||||
size_t args_len = d->c_count + 2;
|
||||
const char** args_buf = (const char**)arena_alloc(a, sizeof(const char*) * (args_len));
|
||||
args_buf[0] = d->cc.buf;
|
||||
|
||||
for(size_t i = 0; i < d->c_count; i++)
|
||||
switch(co->bp)
|
||||
{
|
||||
args_buf[i+1] = d->c_files[i]->path.buf;
|
||||
LOG_DEBUG("File to build: %s", d->c_files[i]->path);
|
||||
case B_DEBUG:
|
||||
len_args += co->c->debug_compiler_flags_c;
|
||||
flag_count = co->c->debug_compiler_flags_c;
|
||||
dep_flags_buf = co->c->debug_compiler_flags;
|
||||
break;
|
||||
case B_PROD:
|
||||
len_args += co->c->prod_compiler_flags_c;
|
||||
flag_count = co->c->prod_compiler_flags_c;
|
||||
dep_flags_buf = co->c->prod_compiler_flags;
|
||||
break;
|
||||
default:
|
||||
DIE("No configuration was selected!");
|
||||
}
|
||||
|
||||
const char** args_buf = (const char**)arena_alloc(co->a, sizeof(const char*) * len_args);
|
||||
args_buf[0] = co->app.buf;
|
||||
args_buf[1] = "-c";
|
||||
args_buf[2] = co->files[0].buf;
|
||||
args_buf[3] = "-o";
|
||||
|
||||
StringView o_ext = STR_LIT(co->sp, ".o");
|
||||
StringView f_o = string_concat_ss(co->sp, &co->files[0], &o_ext);
|
||||
args_buf[4] = f_o.buf;
|
||||
args_buf[5] = "-MMD";
|
||||
|
||||
for (size_t i = 0; i < flag_count; i++)
|
||||
{
|
||||
args_buf[i + 5] = dep_flags_buf[i].buf;
|
||||
}
|
||||
|
||||
args_buf[args_len - 1] = NULL;
|
||||
cmd.args = args_buf;
|
||||
return cmd;
|
||||
args_buf[len_args] = NULL;
|
||||
|
||||
LOG_DEBUG("Command created, first 4 args: %s %s %s %s %s | total args: %d", args_buf[0], args_buf[1], args_buf[2], args_buf[3], args_buf[4], len_args);
|
||||
|
||||
return (Command){.a = co->a, .app = co->app, .args = args_buf};
|
||||
}
|
||||
|
||||
// TODO: Add input sanitization to cmd->app and cmd->args
|
||||
int command_run(Command* cmd)
|
||||
{
|
||||
assert(cmd != NULL);
|
||||
|
||||
Reference in New Issue
Block a user