browser wasm
This commit is contained in:
parent
28fab2509b
commit
e8630528af
24 changed files with 2490 additions and 100 deletions
60
project.cpp
60
project.cpp
|
|
@ -4,7 +4,7 @@ namespace fs = std::filesystem;
|
|||
using namespace Crafter;
|
||||
|
||||
extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> args) {
|
||||
constexpr std::array<std::string_view, 9> networkInterfaces = {
|
||||
constexpr std::array<std::string_view, 10> networkInterfaces = {
|
||||
"interfaces/Crafter.Network",
|
||||
"interfaces/Crafter.Network-ClientTCP",
|
||||
"interfaces/Crafter.Network-ListenerTCP",
|
||||
|
|
@ -14,14 +14,7 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
"interfaces/Crafter.Network-HTTP3",
|
||||
"interfaces/Crafter.Network-ClientQUIC",
|
||||
"interfaces/Crafter.Network-ListenerQUIC",
|
||||
};
|
||||
constexpr std::array<std::string_view, 6> networkImplementations = {
|
||||
"implementations/Crafter.Network-ClientTCP",
|
||||
"implementations/Crafter.Network-ListenerTCP",
|
||||
"implementations/Crafter.Network-ClientHTTP",
|
||||
"implementations/Crafter.Network-ListenerHTTP",
|
||||
"implementations/Crafter.Network-ClientQUIC",
|
||||
"implementations/Crafter.Network-ListenerQUIC",
|
||||
"interfaces/Crafter.Network-WebTransport",
|
||||
};
|
||||
|
||||
std::vector<std::string> depArgs(args.begin(), args.end());
|
||||
|
|
@ -38,6 +31,51 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
ApplyStandardArgs(cfg, args);
|
||||
cfg.dependencies = { thread };
|
||||
|
||||
// Browser path: any wasm32-* target gets the browser network stack
|
||||
// (fetch + WebTransport via JS glue). msquic and the POSIX socket
|
||||
// backends are skipped; the listener / TCP partitions stub to empty
|
||||
// modules via #ifdef CRAFTER_NETWORK_BROWSER in their interface files.
|
||||
// HTTP3 (varint / frame / QPACK codec) is dropped entirely — it threw
|
||||
// exceptions for protocol errors, which the wasm build's -fno-exceptions
|
||||
// forbids, and the browser's fetch() handles HTTP-layer framing itself.
|
||||
bool browser = cfg.target.find("wasm") != std::string::npos;
|
||||
if (browser) {
|
||||
cfg.defines.push_back({"CRAFTER_NETWORK_BROWSER", ""});
|
||||
|
||||
std::array<fs::path, 9> browserIfaces = {
|
||||
"interfaces/Crafter.Network",
|
||||
"interfaces/Crafter.Network-ClientTCP",
|
||||
"interfaces/Crafter.Network-ListenerTCP",
|
||||
"interfaces/Crafter.Network-ClientHTTP",
|
||||
"interfaces/Crafter.Network-ListenerHTTP",
|
||||
"interfaces/Crafter.Network-HTTP",
|
||||
"interfaces/Crafter.Network-ClientQUIC",
|
||||
"interfaces/Crafter.Network-ListenerQUIC",
|
||||
"interfaces/Crafter.Network-WebTransport",
|
||||
};
|
||||
std::array<fs::path, 2> browserImpls = {
|
||||
"implementations/Crafter.Network-ClientHTTP-Browser",
|
||||
"implementations/Crafter.Network-ClientQUIC-Browser",
|
||||
};
|
||||
cfg.GetInterfacesAndImplementations(browserIfaces, browserImpls);
|
||||
|
||||
// JS glue shipped alongside the .wasm. The consuming executable's
|
||||
// wasi-browser runtime merges this into the env import object
|
||||
// before instantiation (mirrors Crafter.Graphics/dom-env.js).
|
||||
cfg.files.emplace_back(fs::path("additional/network-env.js"));
|
||||
return cfg;
|
||||
}
|
||||
|
||||
constexpr std::array<std::string_view, 7> networkImplementations = {
|
||||
"implementations/Crafter.Network-ClientTCP",
|
||||
"implementations/Crafter.Network-ListenerTCP",
|
||||
"implementations/Crafter.Network-ClientHTTP",
|
||||
"implementations/Crafter.Network-ListenerHTTP",
|
||||
"implementations/Crafter.Network-ClientQUIC",
|
||||
"implementations/Crafter.Network-ListenerQUIC",
|
||||
"implementations/Crafter.Network-WebTransport",
|
||||
};
|
||||
|
||||
// msquic — provides the QUIC transport used by ClientQUIC / ListenerQUIC.
|
||||
// Cloned + built via CMake into the per-project external cache; no system
|
||||
// package required. Submodules (quictls / clog / etc.) come via the
|
||||
|
|
@ -62,9 +100,9 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
// linker at the actual output location.
|
||||
msquic.libDirs = { "bin/Release" };
|
||||
msquic.libs = { "msquic" };
|
||||
std::array<fs::path, 9> ifaces;
|
||||
std::array<fs::path, 10> ifaces;
|
||||
std::ranges::copy(networkInterfaces, ifaces.begin());
|
||||
std::array<fs::path, 6> impls;
|
||||
std::array<fs::path, 7> impls;
|
||||
std::ranges::copy(networkImplementations, impls.begin());
|
||||
cfg.GetInterfacesAndImplementations(ifaces, impls);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue