This commit is contained in:
parent
725910eb9c
commit
603840879d
11 changed files with 283 additions and 18235 deletions
|
|
@ -24,6 +24,55 @@ import std;
|
|||
import :Clang;
|
||||
|
||||
export namespace Crafter {
|
||||
// One row in a SIMD-march fan-out: a single Test variant compiles the
|
||||
// shared source with `-march=<march> -mtune=<mtune>`. Passed by span to
|
||||
// Configuration::AddMarchVariants — see Crafter.Math/project.cpp.
|
||||
struct MarchTier {
|
||||
std::string march;
|
||||
std::string mtune;
|
||||
};
|
||||
|
||||
// Fluent helper returned by Configuration::AddTest. Holds a back-pointer
|
||||
// to the parent Configuration and the index of the just-pushed Test, so
|
||||
// mutations survive any vector reallocation that subsequent AddTest
|
||||
// calls might trigger. Each setter returns `*this` to support chaining.
|
||||
//
|
||||
// Note: source files (interfaces + implementations) are fixed at
|
||||
// AddTest-time — pass them via the AddTest overload that takes
|
||||
// interfaces. The builder only mutates compile state, deps, runtime
|
||||
// args, and requires; it deliberately does NOT expose Sources() to
|
||||
// avoid the double-`GetInterfacesAndImplementations` footgun (calling
|
||||
// it twice would re-parse the same .cppm files into duplicate Module
|
||||
// entries).
|
||||
struct CRAFTER_API TestBuilder {
|
||||
Configuration* parent;
|
||||
std::size_t index;
|
||||
|
||||
Test& test() const { return parent->tests[index]; }
|
||||
|
||||
// Override the path the test's sources resolve against. Defaults to
|
||||
// "./" (project root, where tests/<name>/main.cpp lives). Override
|
||||
// only when the test source layout sits under a subdir.
|
||||
TestBuilder& Path(std::filesystem::path p);
|
||||
TestBuilder& Target(std::string t);
|
||||
TestBuilder& March(std::string m);
|
||||
TestBuilder& Mtune(std::string m);
|
||||
TestBuilder& Sysroot(std::filesystem::path s);
|
||||
TestBuilder& Debug(bool d = true);
|
||||
TestBuilder& Define(std::string name, std::string value = "");
|
||||
TestBuilder& Timeout(std::chrono::seconds s);
|
||||
// Replaces any previously-set args.
|
||||
TestBuilder& Args(std::vector<std::string> a);
|
||||
// Appends one require entry ("tool:foo" / "file:..." / "env:VAR").
|
||||
TestBuilder& Requires(std::string r);
|
||||
// Replaces the dependency list. Pointers must outlive the build.
|
||||
TestBuilder& Dependencies(std::vector<Configuration*> deps);
|
||||
// Append a single linker flag (-l..., -L..., etc.).
|
||||
TestBuilder& LinkFlag(std::string f);
|
||||
// Append a single compile flag.
|
||||
TestBuilder& CompileFlag(std::string f);
|
||||
};
|
||||
|
||||
struct RunTestsOptions {
|
||||
std::vector<std::string> globs;
|
||||
int jobs = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue