added QUIC
This commit is contained in:
parent
de2073422c
commit
45479a46ff
22 changed files with 1448 additions and 66 deletions
72
project.cpp
72
project.cpp
|
|
@ -4,19 +4,23 @@ namespace fs = std::filesystem;
|
|||
using namespace Crafter;
|
||||
|
||||
extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> args) {
|
||||
constexpr std::array<std::string_view, 6> networkInterfaces = {
|
||||
constexpr std::array<std::string_view, 8> networkInterfaces = {
|
||||
"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",
|
||||
};
|
||||
constexpr std::array<std::string_view, 4> networkImplementations = {
|
||||
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",
|
||||
};
|
||||
|
||||
std::vector<std::string> depArgs(args.begin(), args.end());
|
||||
|
|
@ -27,45 +31,41 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
|
||||
Configuration cfg;
|
||||
cfg.path = "./";
|
||||
cfg.name = "Crafter.Network";
|
||||
cfg.outputName = "Crafter.Network";
|
||||
cfg.name = "crafter-network";
|
||||
cfg.outputName = "crafter-network";
|
||||
cfg.type = ConfigurationType::LibraryStatic;
|
||||
ApplyStandardArgs(cfg, args);
|
||||
cfg.dependencies = { thread };
|
||||
{
|
||||
std::array<fs::path, 6> ifaces;
|
||||
std::ranges::copy(networkInterfaces, ifaces.begin());
|
||||
std::array<fs::path, 4> impls;
|
||||
std::ranges::copy(networkImplementations, impls.begin());
|
||||
cfg.GetInterfacesAndImplementations(ifaces, impls);
|
||||
}
|
||||
|
||||
auto addTest = [&](std::string name, fs::path implFile) {
|
||||
Test t;
|
||||
t.config.path = "./";
|
||||
t.config.name = std::move(name);
|
||||
t.config.outputName = t.config.name;
|
||||
t.config.target = cfg.target;
|
||||
t.config.debug = cfg.debug;
|
||||
t.config.march = cfg.march;
|
||||
t.config.mtune = cfg.mtune;
|
||||
t.config.type = ConfigurationType::Executable;
|
||||
t.config.dependencies = { thread };
|
||||
std::array<fs::path, 6> ifaces;
|
||||
std::ranges::copy(networkInterfaces, ifaces.begin());
|
||||
std::array<fs::path, 5> impls;
|
||||
std::ranges::copy(networkImplementations, impls.begin());
|
||||
impls[4] = std::move(implFile);
|
||||
t.config.GetInterfacesAndImplementations(ifaces, impls);
|
||||
cfg.tests.push_back(std::move(t));
|
||||
// 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
|
||||
// recursive clone Crafter.Build performs. We disable msquic's own tests,
|
||||
// tools and perf binaries since we only need the library.
|
||||
ExternalDependency& msquic = cfg.externalDependencies.emplace_back();
|
||||
msquic.name = "msquic";
|
||||
msquic.source.url = "https://github.com/microsoft/msquic.git";
|
||||
msquic.source.branch = "main";
|
||||
msquic.builder = ExternalBuilder::CMake;
|
||||
msquic.options = {
|
||||
"-DQUIC_TLS_LIB=quictls",
|
||||
"-DQUIC_BUILD_TEST=OFF",
|
||||
"-DQUIC_BUILD_TOOLS=OFF",
|
||||
"-DQUIC_BUILD_PERF=OFF",
|
||||
"-DQUIC_BUILD_SHARED=ON",
|
||||
};
|
||||
|
||||
addTest("ShouldCompile", "tests/ShouldCompile");
|
||||
addTest("ShouldRecieveHTTP", "tests/ShouldRecieveHTTP");
|
||||
addTest("ShouldSendHTTP", "tests/ShouldSendHTTP");
|
||||
addTest("ShouldSendRecieveHTTP", "tests/ShouldSendRecieveHTTP");
|
||||
addTest("ShouldSendRecieveKeepaliveHTTP", "tests/ShouldSendRecieveKeepaliveHTTP");
|
||||
addTest("ShouldSendRecieveLargeHTTP", "tests/ShouldSendRecieveLargeHTTP");
|
||||
msquic.includeDirs = { "src/inc" };
|
||||
// msquic's CMakeLists overrides CMAKE_LIBRARY_OUTPUT_DIRECTORY with
|
||||
// QUIC_OUTPUT_DIR (defaults to bin/$<CONFIG>), so libmsquic.so lands in
|
||||
// a subdir of the cmake build dir rather than at its root. Point the
|
||||
// linker at the actual output location.
|
||||
msquic.libDirs = { "bin/Release" };
|
||||
msquic.libs = { "msquic" };
|
||||
std::array<fs::path, 8> ifaces;
|
||||
std::ranges::copy(networkInterfaces, ifaces.begin());
|
||||
std::array<fs::path, 6> impls;
|
||||
std::ranges::copy(networkImplementations, impls.begin());
|
||||
cfg.GetInterfacesAndImplementations(ifaces, impls);
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue