nobuild.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #define NOBUILD_IMPLEMENTATION
  2. #include "./nobuild.h"
  3. #define CFLAGS "-Wall", "-Wextra", "-std=c99", "-pedantic"
  4. void build_tool(const char *tool)
  5. {
  6. Cstr tool_path = PATH("tools", tool);
  7. #ifndef _WIN32
  8. CMD("cc", CFLAGS, "-o", NOEXT(tool_path), tool_path);
  9. #else
  10. CMD("cl.exe", "/Fe.\\tools\\", tool_path);
  11. #endif
  12. }
  13. void build_tools(void)
  14. {
  15. FOREACH_FILE_IN_DIR(tool, "tools", {
  16. if (ENDS_WITH(tool, ".c")) {
  17. build_tool(tool);
  18. }
  19. });
  20. }
  21. void run_example(const char *example)
  22. {
  23. Cstr example_path = PATH("examples", example);
  24. #ifndef _WIN32
  25. CMD("cc", CFLAGS, "-o", NOEXT(example_path), example_path);
  26. #else
  27. CMD("cl.exe", "/Fe.\\examples\\", example_path);
  28. #endif
  29. CMD(NOEXT(example_path));
  30. }
  31. void run_examples(void)
  32. {
  33. FOREACH_FILE_IN_DIR(example, "examples", {
  34. if (ENDS_WITH(example, ".c")) {
  35. run_example(example);
  36. }
  37. });
  38. }
  39. void print_chain(const Chain *chain)
  40. {
  41. INFO("input: %s", chain->input_filepath);
  42. INFO("output: %s", chain->output_filepath);
  43. FOREACH_ARRAY(Cmd, cmd, chain->cmds, {
  44. INFO("cmd: %s", cmd_show(*cmd));
  45. });
  46. }
  47. int main(int argc, char **argv)
  48. {
  49. GO_REBUILD_URSELF(argc, argv);
  50. build_tools();
  51. run_examples();
  52. return 0;
  53. }