test runner, cross-target runners, lib/exe split
- subprocess-isolated test runner (replaces V1 dlopen-RunTest); Pass/Fail/Crash/Timeout/Skipped outcomes via :Test partition - TestRunner abstraction with command templates: Local, Ssh, SshWin (cmd.exe-shell), QemuUser, FromEnv; probe-based skip when runner unreachable - transitive PCM-path propagation in Build(); resolveImport walks deps recursively; depResults cache keyed by PcmDir() so per-target builds don't collide - cfg.sysroot threaded through BuildStdPcm + base compile/link command (enables aarch64 cross via Arch Linux ARM rootfs) - lib + exe split: project.cpp defines crafterBuildLib (LibraryStatic) + crafterBuildExe (Executable depending on it); build.sh produces lib/libcrafter-build.a alongside bin/crafter-build for downstream static-link consumers - Windows DLL+launcher: CRAFTER_API macro, /EXPORT flag for project.dll's CrafterBuildProject; Crafter::Run as the real entry point with main.cpp as a thin wrapper - 18 tests: HelloWorld/WithModule/Defines/CrossProjectModule/ Diamond × (Linux + sshwin:winvm), plus Incremental, BuildError, Libraries, RunnerClassification, QemuUser, SshRunner, WindowsViaSsh, CrossArchAarch64 - single ./bin/crafter-build test runs everything; Windows variants skip gracefully if winvm SSH alias unreachable Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
f13671b2be
commit
cdfdb976c8
60 changed files with 2029 additions and 104 deletions
47
tests/fixtures/libraries/project.cpp
vendored
Normal file
47
tests/fixtures/libraries/project.cpp
vendored
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
import std;
|
||||
import Crafter.Build;
|
||||
namespace fs = std::filesystem;
|
||||
using namespace Crafter;
|
||||
|
||||
extern "C" Configuration CrafterBuildProject(std::span<const std::string_view>) {
|
||||
static auto MathStatic = std::make_unique<Configuration>();
|
||||
MathStatic->path = "./mathlib/";
|
||||
MathStatic->name = "MathLib";
|
||||
MathStatic->outputName = "MathLib";
|
||||
MathStatic->target = "x86_64-pc-linux-gnu";
|
||||
MathStatic->type = ConfigurationType::LibraryStatic;
|
||||
{
|
||||
std::array<fs::path, 1> ifaces = { "MathLib" };
|
||||
std::array<fs::path, 0> impls = {};
|
||||
MathStatic->GetInterfacesAndImplementations(ifaces, impls);
|
||||
}
|
||||
|
||||
static auto GreetDynamic = std::make_unique<Configuration>();
|
||||
GreetDynamic->path = "./greetlib/";
|
||||
GreetDynamic->name = "GreetLib";
|
||||
GreetDynamic->outputName = "GreetLib";
|
||||
GreetDynamic->target = "x86_64-pc-linux-gnu";
|
||||
GreetDynamic->type = ConfigurationType::LibraryDynamic;
|
||||
{
|
||||
std::array<fs::path, 1> ifaces = { "GreetLib" };
|
||||
std::array<fs::path, 0> impls = {};
|
||||
GreetDynamic->GetInterfacesAndImplementations(ifaces, impls);
|
||||
}
|
||||
|
||||
Configuration app;
|
||||
app.path = "./";
|
||||
app.name = "libs-app";
|
||||
app.outputName = "libs-app";
|
||||
app.target = "x86_64-pc-linux-gnu";
|
||||
app.type = ConfigurationType::Executable;
|
||||
app.dependencies = { MathStatic.get(), GreetDynamic.get() };
|
||||
{
|
||||
std::array<fs::path, 0> ifaces = {};
|
||||
std::array<fs::path, 1> impls = { "main" };
|
||||
app.GetInterfacesAndImplementations(ifaces, impls);
|
||||
}
|
||||
app.linkFlags.push_back("-Wl,--export-dynamic");
|
||||
app.linkFlags.push_back("-ldl");
|
||||
|
||||
return app;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue