This commit is contained in:
parent
a25b0a1ded
commit
8892154b28
70 changed files with 2780 additions and 596 deletions
74
project.cpp
74
project.cpp
|
|
@ -1,8 +1,9 @@
|
|||
//SPDX-License-Identifier: LGPL-3.0-only
|
||||
//SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
// SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
||||
|
||||
import std;
|
||||
import Crafter.Build;
|
||||
#include "lint-rules.h"
|
||||
namespace fs = std::filesystem;
|
||||
using namespace Crafter;
|
||||
|
||||
|
|
@ -17,22 +18,22 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
.args = depArgs,
|
||||
});
|
||||
|
||||
static auto crafterBuildLib = std::make_unique<Configuration>();
|
||||
crafterBuildLib->path = "./";
|
||||
crafterBuildLib->name = "crafter.build-lib";
|
||||
crafterBuildLib->outputName = "crafter-build";
|
||||
ApplyStandardArgs(*crafterBuildLib, args);
|
||||
static auto CrafterBuildLib = std::make_unique<Configuration>();
|
||||
CrafterBuildLib->path = "./";
|
||||
CrafterBuildLib->name = "crafter.build-lib";
|
||||
CrafterBuildLib->outputName = "crafter-build";
|
||||
ApplyStandardArgs(*CrafterBuildLib, args);
|
||||
// Windows builds (native msvc via build.cmd or cross-compiled mingw from
|
||||
// Linux) need a DLL + import lib + launcher exe so LoadProject can
|
||||
// compile project.cpp against a stable ABI boundary. Linux is monolithic.
|
||||
crafterBuildLib->type = (crafterBuildLib->target == "x86_64-w64-mingw32" || crafterBuildLib->target == "x86_64-pc-windows-msvc")
|
||||
CrafterBuildLib->type = (CrafterBuildLib->target == "x86_64-w64-mingw32" || CrafterBuildLib->target == "x86_64-pc-windows-msvc")
|
||||
? ConfigurationType::LibraryDynamic
|
||||
: ConfigurationType::LibraryStatic;
|
||||
|
||||
crafterBuildLib->dependencies = { math, asset };
|
||||
crafterBuildLib->defines.push_back({"CRAFTER_BUILD_HAS_ASSET", ""});
|
||||
|
||||
CrafterBuildLib->dependencies = { math, asset };
|
||||
CrafterBuildLib->defines.push_back({"CRAFTER_BUILD_HAS_ASSET", ""});
|
||||
{
|
||||
std::array<fs::path, 10> interfaces = {
|
||||
std::array<fs::path, 11> interfaces = {
|
||||
"interfaces/Crafter.Build",
|
||||
"interfaces/Crafter.Build-Shader",
|
||||
"interfaces/Crafter.Build-Platform",
|
||||
|
|
@ -41,10 +42,11 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
"interfaces/Crafter.Build-External",
|
||||
"interfaces/Crafter.Build-Clang",
|
||||
"interfaces/Crafter.Build-Test",
|
||||
"interfaces/Crafter.Build-Lint",
|
||||
"interfaces/Crafter.Build-Progress",
|
||||
"interfaces/Crafter.Build-Asset",
|
||||
};
|
||||
std::array<fs::path, 9> implementations = {
|
||||
std::array<fs::path, 10> implementations = {
|
||||
"implementations/Crafter.Build-Shader",
|
||||
"implementations/Crafter.Build-Platform",
|
||||
"implementations/Crafter.Build-Interface",
|
||||
|
|
@ -52,12 +54,13 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
"implementations/Crafter.Build-External",
|
||||
"implementations/Crafter.Build-Clang",
|
||||
"implementations/Crafter.Build-Test",
|
||||
"implementations/Crafter.Build-Lint",
|
||||
"implementations/Crafter.Build-Progress",
|
||||
"implementations/Crafter.Build-Asset",
|
||||
};
|
||||
crafterBuildLib->GetInterfacesAndImplementations(interfaces, implementations);
|
||||
CrafterBuildLib->GetInterfacesAndImplementations(interfaces, implementations);
|
||||
}
|
||||
ExternalDependency& glslang = crafterBuildLib->externalDependencies.emplace_back();
|
||||
ExternalDependency& glslang = CrafterBuildLib->externalDependencies.emplace_back();
|
||||
glslang.name = "glslang";
|
||||
glslang.source.url = "https://github.com/KhronosGroup/glslang.git";
|
||||
glslang.source.branch = "main";
|
||||
|
|
@ -66,7 +69,7 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
// mingw cross-build: skip the standalone executable. We only consume the
|
||||
// libraries, and glslang.exe pulls in libgcc_eh which needs pthread that
|
||||
// mingw-w64 doesn't link by default.
|
||||
if (crafterBuildLib->target == "x86_64-w64-mingw32") {
|
||||
if (CrafterBuildLib->target == "x86_64-w64-mingw32") {
|
||||
glslang.options.push_back("-DENABLE_GLSLANG_BINARIES=OFF");
|
||||
}
|
||||
glslang.includeDirs = { "" };
|
||||
|
|
@ -78,7 +81,7 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
cfg.outputName = "crafter-build";
|
||||
ApplyStandardArgs(cfg, args);
|
||||
cfg.type = ConfigurationType::Executable;
|
||||
cfg.dependencies = { crafterBuildLib.get() };
|
||||
cfg.dependencies = { CrafterBuildLib.get() };
|
||||
{
|
||||
std::array<fs::path, 0> interfaces = {};
|
||||
std::array<fs::path, 1> implementations = { "implementations/main" };
|
||||
|
|
@ -90,35 +93,42 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
}
|
||||
if (cfg.target == "x86_64-w64-mingw32" || cfg.target == "x86_64-pc-windows-msvc") {
|
||||
// winsock for the -r wasm port probe (bind/WSAStartup).
|
||||
crafterBuildLib->linkFlags.push_back("-lws2_32");
|
||||
CrafterBuildLib->linkFlags.push_back("-lws2_32");
|
||||
}
|
||||
|
||||
// Self-tests link the local crafter-build library and exercise it in
|
||||
// process. The harness (whichever crafter-build invokes `test`) compiles
|
||||
// these against the *installed* share/crafter-build .cppm files, then
|
||||
// links each test exe against crafterBuildLib built from the local
|
||||
// links each test exe against CrafterBuildLib built from the local
|
||||
// sources — so the code under test is whatever's in this checkout.
|
||||
// Mirrors how downstream consumers link their own libraries into tests.
|
||||
if (cfg.target == "x86_64-pc-linux-gnu") {
|
||||
cfg.AddTest("HelloWorld").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("StaticLib").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("ModuleInterface").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("DependencyLink").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("ShaderCompile").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("StandardArgs").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("TestRunnerSpec").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("VariantId").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("WasiBrowserRuntime").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("WasmVariants").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("RunSingleTestExit").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("HelloWorld").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("StaticLib").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("ModuleInterface").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("DependencyLink").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("ShaderCompile").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("StandardArgs").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("TestRunnerSpec").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("VariantId").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("WasiBrowserRuntime").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("WasmVariants").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("RunSingleTestExit").Dependencies({ CrafterBuildLib.get() });
|
||||
// LoadProject dlopens the synthesized project.so, which references
|
||||
// Crafter:: symbols (HostTarget, Configuration ctors) that have to be
|
||||
// visible from the test exe — same wiring crafter-build itself uses
|
||||
// for project.so.
|
||||
cfg.AddTest("ConcurrentCacheRace").Dependencies({ crafterBuildLib.get() })
|
||||
cfg.AddTest("ConcurrentCacheRace").Dependencies({ CrafterBuildLib.get() })
|
||||
.LinkFlag("-Wl,--export-dynamic").LinkFlag("-ldl");
|
||||
cfg.AddTest("ConcurrentDependencyReset").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("ConcurrentDependencyReset").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("Lint").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("HouseRules").Dependencies({ CrafterBuildLib.get() });
|
||||
}
|
||||
|
||||
// Dogfood: this repo's house-style rules (see lint-rules.h). Report
|
||||
// rules gate `crafter-build lint`; transform rules also auto-fix under
|
||||
// `crafter-build format`.
|
||||
ProjectLint::AddProjectLintRules(cfg);
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue