2026-07-18 23:27:41 +02:00
|
|
|
/*
|
|
|
|
|
catcrafts.net
|
|
|
|
|
Copyright (C) 2026 Catcrafts
|
|
|
|
|
|
|
|
|
|
The source code of this website is made available for viewing purposes only.
|
|
|
|
|
No permission is granted to copy, modify, distribute, or create derivative works.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import std;
|
|
|
|
|
import Crafter.Build;
|
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
using namespace Crafter;
|
|
|
|
|
|
|
|
|
|
extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> args) {
|
|
|
|
|
std::vector<std::string> depArgs(args.begin(), args.end());
|
|
|
|
|
depArgs.push_back("--target=wasm32-wasip1");
|
|
|
|
|
|
|
|
|
|
// --local resolves the Crafter.Graphics dep from a sibling working tree
|
|
|
|
|
// instead of fetching it from forgejo. Mirrors Crafter.Graphics's own
|
|
|
|
|
// project.cpp convention so edits across the two repos pick up without
|
|
|
|
|
// commit-and-pull.
|
|
|
|
|
bool useLocal = false;
|
|
|
|
|
for (std::string_view a : args) {
|
|
|
|
|
if (a == "--local") { useLocal = true; break; }
|
|
|
|
|
}
|
|
|
|
|
if (useLocal && std::find(depArgs.begin(), depArgs.end(), std::string("--local")) == depArgs.end()) {
|
|
|
|
|
depArgs.push_back("--local");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Configuration* graphics = useLocal
|
|
|
|
|
? LocalProject({
|
|
|
|
|
.projectFile = "../Crafter/Crafter.Graphics/project.cpp",
|
|
|
|
|
.args = depArgs,
|
|
|
|
|
})
|
|
|
|
|
: GitProject({
|
|
|
|
|
.source = { .url = "https://forgejo.catcrafts.net/Catcrafts/Crafter.Graphics.git" },
|
|
|
|
|
.args = depArgs,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Configuration cfg;
|
|
|
|
|
cfg.path = "./";
|
|
|
|
|
cfg.name = "Catcrafts.Net";
|
|
|
|
|
cfg.outputName = "catcrafts";
|
|
|
|
|
cfg.type = ConfigurationType::Executable;
|
|
|
|
|
cfg.target = "wasm32-wasip1";
|
|
|
|
|
ApplyStandardArgs(cfg, args);
|
|
|
|
|
cfg.dependencies = { graphics };
|
|
|
|
|
|
2026-07-19 01:13:30 +02:00
|
|
|
std::array<fs::path, 5> ifaces = {
|
2026-07-18 23:27:41 +02:00
|
|
|
"interfaces/Catcrafts",
|
|
|
|
|
"interfaces/Catcrafts-Views",
|
|
|
|
|
"interfaces/Catcrafts-Blog",
|
|
|
|
|
"interfaces/Catcrafts-Root",
|
2026-07-19 01:13:30 +02:00
|
|
|
"interfaces/Catcrafts-Demo",
|
2026-07-18 23:27:41 +02:00
|
|
|
};
|
2026-07-19 01:13:30 +02:00
|
|
|
std::array<fs::path, 5> impls = {
|
2026-07-18 23:27:41 +02:00
|
|
|
"implementations/main",
|
|
|
|
|
"implementations/Catcrafts-Blog",
|
|
|
|
|
"implementations/Catcrafts-Root",
|
|
|
|
|
"implementations/Catcrafts-Views",
|
2026-07-19 01:13:30 +02:00
|
|
|
"implementations/Catcrafts-Demo",
|
2026-07-18 23:27:41 +02:00
|
|
|
};
|
|
|
|
|
cfg.GetInterfacesAndImplementations(ifaces, impls);
|
|
|
|
|
|
|
|
|
|
cfg.files.emplace_back(fs::path("styles/styles.css"));
|
|
|
|
|
cfg.files.emplace_back(fs::path("robots.txt"));
|
|
|
|
|
cfg.files.emplace_back(fs::path("sitemap.xml"));
|
|
|
|
|
cfg.files.emplace_back(fs::path("favicon.svg"));
|
2026-07-19 01:13:30 +02:00
|
|
|
// WGSL for the ray-traced WebGPU demo embedded in the blog (see
|
|
|
|
|
// interfaces/Catcrafts-Demo.cppm). Fetched at runtime by WebGPUShader.
|
|
|
|
|
cfg.files.emplace_back(fs::path("shaders/raygen.wgsl"));
|
|
|
|
|
cfg.files.emplace_back(fs::path("shaders/miss.wgsl"));
|
|
|
|
|
cfg.files.emplace_back(fs::path("shaders/closesthit.wgsl"));
|
|
|
|
|
cfg.files.emplace_back(fs::path("shaders/resolve.wgsl"));
|
2026-07-18 23:27:41 +02:00
|
|
|
// Loaded as a <script type="module"> before runtime.js by
|
|
|
|
|
// EnableWasiBrowserRuntime — sets <title>/<link> tags since the
|
|
|
|
|
// Dom partition has no head-element access.
|
|
|
|
|
cfg.files.emplace_back(fs::path("catcrafts-head.js"));
|
|
|
|
|
|
|
|
|
|
EnableWasiBrowserRuntime(cfg);
|
|
|
|
|
|
|
|
|
|
return cfg;
|
|
|
|
|
}
|