diff options
Diffstat (limited to 'b.c')
-rw-r--r-- | b.c | 73 |
1 files changed, 73 insertions, 0 deletions
@@ -0,0 +1,73 @@ +#define B_IMPLEMENTATION +#include "src/b.h" + +void cflags(B_Cmd *cmd) +{ + b_cmd_append(cmd, "-Wall", "-Wextra"); + b_cmd_append(cmd, "-Wno-string-plus-int", "-Wno-nullability-completeness", "-Wno-unused-function", "-Wno-missing-field-initializers", "-Wno-unused-parameter", "-Wno-unused-variable"); + b_cmd_append(cmd, "-march=native"); + b_cmd_append(cmd, "-fno-math-errno", "-funroll-loops"); + b_cmd_append(cmd, "-flto", "-pthread"); + b_cmd_append(cmd, "-I./src/"); + //b_cmd_append(cmd, "-O2", "-ggdb", "-DVKDEBUG"); + b_cmd_append(cmd, "-O3"); +} + +void cc(B_Cmd *cmd) +{ + b_cmd_append(cmd, "clang"); + cflags(cmd); +} + +void libs(B_Cmd *cmd) +{ + b_cmd_append(cmd, "-lSDL2", "-lm", "-lvulkan", "-lshaderc_shared", "-lstdc++"); +} + +bool build_exe(bool force, B_Cmd *cmd, const char **input_paths, size_t input_paths_len, const char *output_path) +{ + int rebuild_is_needed = b_needs_rebuild(output_path, input_paths, input_paths_len); + if (rebuild_is_needed < 0) return false; + + if (force || rebuild_is_needed) { + cmd->count = 0; + cc(cmd); + b_cmd_append(cmd, "-o", output_path); + b_da_append_many(cmd, input_paths, input_paths_len); + libs(cmd); + return b_cmd_run_sync(*cmd); + } + + b_log(B_INFO, "%s is up-to-date", output_path); + return true; +} + +int +main(int argc, char *argv[]) +{ + B_GO_REBUILD_URSELF(argc, argv); + + const char *program_name = b_shift_args(&argc, &argv); + + bool force = false; + + while (argc > 0) { + const char *flag = b_shift_args(&argc, &argv); + if (strcmp(flag, "-f") == 0) { + force = true; + } else { + b_log(B_ERROR, "Unknown flag `%s`", flag); + return 1; + } + } + + const char *input_paths[] = { + "src/render.c", + "src/cplusplus.cpp" + }; + + B_Cmd cmd = {0}; + if (!build_exe(force, &cmd, input_paths, B_ARRAY_LEN(input_paths), "render")) return 1; + + return 0; +} |