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 addVectorTest = [&](std::string march, std::string mtune) { Test t; t.config.path = "./"; t.config.name = std::format("Vector-{}", march); t.config.outputName = t.config.name; t.config.target = cfg.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 = { "tests/Vector" }; t.config.GetInterfacesAndImplementations(ifaces, impls); cfg.tests.push_back(std::move(t)); }; addVectorTest("sapphirerapids", "native"); addVectorTest("x86-64-v4", "generic"); addVectorTest("x86-64-v3", "generic"); return cfg; }