// SPDX-License-Identifier: MIT // SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts® import std; import Crafter.Build; // This checkout's own build helper. A consumer elsewhere names the repository: // #pragma crafter dependency "https://forgejo.catcrafts.net/Catcrafts/Crafter.Debug.git" project "tooling/project.cpp" #pragma crafter dependency "../.." project "tooling/project.cpp" import Crafter.Debug.Build; namespace fs = std::filesystem; using namespace Crafter; extern "C" Configuration CrafterBuildProject(std::span args) { Configuration cfg; cfg.path = "./"; cfg.name = "Basic"; cfg.outputName = "basic"; cfg.type = ConfigurationType::Executable; const ArgQuery opts = ApplyStandardArgs(cfg, args); // What every dependency gets: this project's args minus the flags only it // reads. A dependency that two paths share must get one list on both. std::vector depArgs; for (const std::string_view arg : args) { if (arg != "--debug-api") depArgs.emplace_back(arg); } const bool debugApi = Debug::Use(cfg, { .enabled = opts.Has("--debug-api"), .flag = "--debug-api", .define = "BASIC_DEBUG_API", .args = depArgs }); std::vector interfaces = { "interfaces/Basic.DebugShim", "interfaces/Basic.World" }; std::vector implementations = { "implementations/Basic.World", "implementations/main" }; // The agent's commands and watches, in debug builds only. if (debugApi) { interfaces.emplace_back("interfaces/Basic.DebugCommands"); implementations.emplace_back("implementations/Basic.DebugCommands"); } cfg.GetInterfacesAndImplementations(interfaces, implementations); return cfg; }