From ad5248a3e1bafc1b7dec4c8af82d56ed324ef314 Mon Sep 17 00:00:00 2001 From: Vasco Date: Mon, 24 Aug 2026 03:53:16 +0100 Subject: Slimed out podium. Updated math. Rend kinda works but still bugged. --- build.c | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 123 insertions(+), 5 deletions(-) (limited to 'build.c') diff --git a/build.c b/build.c index d111efe..7c34e42 100644 --- a/build.c +++ b/build.c @@ -1,11 +1,129 @@ #define POOF_IMPLEMENTATION #include "Poof/poof.h" -int main(int argc, char **argv) { - POOF_GO_REBUILD_URSELF(argc, argv); - +#include +#include +#include + +static void +add_peak_config(Poof_CC *cc) +{ + poof_cmd_append(&cc->includes, "Peak"); + +#if defined(_WIN32) + poof_cc_append_win32(cc, "-luser32", "-lgdi32"); + { + const char *vulkan_sdk = getenv("VULKAN_SDK"); + if (vulkan_sdk) { + char inc_buf[512], lib_buf[512]; + snprintf(inc_buf, sizeof(inc_buf), "-I%s/Include", vulkan_sdk); + snprintf(lib_buf, sizeof(lib_buf), "-L%s/Lib", vulkan_sdk); + poof_cc_append_win32(cc, strdup(inc_buf), strdup(lib_buf)); + } + } + poof_cc_append_win32(cc, "-lvulkan-1"); +#else + poof_cc_append_linux(cc, "-pthread", "-ldl", "-lvulkan"); +#endif +} + +static void +slangc_entry(Poof_Batch *batch, const char *src, const char *entry, const char *stage, const char *out) +{ + Poof_Cmd cmd = {0}; + poof_cmd_append(&cmd, "slangc", src, "-target", "spirv", "-entry", entry, "-stage", stage, "-o", out); + poof_batch_append_cmd(batch, cmd); +} + +static void +add_rend_demo(Poof_Batch *batch, const char *src, const char *out, uint32_t opt, const char *define) +{ + Poof_CC cc; + poof_cc_init(&cc, POOF_CC_GCC | POOF_CC_CLANG, POOF_TARGET_HOST); + cc.debug_mode = true; + cc.optimization = opt; + cc.output = out; + poof_cmd_append(&cc.inputs, src); + poof_cmd_append(&cc.includes, ".", "Rend", "Peak", "demos", "demos/teapot"); + poof_cmd_append(&cc.defines, "PEAK_VULKAN"); + if (define) poof_cmd_append(&cc.defines, define); + poof_cmd_append(&cc.libs, "m"); + poof_cmd_append(&cc.extra_flags, "-std=c99", "-Wall"); + add_peak_config(&cc); + poof_batch_append_cc(batch, &cc); +} + +static bool +build_peak_header(void) +{ + Poof_Cmd cmd = {0}; + poof_cmd_append(&cmd, "python", "bundle_header.py", "Peak/src/peak_header.h"); + if (!poof_cmd_run(&cmd)) return false; + return poof_copy_file("Peak/src/peak_header.h.out", "Peak/peak.h"); +} + +static bool +build_peak_demos(void) +{ + Poof_CC cc = {0}; + poof_cc_init(&cc, POOF_CC_GCC | POOF_CC_CLANG, POOF_TARGET_HOST); + cc.debug_mode = true; + cc.optimization = POOF_O0; + cc.output = "demos/demo"; + poof_cc_append(&cc.inputs, "demos/demo.c"); + poof_cc_append(&cc.extra_flags, "-std=c99", "-Wall", "-Wno-deprecated-declarations", "-pthread"); + poof_cc_append(&cc.libs, "m", "pthread"); + if (!poof_cc_run(&cc)) return false; + + poof_cc_free(&cc); + poof_cc_init(&cc, POOF_CC_GCC | POOF_CC_CLANG, POOF_TARGET_HOST); + cc.debug_mode = true; + cc.optimization = POOF_O0; + cc.output = "demos/demo_run"; + poof_cc_append(&cc.inputs, "demos/demo_run.c"); + poof_cc_append(&cc.extra_flags, "-std=c99", "-Wall", "-Wno-deprecated-declarations", "-pthread"); + poof_cc_append(&cc.libs, "m", "pthread"); + if (!poof_cc_run(&cc)) return false; + Poof_Cmd cmd = {0}; - poof_cmd_append(&cmd, "./Peak/build"); - poof_cmd_run(&cmd); + poof_cmd_append(&cmd, "emcc", "demos/demo_run.c", "-o", "demos/demo.js", + "-std=c99", "-Wall", "-Wno-deprecated-declarations", + "-sALLOW_MEMORY_GROWTH=1", "-sENVIRONMENT=web"); + return poof_cmd_run(&cmd); +} + +static bool +build_rend_demos(void) +{ + poof_mkdir("demos/compute"); + poof_mkdir("demos/teapot"); + + Poof_Batch batch = {0}; + + slangc_entry(&batch, "demos/rend_compute.slang", "particleMain", "compute", "demos/compute/particle.spv"); + slangc_entry(&batch, "demos/rend_compute.slang", "sandMain", "compute", "demos/compute/sand.spv"); + slangc_entry(&batch, "demos/rend_compute.slang", "vertMain", "vertex", "demos/compute/vert.spv"); + slangc_entry(&batch, "demos/rend_compute.slang", "fragMain", "fragment", "demos/compute/frag.spv"); + + slangc_entry(&batch, "demos/teapot/shaders/basic.slang", "vertMain", "vertex", "demos/teapot/basic.vert.spv"); + slangc_entry(&batch, "demos/teapot/shaders/basic.slang", "fragMain", "fragment", "demos/teapot/basic.frag.spv"); + slangc_entry(&batch, "demos/teapot/shaders/texture.slang", "vertMain", "vertex", "demos/teapot/texture.vert.spv"); + slangc_entry(&batch, "demos/teapot/shaders/texture.slang", "fragMain", "fragment", "demos/teapot/texture.frag.spv"); + + add_rend_demo(&batch, "demos/rend_compute.c", "demos/compute/rend_compute_demo", POOF_O0, "REND_DEBUG"); + add_rend_demo(&batch, "demos/rend_compute.c", "demos/compute/rend_compute_fast", POOF_O3 | POOF_MSSE2, NULL); + add_rend_demo(&batch, "demos/rend_teapot.c", "demos/teapot/rend_teapot", POOF_O0, "REND_DEBUG"); + + return poof_batch_run(&batch, "Rend Demos"); +} + +int +main(int argc, char **argv) +{ + POOF_GO_REBUILD_URSELF(argc, argv); + + if (!build_peak_header()) return 1; + if (!build_peak_demos()) return 1; + if (!build_rend_demos()) return 1; return 0; } -- cgit v1.3.1