80 lines
2.4 KiB
C
80 lines
2.4 KiB
C
// 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;
|
|
}
|