X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fcompile.c;fp=tools%2Fcompile.c;h=5ec41228f59e51de3d2b5819a34a0eede4fcfa22;hp=0000000000000000000000000000000000000000;hb=3612661714e86333ceacca7314959a5ed938dc6a;hpb=165727526f785b05f67f3d88f9518a0a840acbbf diff --git a/tools/compile.c b/tools/compile.c new file mode 100644 index 00000000..5ec41228 --- /dev/null +++ b/tools/compile.c @@ -0,0 +1,32 @@ +#include "tools.h" +#include +#include + +/* Compile multiple object files into a single. Returns errmsg if fails. */ +char *link_objects(const void *ctx, const char *outfile, const char *objs) +{ + return run_command(ctx, "cc " CFLAGS " -c -o %s %s", outfile, objs); +} + +/* Compile a single C file to an object file. Returns errmsg if fails. */ +char *compile_object(const void *ctx, const char *outfile, const char *cfile) +{ + return run_command(ctx, "cc " CFLAGS " -c -o %s %s", outfile, cfile); +} + +/* Compile and link single C file, with object files. + * Returns name of result, or NULL (and fills in errmsg). */ +char *compile_and_link(const void *ctx, const char *cfile, const char *objs, + const char *extra_cflags, const char *libs, + char **errmsg) +{ + char *file = temp_file(ctx, ""); + + *errmsg = run_command(ctx, "cc " CFLAGS " %s -o %s %s %s %s", + extra_cflags, file, cfile, objs, libs); + if (*errmsg) { + talloc_free(file); + return NULL; + } + return file; +}