44 lines
773 B
C
44 lines
773 B
C
#include <sys/mman.h>
|
|
|
|
#include "gebs/gebs.h"
|
|
|
|
#include "gpp.h"
|
|
#include "baked.h"
|
|
|
|
int gpp_fd;
|
|
|
|
void gpp_init(void)
|
|
{
|
|
gpp_fd = memfd_create("gpp-binary", 0);
|
|
if (gpp_fd < 0) {
|
|
LOGE("Could not create gpp_fd. Aborting...");
|
|
abort();
|
|
}
|
|
|
|
write(gpp_fd, gpp1_data, gpp1_size);
|
|
}
|
|
|
|
void gpp_deinit(void)
|
|
{
|
|
close(gpp_fd);
|
|
}
|
|
|
|
bool gpp_run(char *path, NString_List *env, String_Builder *out)
|
|
{
|
|
Cmd cmd = {0};
|
|
defer { cmd_free(&cmd); }
|
|
|
|
cmd_append(&cmd, "gpp1");
|
|
cmd_append(&cmd, "-H");
|
|
cmd_append(&cmd, "-x");
|
|
cmd_append(&cmd, "--nostdinc");
|
|
cmd_append(&cmd, path);
|
|
|
|
for (size_t i = 0; i < env->count; i++) {
|
|
cmd_append(&cmd, env->items[i]);
|
|
}
|
|
|
|
return cmd_fd_run_collect(gpp_fd, &cmd, out) == 0;
|
|
}
|
|
|