diff --git a/.gitignore b/.gitignore index 56076ea..fc91f02 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,10 @@ nob.ilk *.dylib *.a +# Generated source +*.gen.h +*.gen.cpp + # Misc *.exe !nob.c diff --git a/build.c b/build.c index 23cc60d..98673b9 100644 --- a/build.c +++ b/build.c @@ -109,7 +109,7 @@ static const char *frameworks[] = { static bool build_lunasvg_lib(const char *build_dir, bool debug) { const char *obj_dir = nob_temp_sprintf("%s/lunasvg_obj", build_dir); - const char *lib_path = nob_temp_sprintf("%s/liblunasvg.a", build_dir); + const char *lib_path = "vendor/lunasvg/liblunasvg.a"; // Collect all source paths to check if rebuild is needed { @@ -231,7 +231,7 @@ static bool build_lunasvg_lib(const char *build_dir, bool debug) { static bool build_freetype_lib(const char *build_dir, bool debug) { const char *obj_dir = nob_temp_sprintf("%s/freetype_obj", build_dir); - const char *lib_path = nob_temp_sprintf("%s/libfreetype.a", build_dir); + const char *lib_path = "vendor/freetype/libfreetype.a"; if (!nob_needs_rebuild(lib_path, freetype_sources, NOB_ARRAY_LEN(freetype_sources))) { nob_log(NOB_INFO, "freetype is up to date"); @@ -305,15 +305,24 @@ int main(int argc, char **argv) { for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) debug = true; else if (strcmp(argv[i], "clean") == 0) clean = true; + else { + nob_log(NOB_ERROR, "unknown argument: %s", argv[i]); + nob_log(NOB_ERROR, "usage: %s [debug] [clean]", argv[0]); + return 1; + } } const char *build_dir = debug ? "build_debug" : "build_release"; if (clean) { - nob_log(NOB_INFO, "Cleaning %s/", build_dir); - Nob_Cmd cmd = {0}; - nob_cmd_append(&cmd, "rm", "-rf", build_dir); - { Nob_Cmd_Opt opt = {0}; if (!nob_cmd_run_opt(&cmd, opt)) return 1; } + nob_log(NOB_INFO, "Cleaning build artifacts"); + { Nob_Cmd cmd = {0}; nob_cmd_append(&cmd, "rm", "-rf", "build_debug"); + Nob_Cmd_Opt opt = {0}; nob_cmd_run_opt(&cmd, opt); } + { Nob_Cmd cmd = {0}; nob_cmd_append(&cmd, "rm", "-rf", "build_release"); + Nob_Cmd_Opt opt = {0}; nob_cmd_run_opt(&cmd, opt); } + remove("vendor/lunasvg/liblunasvg.a"); + remove("vendor/freetype/libfreetype.a"); + remove("src/renderer/font_inter.gen.h"); return 0; } @@ -335,10 +344,8 @@ int main(int argc, char **argv) { if (!build_freetype_lib(build_dir, debug)) return 1; // Generate embedded font header - const char *gen_dir = nob_temp_sprintf("%s/generated", build_dir); - if (!nob_mkdir_if_not_exists(gen_dir)) return 1; if (!embed_font_file("assets/fonts/Inter-Regular.ttf", - nob_temp_sprintf("%s/font_inter.h", gen_dir))) return 1; + "src/renderer/font_inter.gen.h")) return 1; // Unity build: single clang++ invocation compiles main.cpp (which #includes everything) { @@ -351,7 +358,6 @@ int main(int argc, char **argv) { nob_cmd_append(&cmd, "-Isrc", "-Ivendor/clay"); nob_cmd_append(&cmd, "-Ivendor/lunasvg/include"); nob_cmd_append(&cmd, "-Ivendor/freetype/include"); - nob_cmd_append(&cmd, nob_temp_sprintf("-I%s", build_dir)); nob_cmd_append(&cmd, "-DLUNASVG_BUILD_STATIC"); if (debug) { @@ -365,8 +371,8 @@ int main(int argc, char **argv) { // Reset language mode so .a is treated as a library, not source nob_cmd_append(&cmd, "-x", "none"); - nob_cmd_append(&cmd, nob_temp_sprintf("%s/liblunasvg.a", build_dir)); - nob_cmd_append(&cmd, nob_temp_sprintf("%s/libfreetype.a", build_dir)); + nob_cmd_append(&cmd, "vendor/lunasvg/liblunasvg.a"); + nob_cmd_append(&cmd, "vendor/freetype/libfreetype.a"); { size_t i; @@ -454,7 +460,7 @@ static const char *link_libs[] = { static bool build_lunasvg_lib(const char *build_dir, bool debug) { const char *obj_dir = nob_temp_sprintf("%s\\lunasvg_obj", build_dir); - const char *lib_path = nob_temp_sprintf("%s\\lunasvg.lib", build_dir); + const char *lib_path = debug ? "vendor\\lunasvg\\lunasvg_d.lib" : "vendor\\lunasvg\\lunasvg.lib"; // Check if rebuild is needed { @@ -540,7 +546,7 @@ static bool build_lunasvg_lib(const char *build_dir, bool debug) { static bool build_freetype_lib(const char *build_dir, bool debug) { const char *obj_dir = nob_temp_sprintf("%s\\freetype_obj", build_dir); - const char *lib_path = nob_temp_sprintf("%s\\freetype.lib", build_dir); + const char *lib_path = debug ? "vendor\\freetype\\freetype_d.lib" : "vendor\\freetype\\freetype.lib"; if (!nob_needs_rebuild(lib_path, freetype_sources, NOB_ARRAY_LEN(freetype_sources))) { nob_log(NOB_INFO, "freetype is up to date"); @@ -598,16 +604,28 @@ int main(int argc, char **argv) { for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) debug = true; else if (strcmp(argv[i], "clean") == 0) clean = true; + else { + nob_log(NOB_ERROR, "unknown argument: %s", argv[i]); + nob_log(NOB_ERROR, "usage: %s [debug] [clean]", argv[0]); + return 1; + } } const char *build_dir = debug ? "build_debug" : "build_release"; if (clean) { - nob_log(NOB_INFO, "Cleaning %s/", build_dir); - Nob_Cmd cmd = {0}; - nob_cmd_append(&cmd, "cmd.exe", "/c", - nob_temp_sprintf("if exist %s rmdir /s /q %s", build_dir, build_dir)); - { Nob_Cmd_Opt opt = {0}; if (!nob_cmd_run_opt(&cmd, opt)) return 1; } + nob_log(NOB_INFO, "Cleaning build artifacts"); + { Nob_Cmd cmd = {0}; nob_cmd_append(&cmd, "cmd.exe", "/c", + "if exist build_debug rmdir /s /q build_debug"); + Nob_Cmd_Opt opt = {0}; nob_cmd_run_opt(&cmd, opt); } + { Nob_Cmd cmd = {0}; nob_cmd_append(&cmd, "cmd.exe", "/c", + "if exist build_release rmdir /s /q build_release"); + Nob_Cmd_Opt opt = {0}; nob_cmd_run_opt(&cmd, opt); } + remove("vendor\\lunasvg\\lunasvg.lib"); + remove("vendor\\lunasvg\\lunasvg_d.lib"); + remove("vendor\\freetype\\freetype.lib"); + remove("vendor\\freetype\\freetype_d.lib"); + remove("src\\renderer\\font_inter.gen.h"); return 0; } @@ -618,10 +636,8 @@ int main(int argc, char **argv) { if (!build_freetype_lib(build_dir, debug)) return 1; // Generate embedded font header - const char *gen_dir = nob_temp_sprintf("%s\\generated", build_dir); - if (!nob_mkdir_if_not_exists(gen_dir)) return 1; if (!embed_font_file("assets/fonts/Inter-Regular.ttf", - nob_temp_sprintf("%s\\font_inter.h", gen_dir))) return 1; + "src\\renderer\\font_inter.gen.h")) return 1; // Unity build: single cl.exe invocation compiles main.cpp (which #includes everything) { @@ -631,7 +647,6 @@ int main(int argc, char **argv) { nob_cmd_append(&cmd, "/Isrc", "/Ivendor/clay"); nob_cmd_append(&cmd, "/Ivendor/lunasvg/include"); nob_cmd_append(&cmd, "/Ivendor/freetype/include"); - nob_cmd_append(&cmd, nob_temp_sprintf("/I%s", build_dir)); nob_cmd_append(&cmd, "/DLUNASVG_BUILD_STATIC"); if (debug) { @@ -651,8 +666,8 @@ int main(int argc, char **argv) { nob_cmd_append(&cmd, "/SUBSYSTEM:CONSOLE"); nob_cmd_append(&cmd, nob_temp_sprintf("/PDB:%s/autosample.pdb", build_dir)); nob_cmd_append(&cmd, "/DEBUG"); - nob_cmd_append(&cmd, nob_temp_sprintf("%s/lunasvg.lib", build_dir)); - nob_cmd_append(&cmd, nob_temp_sprintf("%s/freetype.lib", build_dir)); + nob_cmd_append(&cmd, debug ? "vendor/lunasvg/lunasvg_d.lib" : "vendor/lunasvg/lunasvg.lib"); + nob_cmd_append(&cmd, debug ? "vendor/freetype/freetype_d.lib" : "vendor/freetype/freetype.lib"); { size_t i; for (i = 0; i < NOB_ARRAY_LEN(link_libs); i++) diff --git a/src/renderer/renderer.h b/src/renderer/renderer.h index bb35fcf..f964591 100644 --- a/src/renderer/renderer.h +++ b/src/renderer/renderer.h @@ -14,7 +14,7 @@ struct RendererDesc { Renderer *renderer_create(RendererDesc *desc); void renderer_destroy(Renderer *renderer); -B32 renderer_begin_frame(Renderer *renderer); +B32 renderer_begin_frame(Renderer *renderer); void renderer_end_frame(Renderer *renderer, Clay_RenderCommandArray render_commands); void renderer_resize(Renderer *renderer, S32 width, S32 height); void renderer_set_font_scale(Renderer *renderer, F32 scale); diff --git a/src/renderer/renderer_dx12.cpp b/src/renderer/renderer_dx12.cpp index c50f111..8a224f5 100644 --- a/src/renderer/renderer_dx12.cpp +++ b/src/renderer/renderer_dx12.cpp @@ -19,7 +19,7 @@ #include FT_FREETYPE_H #include FT_BITMAP_H #define internal static -#include "generated/font_inter.h" +#include "renderer/font_inter.gen.h" #ifdef _DEBUG #define DX12_ENABLE_DEBUG_LAYER diff --git a/src/renderer/renderer_metal.mm b/src/renderer/renderer_metal.mm index 6f60fb3..48afb30 100644 --- a/src/renderer/renderer_metal.mm +++ b/src/renderer/renderer_metal.mm @@ -14,7 +14,7 @@ #include FT_FREETYPE_H #include FT_BITMAP_H #define internal static -#include "generated/font_inter.h" +#include "renderer/font_inter.gen.h" #define NUM_BACK_BUFFERS 2 #define MAX_VERTICES (64 * 1024)