Skip to main content

cabin_build/
lib.rs

1//! Backend-independent build planning for Cabin.
2//!
3//! This crate consumes a validated [`cabin_core::Package`] plus a
4//! resolved C/C++ toolchain (from `cabin-toolchain`) and produces a
5//! [`BuildGraph`] - a list of compile, archive, and link actions
6//! plus the metadata needed to write a Clang-style compilation
7//! database.
8//!
9//! The graph is intentionally backend-agnostic. `cabin-ninja` knows how to
10//! serialize it as `build.ninja` + `compile_commands.json`; future backends
11//! (e.g. a Bazel exporter, or a direct in-process executor) could consume
12//! the same structure.
13
14#![allow(
15    clippy::too_many_lines,
16    // Remaining hits are `field: Default::default()` in test graph
17    // fixtures, where clippy's typed-default suggestion is MaybeIncorrect.
18    clippy::default_trait_access
19)]
20
21pub mod check;
22pub mod clean;
23pub mod error;
24pub mod graph;
25pub mod link_diagnostics;
26pub mod planner;
27pub mod standard_compat;
28pub mod validate;
29
30// The toolchain-independent build IR and its dialect selector live in
31// `cabin-driver`; re-export the pieces that appear in this crate's
32// public surface (`BuildGraph`, `PlanRequest`) so consumers keep one
33// import path.  The lowering itself (`cabin_driver::lower`) is a
34// backend concern, consumed directly by `cabin-ninja`.
35pub use cabin_driver::{
36    ArchiveAction, BuildAction, CompileAction, CompileArguments, CompileMode, Dialect, LinkAction,
37};
38pub use check::into_check_graph;
39pub use error::{BuildError, FeatureGateFix};
40pub use graph::{BuildGraph, CompileCommand, StandardViolation};
41pub use planner::{
42    ManifestTargetSelector, PlanRequest, plan, select_targets_of_kind,
43    selector_required_features_met,
44};
45pub use standard_compat::{
46    DeclScope, DeclSite, EdgeRequirement, RequirementOrigin, StandardCompatViolation,
47};
48pub use validate::{
49    RequestedStandards, collect_requested_standards, msvc_external_includes_supported,
50    requested_standards_of, validate_planned_standards, validate_toolchain_for_backend,
51    validate_toolchain_standards,
52};