Skip to content

dexoron/dcr

Repository files navigation

DCR (Dexoron Cargo Realization)

DCR is a utility for managing C/C++ projects in a Cargo-like style.

The current implementation is written in Rust.

Why DCR

  • Unified project structure without manual setup
  • Simple commands for common tasks
  • Transparent compilation and predictable build profiles

Features

  • Create a new project or initialize the current directory
  • Build a project with debug and release profiles
  • Run the compiled binary
  • Clean build artifacts
  • Generate a minimal C project template
  • Build static and shared libraries
  • ASM projects with NASM/GAS or via GCC/Clang
  • Update the binary via dcr --update (GitHub Releases, not for pacman/AUR installs)

Supported Platforms

  • Linux: x86_64-unknown-linux-gnu
  • macOS Intel: x86_64-apple-darwin
  • macOS Apple Silicon: aarch64-apple-darwin
  • Windows: x86_64-pc-windows-msvc

Installation

Package Manager

Arch Linux

yay -S dcr # or paru and other AUR package managers

From Source

git clone https://github.com/dexoron/dcr.git
cd dcr
cargo build --release
mkdir -p ~/.local/bin
ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr

Via install.sh (Linux/macOS)

curl -fsSL https://dcr.dexoron.su/install.sh | bash

Via install.ps1 (Windows)

irm https://dcr.dexoron.su/install.ps1 | iex

When executed, both scripts ask whether to:

  • download a prebuilt binary from GitHub Releases
  • or build the project from git

Release assets:

  • dcr-x86_64-unknown-linux-gnu
  • dcr-x86_64-apple-darwin
  • dcr-aarch64-apple-darwin
  • dcr-x86_64-pc-windows-msvc.exe

Update

  • If DCR was installed from GitHub release assets, install.sh, install.ps1, or built manually:
    • use dcr --update
  • If DCR is installed via pacman/AUR:
    • update with your package manager: paru/yay -Syu dcr or sudo pacman -Syu dcr
    • dcr --update detects package-managed installs and asks you to update via package manager

Quick Start

Create a new project: dcr new hello

Or initialize the current directory (the directory must be empty): dcr init

Project structure:

hello/
- src/
- - main.c
- dcr.toml

Build and run the project: dcr run or dcr run --release

Commands

dcr new <name>

Creates a project with the specified name in the current directory.

dcr init

Creates a project in the current directory. The project name is taken from the directory name. The directory must be empty.

dcr build [profile]

Builds the project. If no profile is specified, --debug is used.

dcr run [profile]

Builds the project and runs the binary. If no profile is specified, --debug is used.

Run manually: ./target/<profile>/<name>

dcr clean

Removes the target directory in the project root. Use dcr clean --all in a workspace root to clean all member projects.

Build Profiles

Two profiles are supported:

  • --debug (default) - built-in flags per compiler
  • --release - built-in flags per compiler

Custom flags can be added in dcr.toml via build.cflags and build.ldflags. You can also set build.target to override the output directory (profile-independent). You can set build.platform to pass -march=<platform> (GCC/Clang) or /arch:* (MSVC) where supported. Use build.kind = "staticlib" to build a static library instead of a binary. Use build.kind = "sharedlib" to build a shared library (.so/.dylib/.dll). dcr run is only for build.kind = "bin" and will fail for libraries.

Configuration

The main project file is dcr.toml.

Example dcr.toml:

[package]
name = "hello"
version = "0.1.0"

[build]
language = "c"
standard = "c11"
compiler = "clang"
# Optional platform hint
# platform = "x86_64"
# Optional custom flags
cflags = ["-Wall", "-Wextra"]
ldflags = ["-lm"]

[toolchain]
# Optional tool overrides:
# cc = "clang"
# cxx = "clang++"
# as = "as"
# ar = "ar"
# ld = "ld"

[dependencies]

Workspace example:

[workspace]
kernel = { path = "src/kernel", deps = ["core", "userspace"] }
core = { path = "src/core", deps = ["userspace"] }
userspace = { path = "src/userspace" }

Path dependencies are supported. DCR will resolve them on build and generate dcr.lock.

Incremental build note: object files are rebuilt when source .c/.cpp files change. Header dependency tracking is not implemented yet.

Requirements

  • Rust toolchain (rustc, cargo) - for building DCR from source
  • C compiler (clang, gcc, or 'cl'(msvc))

Releases

Releases are built automatically via GitHub Actions (.github/workflows/release.yml) when a tag matching v* is pushed.

License

See LICENSE.

About

DCR is a utility for managing C/C++ projects in a Cargo-like style.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors