Build System and Dependencies
Relevant source files
This page documents the Cargo workspace structure, dependency management, and local build configuration for the axconfig-gen repository. It covers the multi-crate workspace organization, external dependency requirements, and the build process for both CLI tools and procedural macros.
For information about testing procedures, see Testing. For details about continuous integration workflows, see Continuous Integration.
Workspace Structure
The axconfig-gen repository is organized as a Cargo workspace containing two primary crates that work together to provide configuration processing capabilities.
Workspace Configuration
The workspace is defined in the root Cargo.toml(L1 - L18) with resolver = "2" enabling the newer dependency resolver. This configuration establishes shared metadata across all workspace members including version 0.2.1, Rust edition 2021, and a minimum Rust version requirement of 1.76.
flowchart TD
subgraph subGraph2["Cargo Workspace"]
ROOT["Cargo.tomlresolver = '2'"]
subgraph subGraph1["Shared Metadata"]
VER["version = '0.2.1'"]
ED["edition = '2021'"]
RUST["rust-version = '1.76'"]
LIC["GPL-3.0 OR Apache-2.0 OR MulanPSL-2.0"]
end
subgraph subGraph0["Workspace Members"]
AXGEN["axconfig-genCLI tool & library"]
AXMAC["axconfig-macrosProcedural macros"]
end
end
ROOT --> AXGEN
ROOT --> AXMAC
ROOT --> ED
ROOT --> LIC
ROOT --> RUST
ROOT --> VER
Workspace Member Dependencies
The workspace defines an explicit dependency relationship where axconfig-macros depends on axconfig-gen, allowing the procedural macros to reuse the core configuration processing logic.
Sources: Cargo.toml(L1 - L18) Cargo.lock(L56 - L71)
Dependency Architecture
The project maintains a clean separation between CLI/library functionality and macro functionality through its dependency structure.
Core Dependencies by Crate
| Crate | Direct Dependencies | Purpose |
|---|---|---|
| axconfig-gen | clap,toml_edit | CLI argument parsing and TOML manipulation |
| axconfig-macros | axconfig-gen,proc-macro2,quote,syn | Procedural macro infrastructure and core logic reuse |
External Dependency Graph
flowchart TD
subgraph subGraph3["axconfig-macros Dependencies"]
AXMAC["axconfig-macrosv0.2.1"]
PROC_MACRO2["proc-macro2v1.0.95"]
QUOTE["quotev1.0.40"]
SYN["synv2.0.102"]
end
subgraph subGraph2["axconfig-gen Dependencies"]
AXGEN["axconfig-genv0.2.1"]
CLAP["clapv4.5.40"]
TOML_EDIT["toml_editv0.22.27"]
subgraph subGraph1["toml_edit Dependencies"]
INDEXMAP["indexmap"]
TOML_DATETIME["toml_datetime"]
WINNOW["winnow"]
end
subgraph subGraph0["clap Dependencies"]
CLAP_BUILDER["clap_builder"]
CLAP_DERIVE["clap_derive"]
ANSTREAM["anstream"]
end
end
AXGEN --> CLAP
AXGEN --> TOML_EDIT
AXMAC --> AXGEN
AXMAC --> PROC_MACRO2
AXMAC --> QUOTE
AXMAC --> SYN
CLAP --> CLAP_BUILDER
CLAP --> CLAP_DERIVE
TOML_EDIT --> INDEXMAP
TOML_EDIT --> TOML_DATETIME
TOML_EDIT --> WINNOW
Key Dependency Roles
clap(v4.5.40): Provides command-line argument parsing with derive macros for the CLI interfacetoml_edit(v0.22.27): Enables TOML document parsing and manipulation while preserving formattingproc-macro2(v1.0.95): Low-level procedural macro token stream manipulationquote(v1.0.40): Template-based Rust code generation for macro expansionsyn(v2.0.102): Rust syntax tree parsing for macro input processing
Sources: Cargo.lock(L56 - L61) Cargo.lock(L64 - L71) Cargo.lock(L74 - L81) Cargo.lock(L207 - L216)
Build Process and Requirements
Environment Requirements
The project requires Rust 1.76 or later as specified in Cargo.toml(L17) This minimum version ensures compatibility with the procedural macro features and dependency requirements used throughout the codebase.
Build Commands
| Command | Purpose | Output |
|---|---|---|
| cargo build | Build all workspace members | Target binaries and libraries |
| cargo build --bin axconfig-gen | Build only CLI tool | target/debug/axconfig-gen |
| cargo build --release | Optimized build | Release binaries intarget/release/ |
| cargo install --path axconfig-gen | Install CLI globally | System-wideaxconfig-gencommand |
Build Flow
flowchart TD
subgraph subGraph3["Build Process"]
START["cargo build"]
subgraph subGraph2["Output Generation"]
BIN["target/debug/axconfig-genexecutable"]
LIB["libaxconfig_gen.rliblibrary"]
PROC["libaxconfig_macros.soproc-macro"]
end
subgraph subGraph1["Workspace Compilation"]
AXGEN_BUILD["Compile axconfig-genCLI + library"]
AXMAC_BUILD["Compile axconfig-macrosproc-macros"]
end
subgraph subGraph0["Dependency Resolution"]
LOCK["Cargo.lockdependency versions"]
FETCH["Download & compileexternal dependencies"]
end
end
AXGEN_BUILD --> AXMAC_BUILD
AXGEN_BUILD --> BIN
AXGEN_BUILD --> LIB
AXMAC_BUILD --> PROC
FETCH --> AXGEN_BUILD
LOCK --> FETCH
START --> LOCK
Cross-Crate Compilation Order
The build system automatically handles the dependency order, compiling axconfig-gen first since axconfig-macros depends on it. This ensures the library interface is available during procedural macro compilation.
Sources: Cargo.toml(L4 - L7) Cargo.lock(L56 - L71)
Development Dependencies
Transitive Dependency Analysis
The Cargo.lock(L1 - L317) reveals a total of 31 crates in the complete dependency tree. Key transitive dependencies include:
- Windows Support:
windows-sysand related platform-specific crates for cross-platform CLI functionality - String Processing:
unicode-ident,memchr,utf8parsefor robust text handling - Data Structures:
hashbrown,indexmapfor efficient key-value storage in TOML processing
Licensing Compatibility
The workspace uses a tri-license approach: GPL-3.0-or-later OR Apache-2.0 OR MulanPSL-2.0 as specified in Cargo.toml(L13) All external dependencies maintain compatible licensing terms, ensuring legal compliance for distribution.
Version Management
The workspace employs pinned versions in Cargo.lock(L1 - L317) to ensure reproducible builds across different environments. Major dependency versions are:
- CLI ecosystem:
clap4.x series with stable API - TOML processing:
toml_edit0.22.x with advanced editing capabilities - Macro ecosystem:
proc-macro2,quote,syn1.x/2.x series with mature APIs