// Bootstrap: cl /nologo nob.c // After that, just run: nob.exe #define NOB_IMPLEMENTATION #include "nob.h" #define BUILD_DIR "build" static const char *link_libs[] = { "d3d12.lib", "dxgi.lib", "d3dcompiler.lib", "user32.lib", "gdi32.lib", "shell32.lib", "ole32.lib", "advapi32.lib", "dwmapi.lib", "winmm.lib", }; int main(int argc, char **argv) { NOB_GO_REBUILD_URSELF(argc, argv); bool debug = false; bool clean = false; for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) debug = true; else if (strcmp(argv[i], "clean") == 0) clean = true; } if (clean) { nob_log(NOB_INFO, "Cleaning %s/", BUILD_DIR); Nob_Cmd cmd = {0}; nob_cmd_append(&cmd, "cmd.exe", "/c", "if exist " BUILD_DIR " rmdir /s /q " BUILD_DIR); { Nob_Cmd_Opt opt = {0}; if (!nob_cmd_run_opt(&cmd, opt)) return 1; } return 0; } if (!nob_mkdir_if_not_exists(BUILD_DIR)) return 1; // Unity build: single cl.exe invocation compiles main.cpp (which #includes everything) { Nob_Cmd cmd = {0}; nob_cmd_append(&cmd, "cl.exe"); nob_cmd_append(&cmd, "/nologo", "/std:c++20", "/EHsc", "/W3"); nob_cmd_append(&cmd, "/Isrc", "/Ivendor/clay"); if (debug) { nob_cmd_append(&cmd, "/MTd", "/Zi", "/Od", "/D_DEBUG"); } else { nob_cmd_append(&cmd, "/MT", "/Zi", "/O2", "/DNDEBUG"); } nob_cmd_append(&cmd, nob_temp_sprintf("/Fe:%s/autosample.exe", BUILD_DIR)); nob_cmd_append(&cmd, nob_temp_sprintf("/Fo:%s/", BUILD_DIR)); nob_cmd_append(&cmd, nob_temp_sprintf("/Fd:%s/autosample.pdb", BUILD_DIR)); nob_cmd_append(&cmd, "src/main.cpp"); nob_cmd_append(&cmd, "/link"); nob_cmd_append(&cmd, "/MACHINE:X64"); nob_cmd_append(&cmd, "/SUBSYSTEM:CONSOLE"); nob_cmd_append(&cmd, nob_temp_sprintf("/PDB:%s/autosample.pdb", BUILD_DIR)); nob_cmd_append(&cmd, "/DEBUG"); { size_t i; for (i = 0; i < NOB_ARRAY_LEN(link_libs); i++) nob_cmd_append(&cmd, link_libs[i]); } { Nob_Cmd_Opt opt = {0}; if (!nob_cmd_run_opt(&cmd, opt)) return 1; } } // Clean up obj files nob_delete_file(nob_temp_sprintf("%s/main.obj", BUILD_DIR)); nob_log(NOB_INFO, "Build complete: %s/autosample.exe", BUILD_DIR); return 0; }