This repository has been archived by the owner on Dec 7, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnob.c
90 lines (77 loc) · 2.64 KB
/
nob.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#define NOB_IMPLEMENTATION
#include "dependencies/nob.h"
void help(const char *const program) {
nob_log(NOB_INFO, "Usage: %s [init/...FLAGS]");
nob_log(NOB_INFO, "FLAGS:");
nob_log(NOB_INFO, " - build Builds project.");
nob_log(NOB_INFO, " - shaders Compiles shaders.");
}
bool shader_build(const char *const input_file_path, const char *const output_file_path);
bool shaders_build();
bool cmake_build();
bool cmake_init();
int main(int argc, char **argv) {
NOB_GO_REBUILD_URSELF(argc, argv);
const char *const program = nob_shift_args(&argc, &argv);
if (argc > 0) {
const char *flag = nob_shift_args(&argc, &argv);
if (strcmp(flag, "init") == 0) {
if (!shaders_build() || !cmake_init() || !cmake_build()) return false;
if (argc > 0) {
Nob_String_Builder sb = {0};
while (argc > 0) {
if (sb.count > 0) {
nob_sb_append_cstr(&sb, ", ");
}
nob_sb_append_cstr(&sb, nob_shift_args(&argc, &argv));
}
nob_sb_append_null(&sb);
nob_log(NOB_WARNING, "Skipping arguments: %s", sb.items);
nob_sb_free(sb);
}
} else {
do {
if (strcmp(flag, "build") == 0) {
if (!cmake_build()) return 1;
} else if (strcmp(flag, "shaders") == 0) {
if (!shaders_build()) return 1;
} else {
nob_log(NOB_WARNING, "Unknown flag \"%s\", skipping!", flag);
}
flag = (argc>0?nob_shift_args(&argc, &argv):NULL);
} while (argc > 0);
}
} else {
if (!cmake_build()) return 1;
}
nob_log(NOB_INFO, "Success!");
return 0;
}
bool shader_build(const char *const input_file_path, const char *const output_file_path) {
Nob_Cmd cmd = {0};
nob_cmd_append(&cmd, "glslc", input_file_path, "-o", output_file_path);
return nob_cmd_run_sync(cmd);
}
const char *const shaders[] = {
"./assets/shaders/shader.vert", "./assets/shaders/shader_v.spv",
"./assets/shaders/shader.frag", "./assets/shaders/shader_f.spv",
"./assets/shaders/scene.vert", "./assets/shaders/scene_v.spv",
"./assets/shaders/scene.frag", "./assets/shaders/scene_f.spv",
};
static_assert((NOB_ARRAY_LEN(shaders)%2)==0, "shaders' length must be even!");
bool shaders_build() {
for (size_t i = 0; i < NOB_ARRAY_LEN(shaders); i += 2)
if (!shader_build(shaders[i], shaders[i+1])) return false;
return true;
}
bool cmake_build() {
Nob_Cmd cmd = {0};
nob_cmd_append(&cmd, "cmake", "--build", "./build/");
return nob_cmd_run_sync(cmd);
}
bool cmake_init() {
nob_mkdir_if_not_exists("./build/");
Nob_Cmd cmd = {0};
nob_cmd_append(&cmd, "cmake", "-B", "./build/", ".");
return nob_cmd_run_sync(cmd);
}