import std; import Crafter.Build; namespace fs = std::filesystem; using namespace Crafter; extern "C" Configuration CrafterBuildProject(std::span args) { constexpr std::array mathInterfaces = { "interfaces/Crafter.Math-Basic", "interfaces/Crafter.Math", "interfaces/Crafter.Math-Common", "interfaces/Crafter.Math-Vector", "interfaces/Crafter.Math-Intersection", "interfaces/Crafter.Math-MatrixRowMajor", "interfaces/Crafter.Math-VectorF16", "interfaces/Crafter.Math-VectorF32", }; Configuration cfg; cfg.path = "./"; cfg.name = "Crafter.Math"; cfg.outputName = "Crafter.Math"; cfg.type = ConfigurationType::LibraryStatic; ApplyStandardArgs(cfg, args); { std::array ifaces; std::ranges::copy(mathInterfaces, ifaces.begin()); std::array impls = {}; cfg.GetInterfacesAndImplementations(ifaces, impls); } auto addTest = [&](std::string_view testName, std::string march, std::string mtune, std::string target = {}) { Test t; t.config.path = "./"; t.config.name = std::format("{}-{}", testName, march); t.config.outputName = t.config.name; t.config.target = target.empty() ? cfg.target : target; t.config.type = ConfigurationType::Executable; t.config.march = march; t.config.mtune = mtune; t.config.debug = cfg.debug; std::array ifaces; std::ranges::copy(mathInterfaces, ifaces.begin()); std::array impls = { fs::path{std::format("tests/{}", testName)} }; t.config.GetInterfacesAndImplementations(ifaces, impls); cfg.tests.push_back(std::move(t)); }; const std::string_view target = cfg.target; const bool isX86 = target.starts_with("x86_64") || target.starts_with("i686"); const bool isRiscv = target.starts_with("riscv"); for (std::string_view name : { "Vector", "Intersection", "Matrix" }) { if (isX86) { addTest(name, "sapphirerapids", "native"); addTest(name, "x86-64-v4", "generic"); addTest(name, "x86-64-v3", "generic"); } if (isRiscv) { // RISC-V tiers, mirroring the x86 selector: register width is // picked from the guaranteed VLEN encoded in the march's Zvl* // suffix. rv64gcv → ZVL128B (matches the RVA23 baseline). addTest(name, "rv64gcv_zvl512b", "generic"); addTest(name, "rv64gcv_zvl256b", "generic"); addTest(name, "rv64gcv", "generic"); } } return cfg; }