Skip to content

beta-v2.0.0

Pre-release
Pre-release

Choose a tag to compare

@ChaseSunstrom ChaseSunstrom released this 11 May 03:20
· 84 commits to master since this release

CForge Release beta-v2.0.0

Summary

CForge v2.0.0-beta marks the next evolution of our build system—now implemented in modern C and C++ after an interim Rust rewrite. This change brings tighter integration with existing C/C++ codebases, lower memory overhead, and more direct control over platform-specific optimizations. You’ll still get the revamped cforge.toml syntax, first-class workspace support, smarter dependency resolution, and built-in testing/packaging hooks. We’ve stabilized core features and look forward to your feedback on the new native plugin API.


Highlights

  • Native C & C++ Core
    After experimenting with Rust, we’ve re-implemented CForge’s engine in C and C++ for seamless integration with your tooling and faster startup times.

  • Consistent Config with cforge.toml
    Same clean, TOML-based layout for dependencies, build options, tests, and packaging metadata (although updated settings).

  • Plugin System (Native API)
    Fully C/C++-based plugin interface—write plugins that link directly against CForge without any FFI layers.

  • Workspace Management
    Multi-crate/workspace support remains, with per-package overrides and unified commands:

    cforge build
    cforge test
    cforge package
  • Integrated Testing & Packaging
    Declare your tests and packaging rules right in cforge.toml—no external scripts needed.


New Features

1. Smarter Dependency Resolution

  • Unified handling of vcpkg, Git, and system libraries in a single pass
  • On-disk caching for offline or containerized builds

2. Parallel & Incremental Builds

  • Change detection to rebuild only what’s necessary
  • Parallel job scheduling guided by CPU count (--jobs)

3. Enhanced CLI

  • Verbosity control with -v, (verbose) and -q (quiet)
  • cforge clean for environment and config diagnostics

4. Built-in Test Runner

  • Execute unit and integration tests via cforge test
  • Filter tests by name or tags for targeted runs

Migration Guide

  1. Install v2.0.0-beta

    .\scripts\bootstrap.ps1
  2. Update cforge.toml

    • Rename [deps][dependencies]
    • Relocate build flags under [build]
  3. Re-initialize Workspace (if needed)

    cforge workspace init
  4. Clean & Build

    cforge clean
    cforge build

Performance Improvements

  • Cold builds up to 50% faster thanks to minimal startup overhead in C/C++
  • Warm rebuilds often complete in <1 s on mid-sized projects

Known Issues

  • Plugin API still evolving—possible breaking changes before stable 1.0.0
  • Windows MSI installer coming soon; use bootstrap scripts for now
  • Occasional lockfile contention on network drives


Updated cforge.toml and cforge.workspace.toml syntax

cforge.toml

[project]
name = "cforge"
version = "2.0.0"
description = "A C/C++ build tool with dependency management"
cpp_standard = "17"
binary_type = "executable"
authors = ["Chase Sunstrom <casunstrom@gmail.com>"]
homepage = "https://github.com/ChaseSunstrom/cforge"
repository = "https://github.com/ChaseSunstrom/cforge.git"
license = "MIT"

[build]
build_type = "Debug"
directory = "build"
source_dirs = ["src"]
include_dirs = ["include"]

[build.config.debug]
defines = ["DEBUG=1", "FMT_HEADER_ONLY=ON"]
flags      = ["DEBUG_INFO", "NO_OPT"]

[build.config.release]
defines    = ["NDEBUG=1", "FMT_HEADER_ONLY=ON"]
flags      = ["OPTIMIZE"]

[test]
enabled = true

[package]
enabled = true
generators = ["ZIP", "TGZ", "DEB"]
vendor = "Chase Sunstrom"
contact = "Chase Sunstrom <casunstrom@gmail.com>"

[dependencies]
directory = "vendor"

[dependencies.git]
tomlplusplus = { url = "https://github.com/marzer/tomlplusplus.git", tag = "v3.4.0" }
fmt = { url = "https://github.com/fmtlib/fmt.git", tag = "11.1.4" }

cforge.workspace.toml

[workspace]
name = "workspace"
description = "A C++ workspace created with cforge"

# Projects in legacy format: name:path:is_startup_project
# projects = [
#  "proj1:proj1:true",
#  "proj2:proj2:false",
#  "proj3:proj3:false"
# ]

[[workspace.project]]
name = "proj1"
# optional path
# path = "projects/proj1"
startup = true

[[workspace.project]]
name = "proj2"
startup = true

[[workspace.project]]
name = "proj3"
startup = false

# Main project is the first project
main_project = "proj1"

Acknowledgments

Thanks to our early testers, GitHub contributors, and everyone filing issues and PRs. Your feedback has been invaluable in shaping CForge’s C/C++ core into a faster, more flexible tool.


Download v2.0.0-beta today and join us on GitHub Discussions—or file an issue if you hit any bugs or have feature ideas. Happy building!