#include "src/build_tool/library.cpp" struct Library { Array sources; Array objects; Array include_paths; Array defines; }; Library PrepareZLib() { Library l = {}; l.sources.add("../src/external/zlib-1.3.1/adler32.c"); l.sources.add("../src/external/zlib-1.3.1/compress.c"); l.sources.add("../src/external/zlib-1.3.1/crc32.c"); l.sources.add("../src/external/zlib-1.3.1/deflate.c"); l.sources.add("../src/external/zlib-1.3.1/gzclose.c"); l.sources.add("../src/external/zlib-1.3.1/gzlib.c"); l.sources.add("../src/external/zlib-1.3.1/gzread.c"); l.sources.add("../src/external/zlib-1.3.1/gzwrite.c"); l.sources.add("../src/external/zlib-1.3.1/inflate.c"); l.sources.add("../src/external/zlib-1.3.1/infback.c"); l.sources.add("../src/external/zlib-1.3.1/inftrees.c"); l.sources.add("../src/external/zlib-1.3.1/inffast.c"); l.sources.add("../src/external/zlib-1.3.1/trees.c"); l.sources.add("../src/external/zlib-1.3.1/uncompr.c"); l.sources.add("../src/external/zlib-1.3.1/zutil.c"); l.include_paths.add("../src/external/zlib-1.3.1/"); l.objects.add("adler32.obj"); l.objects.add("compress.obj"); l.objects.add("crc32.obj"); l.objects.add("deflate.obj"); l.objects.add("gzclose.obj"); l.objects.add("gzlib.obj"); l.objects.add("gzread.obj"); l.objects.add("gzwrite.obj"); l.objects.add("inflate.obj"); l.objects.add("infback.obj"); l.objects.add("inftrees.obj"); l.objects.add("inffast.obj"); l.objects.add("trees.obj"); l.objects.add("uncompr.obj"); l.objects.add("zutil.obj"); if (!OS_FileExists(l.objects[0])) { Array cmd = {}; cmd.add("cl.exe -c -nologo -Zi -MP -FC "); For(l.include_paths) cmd.add(S8_Format(Perm, "-I %.*s ", S8_Expand(it))); cmd += l.sources; Run(cmd); } return l; } Library PrepareIMGUI(S8_String sdl_inc_path) { Library l = {}; l.include_paths.add("../src/external/imgui/"); l.include_paths.add("../src/external/imgui/backends"); l.sources.add("../src/external/imgui/backends/imgui_impl_sdl2.cpp"); l.sources.add("../src/external/imgui/backends/imgui_impl_opengl3.cpp"); l.sources.add("../src/external/imgui/imgui.cpp"); l.sources.add("../src/external/imgui/imgui_demo.cpp"); l.sources.add("../src/external/imgui/imgui_draw.cpp"); l.sources.add("../src/external/imgui/imgui_tables.cpp"); l.sources.add("../src/external/imgui/imgui_widgets.cpp"); l.objects.add("imgui_impl_sdl2.obj"); l.objects.add("imgui_impl_opengl3.obj"); l.objects.add("imgui.obj"); l.objects.add("imgui_demo.obj"); l.objects.add("imgui_draw.obj"); l.objects.add("imgui_tables.obj"); l.objects.add("imgui_widgets.obj"); if (!OS_FileExists(l.objects[0])) { Array cmd = {}; cmd.add("cl.exe -c -nologo -Zi -MP -FC "); cmd.add(Fmt("-I %.*s", S8_Expand(sdl_inc_path))); For(l.include_paths) cmd.add(S8_Format(Perm, "-I %.*s ", S8_Expand(it))); cmd += l.sources; Run(cmd); } return l; } Library PrepareSDL() { Library l = {}; l.include_paths.add("../src/external/SDL2/include"); l.objects.add("../src/external/SDL2/lib/x64/SDL2main.lib"); l.objects.add("../src/external/SDL2/lib/x64/SDL2.lib"); OS_Result os_result = OS_CopyFile("../src/external/SDL2/lib/x64/SDL2.dll", "SDL2.dll", true); if (os_result != OS_SUCCESS) IO_Printf("failed to copy SDL2.dll\n"); return l; } Library PrepareGlad() { Library l = {}; l.sources.add("../src/external/glad/glad.c"); l.include_paths.add("../src/external/glad"); l.objects.add("glad.obj"); if (!OS_FileExists(l.objects[0])) { Array cmd = {}; cmd.add("cl.exe -c -nologo -Zi -MP -FC "); For(l.include_paths) cmd.add(S8_Format(Perm, "-I %.*s ", S8_Expand(it))); cmd += l.sources; Run(cmd); } return l; } void AddCommonFlags(Array *cmd, bool debug = true) { cmd->add("/MP /Zi /FC /nologo"); cmd->add("/WX /W3 /wd4200 /diagnostics:column"); cmd->add("/Oi"); cmd->add("-D_CRT_SECURE_NO_WARNINGS"); if (debug) { cmd->add("-DDEBUG_BUILD=1"); cmd->add("-DRELEASE_BUILD=0"); // cmd->add("-D_DEBUG /MDd"); } else { cmd->add("-DDEBUG_BUILD=0"); cmd->add("-DRELEASE_BUILD=1"); cmd->add("/O2 /MT /DNDEBUG /GL"); } } int main() { MA_InitScratch(); SRC_InitCache(Perm, "pdf_browser.cache"); int result = 0; Array libs = {}; libs.add(PrepareSDL()); libs.add(PrepareGlad()); libs.add(PrepareIMGUI(libs[0].include_paths[0])); Array cmd = {}; cmd.add("cl.exe"); cmd.add("-Fe:transcript_browser.exe"); cmd.add("-Fd:transcript_browser.pdb"); cmd.add("-std:c++20"); // semaphore AddCommonFlags(&cmd); For2(lib, libs) For(lib.defines) cmd.add(it); cmd.add("../src/transcript_browser/main.cpp"); cmd.add("../src/basic/win32.cpp"); For2(lib, libs) For(lib.include_paths) cmd.add(Fmt("-I %.*s", S8_Expand(it))); cmd.add("/link"); cmd.add("/incremental:no"); cmd.add("/SUBSYSTEM:WINDOWS"); cmd.add("opengl32.lib"); For(libs) For2(o, it.objects) cmd.add(o); OS_DeleteFile("transcript_browser.pdb"); // For(cmd) IO_Printf("%.*s\n", S8_Expand(it)); result += Run(cmd); if (result != 0) { OS_DeleteFile("pdf_browser.cache"); return result; } SRC_SaveCache(); return 0; }