diff --git a/docs-crowdin-export/de-DE/docs/README.mdx.mdx b/docs-crowdin-export/de-DE/docs/README.mdx.mdx new file mode 100644 index 0000000..f00c04a --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/README.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Introduction +--- + +# DCR — C/C++ Build Tool & Package Manager + +
+Quick reference + +```bash +# Installation +curl -fsSL https://dcr.dexoron.su/install.sh | sh + +# Create a project +dcr new my-app +cd my-app + +# Build and run +dcr build +dcr run + +# Run tests +dcr test + +# Add a dependency +dcr add fmt + +# Generate IDE files +dcr gen vscode +``` + +
+ +## Contents + +| Section | Description | +| ----------------------------------------------------- | --------------------------------------------- | +| [Getting Started](/docs/getting-started/installation) | Installation and first steps | +| [Commands](/docs/commands/project-commands) | All CLI commands | +| [Reference](/docs/reference/dcr-toml) | Configuration, build, dependencies, platforms | +| [Testing](/docs/testing/test-framework) | Built-in test framework | +| [Recipes](/docs/recipes/cross-to-windows) | Common scenarios | +| [IDE Integration](/docs/ide-integration) | VS Code, CLion, compile_commands.json | +| [Self Update](/docs/self-update) | Auto-update | +| [FAQ](/docs/faq) | Frequently asked questions | +| [Changelog](/docs/changelog) | Version history | +| [License](/docs/license) | DCR and vendored library licenses | +| [Contributing](/docs/contributing) | DCR development | + +## Features + +* **Incremental builds** — mtime + `.d` headers + SHA256 fingerprint +* **Parallel compilation** — thread::scope, atomic task queue +* **7 backends** — gcc/clang (unix_cc), MSVC/clang-cl (msvc), GAS, NASM, MASM, FASM, LLVM IR +* **8 project kinds** — bin, staticlib, sharedlib, efi, elf, none, custom, flat-bin +* **Disk images** — optional `[archive]` packs FAT12/16/32 images after build +* **Cross-compilation** — short names and full triples +* **Profiles** — debug / release with field overrides +* **Workspaces** — multi-package projects with topological sort +* **Registry + Git + Path** — three dependency mechanisms +* **IDE generation** — VS Code, CLion, compile_commands.json, JSON metadata +* **pkg-config** — automatic system library discovery +* **Per-command `--help`** — `dcr build --help`, `dcr new --help`, etc. +* **Man pages** — `man dcr`, `man dcr-build`, `man dcr-new` diff --git a/docs-crowdin-export/de-DE/docs/changelog.mdx.mdx b/docs-crowdin-export/de-DE/docs/changelog.mdx.mdx new file mode 100644 index 0000000..6f494b7 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/changelog.mdx.mdx @@ -0,0 +1,193 @@ +--- +sidebar_label: Changelog +--- + +# Changelog + +## 0.8.1 (2026-07-20) + +### Added + +* **`build.kind = "flat-bin"`** — raw binary (default `.bin`) for OS-dev payloads: + * **NASM** — `-f bin` → `\.bin` + * **FASM** — direct output (`format binary` in source) + * **GAS / MASM / LLC** — object → `objcopy -O binary` → `\.bin` + * **C/C++** — objects → freestanding link → `objcopy -O binary` → `\.bin` + * Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit +* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths. +* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory. + +### Changed + +* **`--force`** also re-runs `build.steps` and `build.post_steps`. +* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member. + +### Dependencies + +* `fatfs = "0.3"` for FAT image packing. + +## 0.8.0 (2026-07-18) + +### Added + +* **Dedicated Build Engine (`src/core/build/engine.rs`)** — decoupled the build orchestration logic completely from the CLI front-end wrapper in `src/cli/build.rs` to a reusable, decoupled core build engine. +* **Polymorphic Language Model (`Language` trait)** — introduced the abstract `Language` trait (`src/core/build/language/mod.rs`). File scanning, compiler resolution, and flags handling are now encapsulated in dedicated language modules for C, C++ (including Qt code generation), LLVM IR, and ASM (GAS, NASM, FASM, MASM). +* **Polymorphic Compilation Dispatch (`Builder` trait)** — introduced the `Builder` trait to generalize builder invocations (`src/core/build/builder/mod.rs`). Consolidated GCC/Clang logic into `builder/cc_common.rs` and Microsoft Visual C++ logic into `builder/msvc/`. +* **Per-Language Configuration overrides (`[build.\]`)** — introduced support for configuring language-specific compiler, standard, and flags (e.g. `[build.c]`, `[build.cxx]`, `[build.asm]`) independently in `dcr.toml`. +* **Automatic Workspace Dependency Injection** — during workspace builds, include/lib paths of dependent workspace members (including their source headers, local `include/` folders, and build target `target/include` / `target/lib` folders) are automatically resolved and injected. +* **`BuildReporter` Event System** — decoupled build orchestration output into a structured event-driven reporter model (`src/core/build/report.rs`), making DCR suitable for library embedding and IDE integrations without stderr capturing. +* **Build Cancellation Support** — introduced thread-safe cancellation tokens (`Arc\`) allowing clients to safely abort compile runs mid-execution. +* **TOML Formatting & Custom Keys Preservation** — migrated the config editor to `toml_edit`, preserving all unknown/user-defined TOML keys, structures, and comments during file write operations (e.g., in `dcr add`). +* **Path Dependencies Target Include Resolution** — local path dependencies configured via tables now correctly expose headers built and packaged into their `target/include` folder to consumer packages. +* **Modular Integration Test Suite** — refactored the monolith `tests/cli_basic.rs` file into clean, specialized integration tests: `cli_build.rs`, `cli_deps.rs`, `cli_lint.rs`, `cli_new.rs`, `cli_qt.rs`, `cli_test.rs`, `cli_workspace.rs`. + +### Changed + +* **Consolidated Linking and Archiving** — artifact generation (linking executables/shared libraries and archiving static libraries) consolidated into a single `src/core/build/builder/artifact.rs` module. +* **Workspace-Aware member execution** — `dcr run` executed at the workspace root of a `workspace_only` project now triggers the member build inside the workspace context using the `--workspace` parameter, preventing standalone build issues. +* **Elimination of Global State** — removed global variables and states from the build core, encapsulating build logic inside isolated `BuildContext` structs for thread safety. +* **Build Cache Separation** — relocated mtime tracking, incremental caching, and header-dependency checking logic to `src/core/build/cache.rs`. +* **Modularized Pre-build Steps** — decoupled generator scripts and pre-build commands parsing into `src/core/build/steps.rs`. + +## 0.7.4 (2026-06-17) + +### Added + +* **Native Qt support** — automatic meta-object handling (MOC, UIC, RCC) added when `build.qt = true` is set in `dcr.toml`. +* **`dcr lint` command** — C/C++ static analysis via `clang-tidy`. Supports `--fix` for automatic fixes. Respects `build.roots` and `build.src_disable` from config. +* **Three new assembler backends**: + * **MASM** (`compiler = "ml"` / `"ml64"`) — Microsoft Macro Assembler. + * **FASM** (`compiler = "fasm"`) — Flat Assembler. + * **LLVM IR** (`compiler = "llc"`) — compiles `.ll` files via `llc -filetype=obj`. +* **Shared ASM pipeline** — linking and archiving logic consolidated into `core/builder/asm.rs`. Adding a new assembler backend now takes ~30 lines. +* **Filesystem utilities** — `to_hex()` and `home_dir()` extracted to `utils/fs.rs`. +* **Build utilities** — `normalize_target()`, `normalize_kind()`, `normalize_platform()`, `default_profile_flags()` extracted to `utils/build.rs`. +* **Backend helpers** — `asm_lang_flag()`, `source_extensions()`, `elapsed_secs()` added to `core/builder/common.rs`. +* **Full Bare-Metal / Freestanding Automation** — introduced the `build.freestanding = true` configuration option. When enabled (or when a bare-metal target is detected), DCR automatically injects `-ffreestanding` during compilation and both `-nostdlib` and `-static` during linking. +* **Artifact Optimization (LTO & Strip)** — added `build.lto` (auto-injects `-flto` for compiler and linker) and `build.strip` (automatically strips debug symbols via linker `-s` flag) options to `dcr.toml`. +* **Compilation Thread Control** — added the `build.codegen-units` option to strictly limit the maximum number of parallel jobs utilized by the custom `parallel_build` worker pool. +* **Panic Behavior Management** — added `build.panic = "abort"` support. For C++ targets, it automatically strips exception handling and unwind tables via `-fno-exceptions`, `-fno-unwind-tables`, and `-fno-asynchronous-unwind-tables`. + +### Changed + +* **Intelligent Default Flags Generation** — automated injection of fallback optimization (`-O3`/`-O0`), debug (`-g`), and warning (`-Wall -Wextra`) flags is now suppressed for bare-metal and freestanding builds if `build.cflags` are overridden. +* **Centralized Bare-Metal Detection** — relocated the `is_bare_metal_target` helper to common build utilities (`src/utils/build.rs`) for unified access across the building core. +* **Architectural Refactoring**: + * Renamed `src/config.rs` to `src/templates.rs`. + * Started consolidation of configuration and build orchestration logic. + +## 0.7.3 (2026-06-13) + +### Added + +* **`--vcs` option for `new` and `init` commands** — introduced explicit version control system selection via `--vcs \`. +* **Git metadata integration in `--version`** — the CLI now appends the current short commit hash and a `-dirty` suffix if there are uncommitted changes in the DCR repository. +* **Automatic `.gitignore` generation** — Git repository initialization now automatically writes a `.gitignore` file excluding the `/target` directory. +* **Nested repository prevention** — automatic Git initialization is now skipped if `dcr new` or `dcr init` is executed inside an already existing Git repository. +* **VCS verification tests** — added `new_vcs_options_work` and `init_vcs_options_work` integration tests to ensure reliable repository behavior. + +### Changed + +* **Complete removal of `git2` dependency** — all Git actions (dependency fetching, VCS setup, status checks) are now delegated to the system `git` executable via `Command`. This simplifies compilation and drops the need for `vendored` and `openssl` features. +* **Migrated from `reqwest` to `ureq`** — replaced the heavy `reqwest` crate in `flag_update.rs` with the lightweight synchronous `ureq 2.10` client, reducing overhead and the final binary size. + +## 0.7.2 (2026-06-07) + +### Added + +* `default_target_triple()` now respects `target_env` — Linux (gnu/musl) and Windows (msvc/gnu) use the correct environment instead of hardcoded values. + +### Fixed + +* **macOS Apple Silicon builds failed with `_main` undefined** — `--target=` is now passed to ldflags, not just cflags. `default_target_triple()` uses `std::env::consts::ARCH` on macOS instead of hardcoded `x86_64`. +* **GitHub Stars and GPL-3.0 badges not rendering in README** — badge block converted to pure HTML. + +### Changed + +* Default target resolution extracted into shared `default_target_triple()` — removed duplication across build, run, clean. + +## 0.7.1 (2026-06-02) + +### Added + +* **`--help` for all commands** — `dcr build --help`, `dcr run --help`, `dcr new --help`, + `dcr init --help`, `dcr clean --help`, `dcr add --help`, `dcr fmt --help`, + `dcr setup --help`, `dcr tree --help`, `dcr gen --help`, `dcr --update --help`, + `dcr test --help`. All output uses styled headers (green) and usage lines (cyan). +* **Man pages** — 12 troff pages in `man/man1/`: `dcr.1`, `dcr-build.1`, + `dcr-run.1`, `dcr-new.1`, `dcr-init.1`, `dcr-clean.1`, `dcr-add.1`, `dcr-test.1`, + `dcr-gen.1`, `dcr-fmt.1`, `dcr-tree.1`, `dcr-setup.1`. +* **Man pages in all packaging** — install.sh, install_bsd.sh, AUR PKGBUILD, + Debian (cargo-deb), RPM (cargo-generate-rpm), Nix (postInstall), Homebrew + (resource), Snap, GitHub Release assets. +* **Project name validation** — `dcr init` and `dcr new` now validate names before + creating files. Only ASCII letters, digits, `_` and `-` are allowed. +* **`documentation` and `homepage` fields** — added to `Cargo.toml`. +* **Release profile optimizations** — `opt-level = "z"`, LTO, `codegen-units = 1`, + `panic = "abort"`, `strip = true` for smaller binaries. +* **Linux i686, armv7, riscv64 targets** — added to release workflow and install scripts. +* **Linux musl i686, armv7 targets** — cross-compiled via zigbuild in CI. +* **AUR packages** — `dcr-dev`, `dcr-dev-bin` publishing workflow. +* **Snap publishing** — automated Snapcraft publishing in CI. +* **Snap badge** — in README. + +### Changed + +* **`validate_package_name` made public** — callable from CLI commands. +* **README platform table** — reorganized: libc variants as separate OS rows, + removed extra columns. Linux architecture list updated. +* **`gen.rs` no-args output** — now uses styled output instead of raw `eprintln!`. +* **`tree.rs`, `fmt.rs`, and `setup.rs`** — now accept arguments for `--help`. +* **README install commands** — `| bash` → `| sh` for POSIX compatibility. + +### Fixed + +* **`dcr new \` creates directory then fails** — validation now + happens before any file operations. +* **`dcr init` on invalid directory name** — same fix. +* **Man pages missing in installed packages** — now shipped in all formats. +* **Windows drive letter false positive** — in dependency file parser. +* **CRLF (`\r\n`) breaks dependency parser** — now handles mixed line endings. +* **Newline after backslash not consumed** — in `parse_d_file` escape handling. + +## 0.7.0 (2026-06-01) + +### Added + +* **OpenBSD and NetBSD target support** — full platform routing with dynamic target triples using `std::env::consts::ARCH` and `std::env::consts::OS`. Affects `build`, `run`, `clean` commands and the platform module. +* **`src/platform/bsd.rs`** — new BSD platform module (shared by FreeBSD, OpenBSD, NetBSD) providing `bin_path`, `lib_path`, `elf_path`, `efi_path`, `shared_lib_path`. +* **`build.out_dir` config option** — custom output directory that overrides the default `target/\/\` path for final artifacts. Supported in `build`, `run`, and config validation. +* **`dcr fmt` command** — new CLI command that formats all C/C++ source files (`*.c`, `*.cpp`, `*.h`, `*.hpp`) in `src/` and `tests/` using `clang-format`. +* **Incremental linking** — `needs_link()` in `common.rs` checks if any object file is newer than the linked output, skipping unnecessary relinking. Implemented for all backends (`unix_cc`, `msvc`, `gas`, `nasm`). +* **`build.kind = "none"` and `"custom"`** — two new project kinds for special build scenarios that don't produce standard artifacts. +* **`install_bsd.sh`** — POSIX-compliant installation script for BSD systems (FreeBSD, OpenBSD, NetBSD) with binary download and source build modes. +* **Linux ARM64 support in `install.sh`** — added `Linux:aarch64|Linux:arm64` target detection for pre-built binary downloads. +* **BSD OS detection in `install.sh`** — detects FreeBSD, OpenBSD, NetBSD and determines target triple. +* **`rust-toolchain.toml`** — explicit toolchain pinning to `stable` channel. +* **Integration tests** — `build_with_target_config` (verifies `build.target = "linux"`) and `build_with_out_dir` (validates custom output directory). +* **`get_build_string_with_profile` made `pub`** — so `run.rs` can determine custom output directory configuration. + +### Changed + +* **`build.target` semantics changed** — now strictly contains a target triple (e.g., `x86_64-unknown-linux-gnu`) or short name (`linux`, `macos`, `windows`). No longer used as custom output directory — this functionality moved to `build.out_dir`. +* **`build.standard` made optional** — changed from `String` to `Option\`. Validation only enforces non-empty for non-ASM languages. Skipped in `dcr.toml` output if empty. +* **`dcr run` with `out_dir`** — now determines target directory respecting `build.out_dir` via `get_build_string_with_profile()` from `build.rs`. +* **`collect_sources()` returns empty vector** instead of error when no sources are found, allowing `kind = "none"` or `kind = "custom"` projects with no source files. +* **CI/CD release workflow refactored** — `git2` made target-specific (no vendored-openssl on Windows), Zig-based cross-compilation for non-x86_64 Linux targets, Arch Linux package version cleanup (dashes → dots), `gmake` symlink for NetBSD. +* **README compatibility table** — FreeBSD, OpenBSD, NetBSD build/run status upgraded from "community/best-effort" to "officially supported". +* **Documentation updated** — `build-section.md` describes new `build.target` and `build.out_dir` fields. `target-directory.md` rewritten to clarify the distinction. + +### Fixed + +* **stdout/stderr not inherited in `dcr run`** — child process output was captured and manually printed, breaking interactive programs. Fixed by switching to `Command::status()`. +* **Race condition in release CI** — matrix build jobs could upload assets to a release that didn't exist yet. Fixed by adding a dedicated `create-release` job. +* **Release GHA — stable toolchain override** — fixed Rust toolchain override issues in CI. +* **Arch Linux package version sanitization** — version strings with dashes (e.g., `0.7.0-dev`) are invalid for `pkgver`. Fixed by replacing dashes with dots. +* **GPG permissions after Docker** — Docker operations changed GPG directory ownership. Fixed by running `chown` after Docker commands. +* **RPM artifact paths** — RPM artifacts were placed in `rpm/x86_64/` instead of `fedora/x86_64/`. Fixed in Dexoron Packages Index workflow. +* **JSON parsing reliability in `install.sh`** — added `jq` as primary parser with `python3` fallback for dev channel release lookup. + +### Removed + +* **`format_roots()` helper function** — removed from `common.rs`. Was only used by the old error handling path in `collect_sources()`. +* **Per-distribution artifact download steps** — three separate `actions/download-artifact` steps replaced with unified `gh release download --clobber`. diff --git a/docs-crowdin-export/de-DE/docs/commands/build-commands.mdx.mdx b/docs-crowdin-export/de-DE/docs/commands/build-commands.mdx.mdx new file mode 100644 index 0000000..ad38d1a --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/commands/build-commands.mdx.mdx @@ -0,0 +1,47 @@ +--- +sidebar_label: Build commands (build, run, clean) +--- + +# Build Commands + +## `dcr build` + +Builds the project according to `dcr.toml`. + +```bash +dcr build # debug profile +dcr build --release # release build +dcr build --debug # explicit debug +dcr build --target aarch64-unknown-linux-gnu +dcr build --force # full rebuild (also re-runs build.steps / post_steps) +dcr build --clean # clean + build +dcr build --verbose # show compilation commands +dcr build --workspace pkg-a # build specific workspace package +``` + +Artifacts: `target/\/\/\` (Linux with explicit target). + +With `[archive]` in `dcr.toml`, a FAT disk image is packed after a successful build. + +## `dcr run` + +Builds (if sources are newer than artifacts) and runs the binary. + +```bash +dcr run +dcr run --release +dcr run --force # force rebuild then run +``` + +On a **workspace-only** root: if `[run].cmd` is set, that command is used after build; otherwise DCR delegates to a workspace member. + +## `dcr clean` + +Removes `target/` directory (or `target/\/\`). + +```bash +dcr clean +dcr clean --release # target/release/ only +dcr clean --target windows # target/x86_64-pc-windows-msvc/ +dcr clean --all # clean all workspace packages +``` diff --git a/docs-crowdin-export/de-DE/docs/commands/dependency-commands.mdx.mdx b/docs-crowdin-export/de-DE/docs/commands/dependency-commands.mdx.mdx new file mode 100644 index 0000000..4b5b982 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/commands/dependency-commands.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Dependency commands (add, tree) +--- + +# Dependency Commands + +## `dcr add \ [source]` + +Adds a dependency to `dcr.toml`. + +```bash +dcr add fmt # registry lookup +dcr add mylib ../path/to/lib # path as source +dcr add mylib path:./lib # explicit path prefix +dcr add mylib git:https://github.com/user/repo # explicit git prefix +dcr add mylib github:user/repo # GitHub shorthand +dcr add mylib gitlab:user/repo # GitLab shorthand +``` + +Source prefixes: + +* `path:` — local path +* `git:` — generic git URL +* `github:` — expands to `https://github.com/\/\` +* `gitlab:` — expands to `https://gitlab.com/\/\` +* `http://` / `https://` / `git@` — full URL + +Flags: + +* `--branch \` — git branch +* `--tag \` — git tag +* `--rev \` — git commit + +If source is omitted — DCR searches connected registries. + +## `dcr tree` + +Displays the project dependency tree. + +```bash +dcr tree +``` + +Example output: + +``` +my-app v0.1.0 +├── fmt (registry) +│ └── spdlog (registry) +└── catch2 (registry) +``` + +For path dependencies, recursively shows their own dependencies (from their `dcr.toml`). diff --git a/docs-crowdin-export/de-DE/docs/commands/gen-commands.mdx.mdx b/docs-crowdin-export/de-DE/docs/commands/gen-commands.mdx.mdx new file mode 100644 index 0000000..466b04c --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/commands/gen-commands.mdx.mdx @@ -0,0 +1,73 @@ +--- +sidebar_label: Gen commands (vscode, clion, ...) +--- + +# Gen Commands + +## `dcr gen \` + +Generates IDE integration files. + +### vscode + +```bash +dcr gen vscode +``` + +Creates: + +* `.vscode/tasks.json` — `build` task (dcr build) +* `.vscode/launch.json` — debug launch configuration +* `.vscode/settings.json` — C/C++ settings (clangd paths, includes) +* `.vscode/extensions.json` — recommended extensions (vscode-clangd, vscode-lldb) + +### clion + +```bash +dcr gen clion +``` + +Creates: + +* `.idea/externalTools.xml` — external tools (build, run, clean, test) +* `.idea/customTargets.xml` — custom build targets +* `.idea/misc.xml` — C/C++ project settings +* `.idea/runConfigurations/\.xml` — per-binary run configurations + +### compile-commands + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` — standard format for clangd, cpptools, static analyzers. + +### project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata: + +```json +[ + { + "name": "my-app", + "version": "0.1.0", + "root": "/path/to/project", + "profile": "debug", + "language": "c", + "standard": "c17", + "cxx_standard": null, + "compiler": "/usr/bin/clang", + "kind": "bin", + "sources": ["src/main.c"], + "include_dirs": ["src"], + "lib_dirs": [], + "libs": [], + "cflags": ["-std=c17", "-O0", "-g"], + "ldflags": [] + } +] +``` diff --git a/docs-crowdin-export/de-DE/docs/commands/project-commands.mdx.mdx b/docs-crowdin-export/de-DE/docs/commands/project-commands.mdx.mdx new file mode 100644 index 0000000..e5e4eb7 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/commands/project-commands.mdx.mdx @@ -0,0 +1,40 @@ +--- +sidebar_label: Project commands (new, init) +--- + +# Project Commands + +## `dcr new \` + +Creates a new project with a standard structure and `dcr.toml`. The `name` argument is required. + +Only ASCII letters, digits, underscores `_` and hyphens `-` are allowed in the project name. + +```bash +dcr new my-app +dcr new my-app --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +Generates: + +* `dcr.toml` with basic fields +* `src/main.c` with a `main` template + +## `dcr init` + +Initializes a DCR project in the current (empty) directory. + +```bash +dcr init +dcr init --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +The project name is taken from the current directory name. The directory name must follow the same naming rules as `dcr new`. diff --git a/docs-crowdin-export/de-DE/docs/commands/quality-commands.mdx.mdx b/docs-crowdin-export/de-DE/docs/commands/quality-commands.mdx.mdx new file mode 100644 index 0000000..cdfe503 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/commands/quality-commands.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Quality commands (test, fmt) +--- + +# Quality Commands + +## `dcr test` + +Runs tests. + +```bash +dcr test # debug profile +dcr test --release # release profile +dcr test --debug # explicit debug +dcr test --help # detailed help +``` + +Before first use, initialize tests: + +```bash +dcr test --init +``` + +This creates `tests/dcr_test.h` (framework) and `tests/test.c` (template). + +What `dcr test` does: + +1. Builds the project +2. Collects `tests/*.c` files (`.c` only, not `.cpp`) +3. Compiles and links each test file +4. Runs each test binary +5. Prints summary: TOTAL, PASS, SKIP, FAIL +6. Returns non-zero exit code on any FAIL + +## `dcr fmt` + +Formats C/C++ source files using `clang-format`. + +```bash +dcr fmt +``` + +Processes: `src/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}` and `tests/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}`. + +Uses `.clang-format` at the project root (if present), otherwise default clang-format style. + +## `dcr lint` + +Runs `clang-tidy` on C/C++ source files for static analysis. + +```bash +dcr lint # show diagnostics +dcr lint --fix # apply fixes automatically +dcr lint --help # detailed help +``` + +Processes: `src/**/*.{c,cpp,cxx,cc}` and `tests/**/*.{c,cpp,cxx,cc}`. + +Without `--fix`, clang-tidy reports warnings and errors without modifying files. +With `--fix`, clang-tidy applies automatic suggestions in place. diff --git a/docs-crowdin-export/de-DE/docs/commands/system-commands.mdx.mdx b/docs-crowdin-export/de-DE/docs/commands/system-commands.mdx.mdx new file mode 100644 index 0000000..ec99cf1 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/commands/system-commands.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: System commands (setup, --help, ...) +--- + +# System Commands + +## `dcr setup` + +Shows configured registries from `~/.dcr/config.toml`. + +```bash +dcr setup +``` + +If `~/.dcr/config.toml` is not found, DCR returns an error. Create it manually: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +## `dcr --help` + +Shows help for all commands. + +```bash +dcr --help +``` + +## `dcr --version` + +Shows version and target triple. + +```bash +dcr --version # dcr 0.7.0 (x86_64-unknown-linux-gnu) +``` + +## `dcr --update` + +Self-update. Downloads the latest release binary from GitHub Releases and replaces the current one. + +```bash +dcr --update +``` + +Features: + +* Auto-detects platform and architecture +* Warns if installed via AUR (use package manager instead) +* Works on Linux, macOS, Windows diff --git a/docs-crowdin-export/de-DE/docs/contributing.mdx.mdx b/docs-crowdin-export/de-DE/docs/contributing.mdx.mdx new file mode 100644 index 0000000..d422910 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/contributing.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: Contributing +--- + +# Contributing + +## Setup + +```bash +git clone https://github.com/dexoron/dcr +cd dcr +cargo build +``` + +## Code style + +All code must be formatted with `cargo fmt`: + +```bash +cargo fmt +``` + +## Linting + +```bash +cargo clippy --all-targets -- -D warnings +``` + +## Tests + +```bash +cargo test --all-targets +``` + +## PR process + +1. Fork the repository +2. Create a branch: `git checkout -b feature/description` +3. Make changes +4. Run `cargo fmt && cargo clippy && cargo test` +5. Open a Pull Request + +## CI + +CI runs: + +* `cargo fmt --check` +* `cargo clippy --all-targets -- -D warnings` +* `cargo check --all-targets --all-features` +* Build on Linux, macOS, Windows +* Integration tests (compilation check) diff --git a/docs-crowdin-export/de-DE/docs/faq.mdx.mdx b/docs-crowdin-export/de-DE/docs/faq.mdx.mdx new file mode 100644 index 0000000..4680f99 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/faq.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: FAQ +--- + +# FAQ + +## Registry not found + +``` +error: registry not found +``` + +**Solution:** Make sure `~/.dcr/config.toml` exists: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +And check `DCR_INDEX_PATH`: + +```bash +echo $DCR_INDEX_PATH +``` + +## Compiler not found + +``` +error: compiler not found +``` + +**Solution:** Ensure a compiler is installed and available in PATH. + +```bash +which gcc +which clang +``` + +Or specify explicitly via `[toolchain]` in `dcr.toml`. + +## Ctrl+C during build + +DCR handles SIGINT: interrupts the current compilation and exits with non-zero code. + +## How to create a library? + +See [Library Recipe](/docs/recipes/library-project). + +## How to cross-compile to Windows? + +See [Cross-Compile Recipe](/docs/recipes/cross-to-windows). + +## How to create a multi-package project? + +See [Workspace Recipe](/docs/recipes/multi-package-workspace). + +## Bootloader / pure NASM OS image + +Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk image. + +See [OS-dev recipe](/docs/recipes/os-flat-bin-archive). + +## Lock file + +`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`. diff --git a/docs-crowdin-export/de-DE/docs/getting-started/first-steps.mdx.mdx b/docs-crowdin-export/de-DE/docs/getting-started/first-steps.mdx.mdx new file mode 100644 index 0000000..ce4bcf9 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/getting-started/first-steps.mdx.mdx @@ -0,0 +1,79 @@ +--- +sidebar_label: First steps +--- + +# First Steps + +## Create a project + +```bash +dcr new my-app +cd my-app +``` + +Structure: + +``` +my-app/ +├── dcr.toml +└── src/ + └── main.c +``` + +`dcr.toml`: + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +``` + +## Build + +```bash +dcr build +``` + +Output — `target/\/debug/my-app` (Linux) or `target/debug/my-app.exe` (Windows). + +Build profiles: + +```bash +dcr build --release # release build +dcr build --debug # debug (default) +``` + +## Run + +```bash +dcr run +``` + +Builds (if needed) and runs the binary. + +## First test + +```bash +dcr test --init # create test template +dcr test # run tests +``` + +## Formatting + +```bash +dcr fmt # clang-format with .clang-format +``` + +## Linting + +```bash +dcr lint # clang-tidy checks +dcr lint --fix # apply fixes automatically +``` diff --git a/docs-crowdin-export/de-DE/docs/getting-started/installation.mdx.mdx b/docs-crowdin-export/de-DE/docs/getting-started/installation.mdx.mdx new file mode 100644 index 0000000..d574bb4 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,109 @@ +--- +sidebar_label: Installation +--- + +# Installation + +## Linux (Dexoron Packages) + +Configure your package manager at https://pkg.dexoron.su and install: + +**Arch Linux** + +```sh +sudo pacman -Sy dcr +``` + +**Debian/Ubuntu** + +```sh +sudo apt update && sudo apt install dcr +``` + +**Fedora/RHEL** + +```sh +sudo dnf install dcr +``` + +## Arch Linux (AUR) + +```sh +yay -S dcr +``` + +## macOS / Linux (Homebrew) + +```sh +brew tap dexoron/dexoron +brew install dcr +``` + +## Snap (Linux) + +```sh +sudo snap install dcrup +``` + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +# or install to profile: +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +## Linux / macOS (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install.sh | sh +``` + +## BSD (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh +``` + +## Windows (PowerShell) + +```powershell +irm https://dcr.dexoron.su/install.ps1 | iex +``` + +## From source + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr && cargo build --release +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +``` + +## Post-install + +Verify the installation: + +```bash +dcr --version +``` + +Man pages are available after installation: + +```bash +man dcr +man dcr-build +``` + +To use the registry, create `~/.dcr/config.toml`: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` diff --git a/docs-crowdin-export/de-DE/docs/ide-integration.mdx.mdx b/docs-crowdin-export/de-DE/docs/ide-integration.mdx.mdx new file mode 100644 index 0000000..7b0fdf6 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/ide-integration.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: IDE Integration +--- + +# IDE Integration + +## VS Code + +```bash +dcr gen vscode +``` + +Generates in `.vscode/`: + +| File | Purpose | +| ----------------- | -------------------------------------------- | +| `tasks.json` | `build` task (dcr build) | +| `launch.json` | Debug launch configuration | +| `settings.json` | clangd/IntelliSense: include paths, standard | +| `extensions.json` | Recommends vscode-clangd, vscode-lldb | + +## CLion + +```bash +dcr gen clion +``` + +Generates in `.idea/`: + +| File | Purpose | +| ------------------------------------------------ | ----------------------------------------- | +| `externalTools.xml` | Build, Run, Clean, Test as external tools | +| `customTargets.xml` | Custom build targets | +| `misc.xml` | C/C++ project settings | +| `runConfigurations/\.xml` | Per-binary run configurations | + +## compile_commands.json + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` at project root. Standard format for clangd, C/C++ IntelliSense, static analyzers. + +## project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata (see [gen-commands](/docs/commands/gen-commands)). diff --git a/docs-crowdin-export/de-DE/docs/license.mdx.mdx b/docs-crowdin-export/de-DE/docs/license.mdx.mdx new file mode 100644 index 0000000..20a7804 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/license.mdx.mdx @@ -0,0 +1,33 @@ +--- +sidebar_label: License +--- + +# License + +## DCR + +DCR itself is [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html) licensed. + +> **Note:** DCR is a build tool, not a library. The GPL applies only to DCR's own source code. Projects built with DCR are not subject to DCR's license — their licensing is determined solely by their own code and dependencies. + +## Rust dependencies + +DCR is written in Rust. The following notable Rust crates are statically linked: + +| Crate | License | +| ------------------------------------------------------- | ----------------- | +| [`ureq`](https://crates.io/crates/ureq) | MIT OR Apache-2.0 | +| [`serde`](https://crates.io/crates/serde) | MIT OR Apache-2.0 | +| [`toml`](https://crates.io/crates/toml) | MIT OR Apache-2.0 | +| [`toml_edit`](https://crates.io/crates/toml_edit) | MIT OR Apache-2.0 | +| [`serde_json`](https://crates.io/crates/serde_json) | MIT OR Apache-2.0 | +| [`sha2`](https://crates.io/crates/sha2) | MIT OR Apache-2.0 | +| [`glob`](https://crates.io/crates/glob) | MIT OR Apache-2.0 | +| [`self-replace`](https://crates.io/crates/self-replace) | MIT OR Apache-2.0 | +| [`ctrlc`](https://crates.io/crates/ctrlc) | MIT OR Apache-2.0 | + +Full dependency tree is available in [`Cargo.lock`](https://github.com/dexoron/dcr/blob/main/Cargo.lock). The overwhelming majority are dual-licensed under MIT OR Apache-2.0. + +## Additional credits + +* DCR's CLI design and project model are inspired by [Cargo](https://doc.rust-lang.org/cargo/). diff --git a/docs-crowdin-export/de-DE/docs/recipes/cross-to-windows.mdx.mdx b/docs-crowdin-export/de-DE/docs/recipes/cross-to-windows.mdx.mdx new file mode 100644 index 0000000..1250349 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/recipes/cross-to-windows.mdx.mdx @@ -0,0 +1,49 @@ +--- +sidebar_label: Cross-compile to Windows +--- + +# Cross-Compile to Windows from Linux + +Building a Windows binary on Linux using mingw-w64. + +## Install toolchain + +```bash +# Ubuntu/Debian +sudo apt install mingw-w64 + +# Fedora +sudo dnf install mingw64-gcc mingw64-binutils +``` + +## Configuration + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +target = "x86_64-pc-windows-gnu" # explicit mingw, not msvc +``` + +## Build + +```bash +dcr build --target x86_64-pc-windows-gnu --release +``` + +Artifact: `target/x86_64-pc-windows-gnu/release/my-app.exe`. + +## Custom toolchain + +```toml +[toolchain] +cc = "x86_64-w64-mingw32-gcc" +cxx = "x86_64-w64-mingw32-g++" +``` diff --git a/docs-crowdin-export/de-DE/docs/recipes/library-project.mdx.mdx b/docs-crowdin-export/de-DE/docs/recipes/library-project.mdx.mdx new file mode 100644 index 0000000..336c122 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/recipes/library-project.mdx.mdx @@ -0,0 +1,70 @@ +--- +sidebar_label: Library project +--- + +# Library Project + +Creating a static library and using it in another project. + +## Step 1: Create the library + +```bash +dcr new my-lib +cd my-lib +``` + +`dcr.toml`: + +```toml +[package] +name = "my-lib" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +kind = "staticlib" +``` + +`src/my_lib.h`: + +```c +#ifndef MY_LIB_H +#define MY_LIB_H +int add(int a, int b); +#endif +``` + +`src/my_lib.c`: + +```c +#include "my_lib.h" +int add(int a, int b) { return a + b; } +``` + +## Step 2: Build + +```bash +dcr build --release +``` + +Artifacts: + +* `target/\/release/libmy-lib.a` (Linux) +* `target/release/my-lib.lib` (Windows) +* `target/include/` — header files + +## Step 3: Use in another project + +```bash +dcr new my-app +cd my-app +dcr add my-lib ../my-lib +``` + +Automatically: + +* Adds include path to `target/include/` of the library +* Adds lib path to `target/\/release/` +* Links `libmy-lib.a` / `my-lib.lib` diff --git a/docs-crowdin-export/de-DE/docs/recipes/multi-package-workspace.mdx.mdx b/docs-crowdin-export/de-DE/docs/recipes/multi-package-workspace.mdx.mdx new file mode 100644 index 0000000..dde7cb5 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/recipes/multi-package-workspace.mdx.mdx @@ -0,0 +1,103 @@ +--- +sidebar_label: Multi-package workspace +--- + +# Multi-Package Workspace + +A project with three packages: two libraries and a binary. + +## Structure + +``` +workspace/ +├── dcr.toml # root workspace +├── lib-core/ +│ ├── dcr.toml +│ └── src/core.c +├── lib-utils/ +│ ├── dcr.toml +│ └── src/utils.c +└── app/ + ├── dcr.toml + └── src/main.c +``` + +## Root dcr.toml + +```toml +[package] +name = "my-workspace" +version = "0.1.0" +type = "none" + +[build] +inherit = true +language = "c" +standard = "c11" +workspace_only = true + +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +## Packages + +`lib-core/dcr.toml`: + +```toml +[package] +name = "lib-core" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`lib-utils/dcr.toml`: + +```toml +[package] +name = "lib-utils" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`app/dcr.toml`: + +```toml +[package] +name = "app" +version = "0.1.0" +type = "none" + +[build] +kind = "bin" +``` + +## Build + +```bash +cd workspace +dcr build # builds everything in correct order +dcr build --workspace app # only app (lib-core and lib-utils built as deps) +dcr run # builds and runs main package +``` + +Build order (topological sort): + +1. `lib-core` +2. `lib-utils` (depends on lib-core) +3. `app` (depends on lib-core, lib-utils) diff --git a/docs-crowdin-export/de-DE/docs/recipes/os-flat-bin-archive.mdx.mdx b/docs-crowdin-export/de-DE/docs/recipes/os-flat-bin-archive.mdx.mdx new file mode 100644 index 0000000..457bce4 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/recipes/os-flat-bin-archive.mdx.mdx @@ -0,0 +1,89 @@ +--- +sidebar_label: OS-dev (flat-bin + archive) +--- + +# Pure ASM / boot image (flat-bin + archive) + +Minimal OS-dev style pipeline: assemble raw binaries with NASM, then pack a FAT floppy/image with an optional boot sector. + +## Project layout + +``` +myos/ + dcr.toml + src/ + boot.asm # boot sector (512 bytes) + kernel.asm # payload +``` + +For multiple flat artifacts, use a **workspace** (one member per binary) or separate packages; a single `flat-bin` package produces one binary per source stem. + +## Boot package (`flat-bin`) + +```toml +[package] +name = "boot" +version = "0.1.0" + +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +```bash +dcr build +# → target/<…>/debug/boot.bin (NASM -f bin, no link) +``` + +## Disk image after build + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" +``` + +* `format`: `fat12`, `fat16`, or `fat32` +* `size`: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default ~1.44 MiB) +* `bootsector`: written only when `offset` is omitted or `0` +* `from` may be a glob; `{profile}` is substituted in paths + +## C kernel → flat binary + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldflags = ["-T", "linker.ld"] +``` + +Pipeline: objects → temporary linked ELF → `objcopy -O binary` → `kernel.bin`. Requires `objcopy` / `llvm-objcopy` in PATH. + +## Other assemblers + +| Tool | Notes | +| -------- | --------------------------------------------------------------------------------------- | +| **FASM** | Write `format binary` in the source; DCR writes `\.bin` directly | +| **GAS** | Assemble `.s` → obj → `objcopy -O binary` | +| **LLC** | `language = "llvm_ir"` → obj → objcopy | +| **MASM** | COFF obj → objcopy (needs binutils/LLVM objcopy) | + +## Notes + +* Single-file `roots` are supported: `roots = ["src/boot.asm"]`. +* `--force` re-runs `build.steps` / `build.post_steps` as well as recompilation. +* Prefer `kind = "elf"` if you need a relocatable ELF kernel without stripping to raw binary. diff --git a/docs-crowdin-export/de-DE/docs/reference/build-profiles.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/build-profiles.mdx.mdx new file mode 100644 index 0000000..694efb0 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/build-profiles.mdx.mdx @@ -0,0 +1,82 @@ +--- +sidebar_label: Build profiles +--- + +# Build Profiles + +Profiles allow overriding `[build]` fields for specific build modes. + +## Configuration + +```toml +[build] +language = "c" +standard = "c17" +cflags = ["-Wall"] + +[build.debug] +cflags = ["-O0", "-g"] + +[build.release] +cflags = ["-O3", "-DNDEBUG"] +``` + +## Merge rules + +Fields from `[build.\]` are merged on top of `[build]`: + +* **Scalar fields** (strings, numbers, bools) — replaced +* **Arrays** (`cflags`, `ldflags`, ...) — **appended** (extend the `[build]` array) + +Set `inherit = false` to disable array inheritance (only profile's own arrays are used). + +## Built-in profiles + +The default flags for each profile are composed from three config fields: + +| Field | debug default | release default | +| ----------- | ------------------ | --------------- | +| `opt_level` | `"0"` | `"3"` | +| `debug` | `true` | `false` | +| `warnings` | `["all", "extra"]` | `[]` | + +Which produce the equivalent compiler flags: + +| Profile | Effective flags | +| --------- | ---------------------------------------------------------- | +| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` | +| `release` | `-O3 -DNDEBUG` | + +Additional build options can be toggled per-profile: + +```toml +[build.release] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "1" + +[build.debug] +opt_level = "1" +debug = false +warnings = ["all", "error"] +``` + +## Target-specific profiles + +```toml +[build.linux] +cflags = ["-DLINUX"] + +[build.windows.debug] +cflags = ["-DWIN32", "-O0", "-g"] +``` + +Application order (highest priority first): + +1. `[build.\.\]` +2. `[build.\.\]` +3. `[build.\]` +4. `[build.\]` +5. `[build]` diff --git a/docs-crowdin-export/de-DE/docs/reference/build-system.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/build-system.mdx.mdx new file mode 100644 index 0000000..10fbd56 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/build-system.mdx.mdx @@ -0,0 +1,136 @@ +--- +sidebar_label: Build system +--- + +# Build System + +## Compiler Backends + +DCR supports 7 compilation backends. Selection is automatic based on file extension and `build.compiler` value. + +| Backend | Files | When used | +| --------- | --------------------------------- | ------------------------------------- | +| `unix_cc` | `.c`, `.cpp`, `.cxx`, `.cc`, `.S` | gcc/clang on Linux/macOS/BSD | +| `msvc` | `.c`, `.cpp`, `.cxx`, `.cc` | Windows (cl, clang-cl) | +| `gas` | `.s` | ARM/ARM64 assembler (no preprocessor) | +| `nasm` | `.asm`, `.s` | x86/x86_64 NASM assembler | +| `masm` | `.asm` | MASM (ml/ml64) on Windows | +| `fasm` | `.asm`, `.fasm` | Flat Assembler | +| `llvm_ir` | `.ll` | LLVM IR via `llc -filetype=obj` | + +## Qt Support + +DCR provides native Qt support for automatic meta-object handling (MOC, UIC, RCC). + +Enable it by setting `build.qt = true` in `dcr.toml`. DCR will automatically detect Qt-related files (`.ui`, `.qrc`, `.h` with `Q_OBJECT`) and process them. + +```toml +[build] +qt = true +``` + +*Note: Requires `qt6` modules (Core, Widgets, Gui, Svg) installed via `pkg-config`.* + +Advanced customization is still possible via `build.steps` if special handling is needed: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +### Unix CC + +* Compiler resolved via `resolve_compiler()`: `DCR_COMPILER` > `DCR_CC` > `[toolchain]` > `build.compiler` > `PATH` +* Supports `.d` files for header dependency tracking +* Flags: `-std=`, `-MMD -MF`, `-c -o`, `-I`, `-L`, `-l` +* Conditional flags based on config: + * `freestanding` or bare-metal target: `-ffreestanding` (compile), `-nostdlib -static` (link) + * `lto`: `-flto` (compile + link) + * `panic = "abort"`: `-fno-exceptions` (C++ only), `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables` + +### MSVC + +* Supports cl.exe and clang-cl.exe +* Flags: `/std:`, `/Fo:`, `/Fe:`, `/I`, `/link` + +### GAS / NASM / MASM / FASM / LLVM-IR + +* GAS: `-I`, `-c -o`, `--defsym` +* NASM: `-I`, `-o`, `-D`, `-f` (format: win64/elf64/macho64/macho32/elf32; **`bin` when `kind = "flat-bin"`**) +* MASM: `/nologo /c /Fo\ ` +* FASM: ` \` (output path is the object file) +* LLVM IR: `-filetype=obj -o \` + +## Incremental Builds + +Three levels of incrementality: + +1. **mtime** — if output is newer than all inputs, skip +2. **`.d` files** — header change tracking (including transitive) +3. **SHA256 fingerprint** — recompile if compiler flags changed (stored in `.dcr_fingerprint`) + +## Parallel Compilation + +* `thread::scope` for thread pool +* Atomic task queue (`AtomicU64`) +* Mutex on stdout (`OUTPUT_MUTEX`) +* Thread count = `available_parallelism()`, capped by `build.codegen-units` if set + +## Build Kinds + +| Kind | Type | Path (Linux example) | +| ----------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `bin` | Executable | `target/\/\/\` (.exe on Windows) | +| `staticlib` | Static library | `target/\/\/lib\.a` (.lib) | +| `sharedlib` | Dynamic library | `target/\/\/lib\.so` (.dll/.dylib) | +| `efi` | UEFI application | `target/\/\/\.efi` | +| `elf` | ELF without stdlib | `target/\/\/\` | +| `none` | Compile only, no link | — | +| `custom` | Full filename+extension control | `target/\/\/\.\` | +| `flat-bin` | Raw binary | ASM: `\.bin` (NASM `-f bin` / FASM / GAS·MASM·LLC via objcopy); C/C++: `\.bin` (link + objcopy) | + +## Disk images (`[archive]`) + +After a successful build, if `[archive]` is present in `dcr.toml`, DCR formats a FAT volume and copies files from `layout` into the image. See [dcr.toml → archive](/docs/reference/dcr-toml#archive). + +## Build Steps + +DCR supports pre-build and post-build steps: + +* `build.steps` — commands before compilation +* `build.post_steps` — commands after compilation + +Substitutions: `{stem}`, `{in}`, `{out}`, `{profile}`, `{version}`, `{name}`. + +Example Qt codegen via build steps: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +## pkg-config + +Automatic lookup (read from raw config): + +```toml +[build] +pkg_config = ["sdl2", "gl"] +``` + +DCR runs `pkg-config --cflags sdl2 gl` and `pkg-config --libs sdl2 gl` and adds results to compiler/linker flags. + +## Variable Substitution + +Supported variables: + +| Variable | Description | +| ----------------------- | ---------------------------- | +| `{version}` | Package version | +| `{version_major}` | Major version part | +| `{version_minor}` | Minor version part | +| `{version_patch}` | Patch version | +| `{version_suffix}` | Suffix (e.g., `-rc1`) | +| `{version_suffix_dash}` | Suffix with dash | +| `{profile}` | Profile name (debug/release) | +| `{name}` | Package name | diff --git a/docs-crowdin-export/de-DE/docs/reference/cross-compilation.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/cross-compilation.mdx.mdx new file mode 100644 index 0000000..2ca0cc7 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/cross-compilation.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Cross-compilation +--- + +# Cross-Compilation + +## Short Names + +DCR supports short platform names: + +| Short Name | Full Triple | +| ---------- | -------------------------- | +| `linux` | `x86_64-unknown-linux-gnu` | +| `macos` | `x86_64-apple-darwin` | +| `windows` | `x86_64-pc-windows-msvc` | + +```bash +dcr build --target windows +``` + +## Full Triples + +```bash +dcr build --target aarch64-unknown-linux-gnu +dcr build --target x86_64-pc-windows-gnu # mingw +dcr build --target armv7-unknown-linux-gnueabihf +``` + +## clang --target + +When using clang, DCR injects `--target=\` into CFLAGS. + +```toml +[build] +compiler = "clang" +target = "aarch64-unknown-linux-gnu" +# Auto: cflags += ["--target=aarch64-unknown-linux-gnu"] +``` + +## Bare-Metal / Freestanding + +For targets containing `none`, `-elf`, `eabi`, or `baremetal`, DCR automatically: + +1. **Disables default flags** — no system include paths, no `-l` libc +2. **Injects `-ffreestanding`** at compile time and `-nostdlib -static` at link time + +You can also enable freestanding mode explicitly: + +```toml +[build] +freestanding = true +``` + +```bash +dcr build --target aarch64-none-elf +``` + +## Target Directory + +By default, the compilation output directories are structured as follows: + +* **Linux and BSD**: Always output to `target/\/\/` (using host triple if no target is specified). +* **macOS and Windows (without target)**: Output to `target/\/`. +* **macOS and Windows (with explicit target)**: Output to `target/\/\/`. diff --git a/docs-crowdin-export/de-DE/docs/reference/dcr-toml.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/dcr-toml.mdx.mdx new file mode 100644 index 0000000..240399b --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,261 @@ +--- +sidebar_label: dcr.toml overview +--- + +# dcr.toml + +Main project configuration file. Located at the project root. + +## Structure + +```toml +[package] +# required fields + +[build] +# build settings + +[build.debug] # optional: debug override +[build.release] # optional: release override + +[build.linux] # optional: Linux override +[build.windows] # optional: Windows override +[build.windows.debug] # target + profile combination + +[toolchain] +# compiler/linker paths + +[dependencies] +# project dependencies + +[workspace] +# multi-package configuration + +[run] +# run settings + +[archive] +# optional: pack FAT disk image after build +``` + +## [package] + +| Field | Required | Description | +| --------- | -------- | ------------------------------------------- | +| `name` | yes | Project name | +| `version` | yes | Semantic version | +| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) | +| `license` | no | SPDX license identifier | +| `author` | no | Author | + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "app" +license = "MIT" +author = "John Doe" +``` + +## [build] + +... + +* `build.qt` — (bool) Enable automatic Qt meta-object handling (MOC, UIC, RCC). Requires `qt6` modules installed via `pkg-config`. + +| Field | Default | Description | +| ---------------- | ------------- | --------------------------------------------------------------------------------------------------------- | +| `language` | `"c"` | `"c"`, `"c++"`, `"cpp"`, `"cxx"`, `"asm"`, `"llvm_ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to `"c"`) | +| `standard` | `"c11"` | C standard (`c11`, `c17`, `c23`) | +| `cxx_standard` | — | C++ standard (`c++17`, `c++20`, `c++23`) | +| `compiler` | `"clang"` | Preferred compiler (optional, defaults to `"clang"`) | +| `kind` | `"bin"` | `bin`, `staticlib`, `sharedlib`, `efi`, `elf`, `none`, `custom`, `flat-bin` | +| `target` | host | Target triple for cross-compilation | +| `platform` | `"native"` | `native`, `efi` | +| `cflags` | `[]` | Additional C/C++/ASM flags | +| `ldflags` | `[]` | Additional linker flags | +| `filename` | `""` | Custom output file name | +| `extension` | `""` | Custom file extension (for `flat-bin`, default is `bin`) | +| `roots` | `["src"]` | Source roots: directories and/or individual source/header files | +| `exclude` | `[]` | Exclude patterns | +| `include` | `[]` | Additional include directories | +| `src_disable` | `false` | Disable auto source discovery | +| `inherit` | `false` | Inherit build from workspace root | +| `clean` | `[]` | Glob patterns for custom clean paths | +| `out_dir` | `""` | Custom output directory | +| `workspace_only` | `false` | Workspace-only, not built standalone (no `language`/`compiler` required) | +| `freestanding` | `false` | Compile in freestanding mode (`-ffreestanding` + `-nostdlib -static`) | +| `opt_level` | — | Optimization level: `0`-`3`, `"s"`, `"z"` (derived from profile if omitted) | +| `debug` | profile-based | Emit debug symbols (`-g`): `true` in debug, `false` in release | +| `lto` | `false` | Link-time optimization (`-flto` for both compiler and linker) | +| `strip` | `false` | Strip symbols from output (`-s` in ldflags) | +| `warnings` | `[]` | Warning flags (e.g. `"all"`, `"extra"`, `"pedantic"`); engine adds `-Wall -Wextra` in debug if empty | +| `panic` | `""` | Panic strategy: `"abort"` disables exceptions and unwind tables | +| `codegen-units` | `""` | Max parallel compilation jobs (`"0"` = auto) | +| `qt` | `false` | Enable automatic Qt meta-object handling (MOC, UIC, RCC) | + +Settings from raw config (not in typed struct): + +* `pkg_config` — list of pkg-config packages +* `ldscript` — linker script path +* `build.steps` / `build.post_steps` — codegen steps + +## Per-language overrides: `[build.c]`, `[build.cxx]`, `[build.asm]`, `[build.llvm_ir]` + +Each language can have its own table that overrides the flat `[build]` settings: + +```toml +[build] +compiler = "clang" +standard = "c11" + +[build.c] +standard = "c23" +compiler = "gcc" + +[build.cxx] +standard = "c++23" +compiler = "g++" + +[build.asm] +compiler = "nasm" +flags = ["-felf64"] + +[build.llvm_ir] +compiler = "llc" +``` + +The flat `[build]` acts as fallback; per-language tables take precedence for their language. + +Example: + +```toml +[build] +language = "c++" +standard = "c23" +cxx_standard = "c++23" +compiler = "clang" +kind = "sharedlib" +cflags = ["-Wall", "-Wextra"] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "2" +``` + +## [toolchain] + +```toml +[toolchain] +cc = "/usr/bin/clang" +cxx = "/usr/bin/clang++" +as = "/usr/bin/as" +ar = "/usr/bin/ar" +ld = "/usr/bin/ld.lld" +``` + +Raw config also supports `uic`, `moc`, `rcc` for Qt codegen. + +## [dependencies] + +See [dependencies](/docs/reference/dependencies). + +## [run] + +```toml +[run] +cmd = "./target/{profile}/{name}" +``` + +Substitutions: + +* `{version}` — package version +* `{version_major}`, `{version_minor}`, `{version_patch}`, `{version_suffix}`, `{version_suffix_dash}` — version parts +* `{profile}` — debug / release +* `{name}` — package name + +Default `cmd` = `./target/{profile}/{name}` (macOS/Windows) or `./target/\/\/\` (Linux). + +## [workspace] + +See [workspaces](/docs/reference/workspaces). + +## [archive] + +Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`). + +| Field | Required | Description | +| ------------ | -------- | ------------------------------------------------------------------------------------------- | +| `output` | yes | Image path relative to project root (`{profile}` allowed) | +| `format` | yes | `fat12`, `fat16`, or `fat32` | +| `size` | no | Image size: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default `1474560` ≈ 1.44 MiB) | +| `offset` | no | Byte offset of the FAT volume inside the image (default `0`) | +| `label` | no | Volume label (max 11 chars, default `VOLUME`) | +| `bootsector` | no | Path to a 512-byte boot sector written at offset 0 when `offset` is 0 (`{profile}` allowed) | +| `layout` | no | List of `{ from, to }` entries (files or globs → path inside the volume) | + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" + +[[archive.layout]] +from = "assets/*" +to = "/" +``` + +Typical pairing with `kind = "flat-bin"` (NASM `-f bin`) for bootloaders and pure-ASM OS images. + +## `flat-bin` (kind) + +Produces a raw binary (default extension `bin`) for boot sectors, kernels, and freestanding payloads. + +### Assemblers + +| Tool | Language / compiler | How flat-bin is produced | +| ---- | ------------------------------------------ | -------------------------------------------- | +| NASM | `language = "asm"`, `compiler = "nasm"` | `-f bin` → `\.bin` | +| FASM | `compiler = "fasm"` | direct write (use `format binary` in source) | +| GAS | `compiler = "as"` / `"gas"` | assemble → `objcopy -O binary` | +| MASM | `compiler = "ml"` / `"ml64"` | assemble → `objcopy -O binary` | +| LLC | `language = "llvm_ir"`, `compiler = "llc"` | `-filetype=obj` → `objcopy -O binary` | + +```toml +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +### C / C++ + +Compile all sources, link with `-nostdlib -static` (plus your `ldflags` / `ldscript`), then convert the intermediate ELF/PE with `objcopy -O binary` to `\.bin`. + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldscript = "linker.ld" +ldflags = ["-T", "linker.ld"] +``` + +Notes: + +* Multi-file **ASM** packages emit one `\.bin` per source; **C/C++** emit a single project binary. +* `objcopy` tools tried in order: `llvm-objcopy`, `objcopy`, `gobjcopy`. +* Incompatible with `build.qt = true`. +* `dcr run` rejects `flat-bin` (not a host executable). diff --git a/docs-crowdin-export/de-DE/docs/reference/dependencies.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/dependencies.mdx.mdx new file mode 100644 index 0000000..97a1a6e --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/dependencies.mdx.mdx @@ -0,0 +1,84 @@ +--- +sidebar_label: Dependencies +--- + +# Dependencies + +## Formats + +The `[dependencies]` section supports three formats: + +### String (registry) + +```toml +[dependencies] +fmt = "10.1.1" +spdlog = "1.12" +catch2 = "3.4.0" +``` + +The version string is used as-is for registry lookup. + +### Table (git) + +```toml +[dependencies] +fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" } +``` + +Fields: `git`, `branch`, `tag`, `rev`. + +### Table (path) + +```toml +[dependencies] +mylib = { path = "../mylib" } +``` + +## Registry + +DCR uses a package registry for dependency lookup by name. + +```toml +# ~/.dcr/config.toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrides the path to `index.json`. + +## Git dependencies + +Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources: + +* `branch` — switch to a branch +* `tag` — switch to a tag +* `rev` — switch to a specific commit +* `features` — feature flags (parsed, but does not affect build) + +## Path dependencies + +Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`. + +```toml +[dependencies] +mylib = { path = "/abs/path/to/lib" } +mylib = { path = "../relative/path" } +``` + +*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.* + +## dcr.lock + +Dependency lock file. Contains package names and sources. + +Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`. + +## Resolution process + +1. Load all dependencies (registry → git → path) +2. For path deps: recursively read their `dcr.toml` +3. For registry deps: search `index.json` +4. For git deps: clone to cache +5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler diff --git a/docs-crowdin-export/de-DE/docs/reference/environment-variables.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/environment-variables.mdx.mdx new file mode 100644 index 0000000..8b75814 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/environment-variables.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Environment variables +--- + +# Environment Variables + +## DCR_COMPILER + +Overrides the compiler for all languages. **Highest priority.** + +```bash +export DCR_COMPILER=clang +dcr build +``` + +Compiler resolution priority: + +1. `DCR_COMPILER` (env) +2. `DCR_CC` / `DCR_CXX` / `DCR_AS` (env) +3. `[toolchain]` (dcr.toml) +4. `build.compiler` (dcr.toml) +5. `PATH` + +## DCR_CC / DCR_CXX / DCR_AS + +Per-language override (lower priority than `DCR_COMPILER`, higher than `[toolchain]`). + +```bash +export DCR_CC=gcc-14 +export DCR_CXX=g++-14 +export DCR_AS=arm-linux-gnueabihf-as +``` + +## DCR_LD / DCR_AR + +Override linker and archiver. + +```bash +export DCR_LD=ld.lld +export DCR_AR=llvm-ar +``` + +## DCR_DEBUG + +Enables debug mode — prints all compilation commands to stderr before execution. + +```bash +export DCR_DEBUG=1 +dcr build +``` + +## DCR_INDEX_PATH + +Overrides the path to the registry `index.json`. + +```bash +export DCR_INDEX_PATH=/custom/path/index.json +``` + +Default: `~/.dcr/index.json`. diff --git a/docs-crowdin-export/de-DE/docs/reference/platform-support.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/platform-support.mdx.mdx new file mode 100644 index 0000000..a97eab5 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/platform-support.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Platform support +--- + +# Platform Support + +## Target Triples + +DCR normalizes target triples. Short platform names are expanded to full triples. + +### Linux + +``` +target/-unknown-linux-// +``` + +Architectures: `x86_64`, `aarch64`, `i686`, `armv7`, `riscv64` (host-detected). +Environments: `gnu` (default), `musl`. + +Artifact type: ELF. Extensions: `.so` (sharedlib), `.a` (staticlib). + +### macOS + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64` (host-detected). + +Extensions: `.dylib` (sharedlib), `.a` (staticlib). + +### Windows + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64`. +Environments: `msvc` (default), `gnu` (MinGW). + +Extensions: `.exe` (bin), `.lib` (staticlib), `.dll` (sharedlib), `.efi` (UEFI). + +### BSD + +``` +target/-unknown-// +``` + +Supported systems: `freebsd`, `openbsd`, `netbsd`, `dragonfly`. + +## Host Detection + +DCR uses `std::env::consts::ARCH` and `std::env::consts::OS` for host platform detection. Used as fallback when `target` is not specified. diff --git a/docs-crowdin-export/de-DE/docs/reference/workspaces.mdx.mdx b/docs-crowdin-export/de-DE/docs/reference/workspaces.mdx.mdx new file mode 100644 index 0000000..082be1e --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/workspaces.mdx.mdx @@ -0,0 +1,88 @@ +--- +sidebar_label: Workspaces +--- + +# Workspaces + +Workspaces allow managing multiple packages in a single repository. + +## Configuration + +```toml +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +### Member fields + +| Field | Description | +| ------ | ------------------------------------------------ | +| `path` | Path to the package (relative to workspace root) | +| `deps` | Dependencies on other members | +| `main` | Mark as the main package | + +## Topological sort + +DCR automatically sorts packages by dependencies: package A is built before B if B depends on A. + +Cyclic dependencies are detected and cause an error. + +## Build + +```bash +dcr build # build all packages in dependency order +dcr build --workspace app # build only app (dependencies built automatically) +``` + +When building a workspace, DCR automatically injects include and library paths of dependent workspace members: + +* **Include Paths**: Automatically resolves and injects header directories of dependencies, including the member's `src/` directory, local `include/` directory, and the packaged `target/include` directory. +* **Library Paths**: Injects compiled library search paths (`target/lib` as well as target-specific build folders) to allow automatic linking with member libraries. + +## Clean + +```bash +dcr clean # clean only root target/ +dcr clean --all # clean target/ of all packages +``` + +## Inheritance + +If a member has `inherit = true` in its `[build]` section, fields from the root `[build]` are merged into the member: + +```toml +# root dcr.toml +[build] +inherit = true +language = "c" +standard = "c17" + +# member inherits language and standard +``` + +## Workspace-only root (no build of its own) + +A workspace root can set `workspace_only = true` — it won't be built itself, and doesn't need `language` or `compiler`: + +```toml +[package] +name = "my-workspace" +version = "0.1.0" + +[build] +workspace_only = true +kind = "bin" + +[workspace] +lib-core = { path = "lib-core" } +app = { path = "app", deps = ["lib-core"] } +``` diff --git a/docs-crowdin-export/de-DE/docs/self-update.mdx.mdx b/docs-crowdin-export/de-DE/docs/self-update.mdx.mdx new file mode 100644 index 0000000..f9e7e88 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/self-update.mdx.mdx @@ -0,0 +1,46 @@ +--- +sidebar_label: Self Update +--- + +# Self Update + +## dcr --update + +Automatic update to the latest version. Downloads a binary (not an archive) from GitHub Releases and replaces the current executable. + +```bash +dcr --update +``` + +## How it works + +1. DCR detects the current platform and architecture +2. Fetches the latest release from `api.github.com/repos/dexoron/dcr/releases/latest` +3. Compares versions +4. Downloads the matching asset (direct binary URL, not archive) +5. Replaces the current executable via `self_replace` + +## Asset naming + +Pattern: `dcr-\` or `dcr-\.exe` + +| Platform | Asset name | +| -------------- | -------------------------------- | +| Linux x86_64 | `dcr-x86_64-unknown-linux-gnu` | +| macOS x86_64 | `dcr-x86_64-apple-darwin` | +| macOS ARM64 | `dcr-aarch64-apple-darwin` | +| Windows x86_64 | `dcr-x86_64-pc-windows-msvc.exe` | + +## AUR + +If DCR was installed via AUR, `--update` shows a warning: + +``` +Update via package manager: yay/paru -Syu {package_name} or sudo pacman -Syu {package_name} +``` + +## Errors + +* Cannot detect platform — error +* Cannot fetch release — error with URL +* No write permission — error (use `sudo` or manual install) diff --git a/docs-crowdin-export/de-DE/docs/testing/running-tests.mdx.mdx b/docs-crowdin-export/de-DE/docs/testing/running-tests.mdx.mdx new file mode 100644 index 0000000..934b0ed --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/testing/running-tests.mdx.mdx @@ -0,0 +1,45 @@ +--- +sidebar_label: Running tests +--- + +# Running Tests + +## Execution + +```bash +dcr test +``` + +Builds the project, then compiles and runs test files from `tests/`. + +## Profiles + +```bash +dcr test # debug (default) +dcr test --release # release +dcr test --debug # explicit debug +``` + +## Output + +``` +===================== + Testsuite summary +===================== +TOTAL: 5 +PASS: 3 +SKIP: 1 +FAIL: 1 +===================== +``` + +## Exit code + +* 0 — all tests passed (FAIL = 0) +* 1 — test failures or build error + +## What gets built + +* All `.c` files from `tests/` (`.cpp` not supported) +* Include path: `tests/` (for `dcr_test.h`) +* Linked with project if `package.type = "lib"` or `kind = "staticlib"`/`"sharedlib"` diff --git a/docs-crowdin-export/de-DE/docs/testing/test-framework.mdx.mdx b/docs-crowdin-export/de-DE/docs/testing/test-framework.mdx.mdx new file mode 100644 index 0000000..ae43679 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/testing/test-framework.mdx.mdx @@ -0,0 +1,69 @@ +--- +sidebar_label: Test framework (EXPECT, TEST, ...) +--- + +# Test Framework + +DCR has a built-in minimal test framework for C. + +## Macros + +### `EXPECT(expr)` + +Asserts that an expression is true. + +```c +EXPECT(1 + 1 == 2); +EXPECT(ptr != NULL); +``` + +### `SKIP(reason)` + +Skips a test with a message. + +```c +SKIP("not implemented on Windows"); +``` + +### `TEST(name)` + +Defines a test. + +```c +TEST(addition) { + EXPECT(1 + 1 == 2); + EXPECT(2 + 2 == 4); +} +``` + +### `TEST_CASE(name)` + +Registers a test case. + +```c +TEST_CASE(math) { + EXPECT(1 + 1 == 2); +} +``` + +## Initialization + +```bash +dcr test --init +``` + +Creates: + +* `tests/dcr_test.h` — framework header (do not edit) +* `tests/test.c` — template with example test + +## Structure + +``` +tests/ +├── dcr_test.h # framework (do not edit) +├── test.c # main tests +└── ... # additional .c test files +``` + +Only `.c` files are compiled (`.cpp` is not supported). diff --git a/docs-crowdin-export/pl-PL/docs/README.mdx.mdx b/docs-crowdin-export/pl-PL/docs/README.mdx.mdx new file mode 100644 index 0000000..f00c04a --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/README.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Introduction +--- + +# DCR — C/C++ Build Tool & Package Manager + +
+Quick reference + +```bash +# Installation +curl -fsSL https://dcr.dexoron.su/install.sh | sh + +# Create a project +dcr new my-app +cd my-app + +# Build and run +dcr build +dcr run + +# Run tests +dcr test + +# Add a dependency +dcr add fmt + +# Generate IDE files +dcr gen vscode +``` + +
+ +## Contents + +| Section | Description | +| ----------------------------------------------------- | --------------------------------------------- | +| [Getting Started](/docs/getting-started/installation) | Installation and first steps | +| [Commands](/docs/commands/project-commands) | All CLI commands | +| [Reference](/docs/reference/dcr-toml) | Configuration, build, dependencies, platforms | +| [Testing](/docs/testing/test-framework) | Built-in test framework | +| [Recipes](/docs/recipes/cross-to-windows) | Common scenarios | +| [IDE Integration](/docs/ide-integration) | VS Code, CLion, compile_commands.json | +| [Self Update](/docs/self-update) | Auto-update | +| [FAQ](/docs/faq) | Frequently asked questions | +| [Changelog](/docs/changelog) | Version history | +| [License](/docs/license) | DCR and vendored library licenses | +| [Contributing](/docs/contributing) | DCR development | + +## Features + +* **Incremental builds** — mtime + `.d` headers + SHA256 fingerprint +* **Parallel compilation** — thread::scope, atomic task queue +* **7 backends** — gcc/clang (unix_cc), MSVC/clang-cl (msvc), GAS, NASM, MASM, FASM, LLVM IR +* **8 project kinds** — bin, staticlib, sharedlib, efi, elf, none, custom, flat-bin +* **Disk images** — optional `[archive]` packs FAT12/16/32 images after build +* **Cross-compilation** — short names and full triples +* **Profiles** — debug / release with field overrides +* **Workspaces** — multi-package projects with topological sort +* **Registry + Git + Path** — three dependency mechanisms +* **IDE generation** — VS Code, CLion, compile_commands.json, JSON metadata +* **pkg-config** — automatic system library discovery +* **Per-command `--help`** — `dcr build --help`, `dcr new --help`, etc. +* **Man pages** — `man dcr`, `man dcr-build`, `man dcr-new` diff --git a/docs-crowdin-export/pl-PL/docs/changelog.mdx.mdx b/docs-crowdin-export/pl-PL/docs/changelog.mdx.mdx new file mode 100644 index 0000000..6f494b7 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/changelog.mdx.mdx @@ -0,0 +1,193 @@ +--- +sidebar_label: Changelog +--- + +# Changelog + +## 0.8.1 (2026-07-20) + +### Added + +* **`build.kind = "flat-bin"`** — raw binary (default `.bin`) for OS-dev payloads: + * **NASM** — `-f bin` → `\.bin` + * **FASM** — direct output (`format binary` in source) + * **GAS / MASM / LLC** — object → `objcopy -O binary` → `\.bin` + * **C/C++** — objects → freestanding link → `objcopy -O binary` → `\.bin` + * Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit +* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths. +* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory. + +### Changed + +* **`--force`** also re-runs `build.steps` and `build.post_steps`. +* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member. + +### Dependencies + +* `fatfs = "0.3"` for FAT image packing. + +## 0.8.0 (2026-07-18) + +### Added + +* **Dedicated Build Engine (`src/core/build/engine.rs`)** — decoupled the build orchestration logic completely from the CLI front-end wrapper in `src/cli/build.rs` to a reusable, decoupled core build engine. +* **Polymorphic Language Model (`Language` trait)** — introduced the abstract `Language` trait (`src/core/build/language/mod.rs`). File scanning, compiler resolution, and flags handling are now encapsulated in dedicated language modules for C, C++ (including Qt code generation), LLVM IR, and ASM (GAS, NASM, FASM, MASM). +* **Polymorphic Compilation Dispatch (`Builder` trait)** — introduced the `Builder` trait to generalize builder invocations (`src/core/build/builder/mod.rs`). Consolidated GCC/Clang logic into `builder/cc_common.rs` and Microsoft Visual C++ logic into `builder/msvc/`. +* **Per-Language Configuration overrides (`[build.\]`)** — introduced support for configuring language-specific compiler, standard, and flags (e.g. `[build.c]`, `[build.cxx]`, `[build.asm]`) independently in `dcr.toml`. +* **Automatic Workspace Dependency Injection** — during workspace builds, include/lib paths of dependent workspace members (including their source headers, local `include/` folders, and build target `target/include` / `target/lib` folders) are automatically resolved and injected. +* **`BuildReporter` Event System** — decoupled build orchestration output into a structured event-driven reporter model (`src/core/build/report.rs`), making DCR suitable for library embedding and IDE integrations without stderr capturing. +* **Build Cancellation Support** — introduced thread-safe cancellation tokens (`Arc\`) allowing clients to safely abort compile runs mid-execution. +* **TOML Formatting & Custom Keys Preservation** — migrated the config editor to `toml_edit`, preserving all unknown/user-defined TOML keys, structures, and comments during file write operations (e.g., in `dcr add`). +* **Path Dependencies Target Include Resolution** — local path dependencies configured via tables now correctly expose headers built and packaged into their `target/include` folder to consumer packages. +* **Modular Integration Test Suite** — refactored the monolith `tests/cli_basic.rs` file into clean, specialized integration tests: `cli_build.rs`, `cli_deps.rs`, `cli_lint.rs`, `cli_new.rs`, `cli_qt.rs`, `cli_test.rs`, `cli_workspace.rs`. + +### Changed + +* **Consolidated Linking and Archiving** — artifact generation (linking executables/shared libraries and archiving static libraries) consolidated into a single `src/core/build/builder/artifact.rs` module. +* **Workspace-Aware member execution** — `dcr run` executed at the workspace root of a `workspace_only` project now triggers the member build inside the workspace context using the `--workspace` parameter, preventing standalone build issues. +* **Elimination of Global State** — removed global variables and states from the build core, encapsulating build logic inside isolated `BuildContext` structs for thread safety. +* **Build Cache Separation** — relocated mtime tracking, incremental caching, and header-dependency checking logic to `src/core/build/cache.rs`. +* **Modularized Pre-build Steps** — decoupled generator scripts and pre-build commands parsing into `src/core/build/steps.rs`. + +## 0.7.4 (2026-06-17) + +### Added + +* **Native Qt support** — automatic meta-object handling (MOC, UIC, RCC) added when `build.qt = true` is set in `dcr.toml`. +* **`dcr lint` command** — C/C++ static analysis via `clang-tidy`. Supports `--fix` for automatic fixes. Respects `build.roots` and `build.src_disable` from config. +* **Three new assembler backends**: + * **MASM** (`compiler = "ml"` / `"ml64"`) — Microsoft Macro Assembler. + * **FASM** (`compiler = "fasm"`) — Flat Assembler. + * **LLVM IR** (`compiler = "llc"`) — compiles `.ll` files via `llc -filetype=obj`. +* **Shared ASM pipeline** — linking and archiving logic consolidated into `core/builder/asm.rs`. Adding a new assembler backend now takes ~30 lines. +* **Filesystem utilities** — `to_hex()` and `home_dir()` extracted to `utils/fs.rs`. +* **Build utilities** — `normalize_target()`, `normalize_kind()`, `normalize_platform()`, `default_profile_flags()` extracted to `utils/build.rs`. +* **Backend helpers** — `asm_lang_flag()`, `source_extensions()`, `elapsed_secs()` added to `core/builder/common.rs`. +* **Full Bare-Metal / Freestanding Automation** — introduced the `build.freestanding = true` configuration option. When enabled (or when a bare-metal target is detected), DCR automatically injects `-ffreestanding` during compilation and both `-nostdlib` and `-static` during linking. +* **Artifact Optimization (LTO & Strip)** — added `build.lto` (auto-injects `-flto` for compiler and linker) and `build.strip` (automatically strips debug symbols via linker `-s` flag) options to `dcr.toml`. +* **Compilation Thread Control** — added the `build.codegen-units` option to strictly limit the maximum number of parallel jobs utilized by the custom `parallel_build` worker pool. +* **Panic Behavior Management** — added `build.panic = "abort"` support. For C++ targets, it automatically strips exception handling and unwind tables via `-fno-exceptions`, `-fno-unwind-tables`, and `-fno-asynchronous-unwind-tables`. + +### Changed + +* **Intelligent Default Flags Generation** — automated injection of fallback optimization (`-O3`/`-O0`), debug (`-g`), and warning (`-Wall -Wextra`) flags is now suppressed for bare-metal and freestanding builds if `build.cflags` are overridden. +* **Centralized Bare-Metal Detection** — relocated the `is_bare_metal_target` helper to common build utilities (`src/utils/build.rs`) for unified access across the building core. +* **Architectural Refactoring**: + * Renamed `src/config.rs` to `src/templates.rs`. + * Started consolidation of configuration and build orchestration logic. + +## 0.7.3 (2026-06-13) + +### Added + +* **`--vcs` option for `new` and `init` commands** — introduced explicit version control system selection via `--vcs \`. +* **Git metadata integration in `--version`** — the CLI now appends the current short commit hash and a `-dirty` suffix if there are uncommitted changes in the DCR repository. +* **Automatic `.gitignore` generation** — Git repository initialization now automatically writes a `.gitignore` file excluding the `/target` directory. +* **Nested repository prevention** — automatic Git initialization is now skipped if `dcr new` or `dcr init` is executed inside an already existing Git repository. +* **VCS verification tests** — added `new_vcs_options_work` and `init_vcs_options_work` integration tests to ensure reliable repository behavior. + +### Changed + +* **Complete removal of `git2` dependency** — all Git actions (dependency fetching, VCS setup, status checks) are now delegated to the system `git` executable via `Command`. This simplifies compilation and drops the need for `vendored` and `openssl` features. +* **Migrated from `reqwest` to `ureq`** — replaced the heavy `reqwest` crate in `flag_update.rs` with the lightweight synchronous `ureq 2.10` client, reducing overhead and the final binary size. + +## 0.7.2 (2026-06-07) + +### Added + +* `default_target_triple()` now respects `target_env` — Linux (gnu/musl) and Windows (msvc/gnu) use the correct environment instead of hardcoded values. + +### Fixed + +* **macOS Apple Silicon builds failed with `_main` undefined** — `--target=` is now passed to ldflags, not just cflags. `default_target_triple()` uses `std::env::consts::ARCH` on macOS instead of hardcoded `x86_64`. +* **GitHub Stars and GPL-3.0 badges not rendering in README** — badge block converted to pure HTML. + +### Changed + +* Default target resolution extracted into shared `default_target_triple()` — removed duplication across build, run, clean. + +## 0.7.1 (2026-06-02) + +### Added + +* **`--help` for all commands** — `dcr build --help`, `dcr run --help`, `dcr new --help`, + `dcr init --help`, `dcr clean --help`, `dcr add --help`, `dcr fmt --help`, + `dcr setup --help`, `dcr tree --help`, `dcr gen --help`, `dcr --update --help`, + `dcr test --help`. All output uses styled headers (green) and usage lines (cyan). +* **Man pages** — 12 troff pages in `man/man1/`: `dcr.1`, `dcr-build.1`, + `dcr-run.1`, `dcr-new.1`, `dcr-init.1`, `dcr-clean.1`, `dcr-add.1`, `dcr-test.1`, + `dcr-gen.1`, `dcr-fmt.1`, `dcr-tree.1`, `dcr-setup.1`. +* **Man pages in all packaging** — install.sh, install_bsd.sh, AUR PKGBUILD, + Debian (cargo-deb), RPM (cargo-generate-rpm), Nix (postInstall), Homebrew + (resource), Snap, GitHub Release assets. +* **Project name validation** — `dcr init` and `dcr new` now validate names before + creating files. Only ASCII letters, digits, `_` and `-` are allowed. +* **`documentation` and `homepage` fields** — added to `Cargo.toml`. +* **Release profile optimizations** — `opt-level = "z"`, LTO, `codegen-units = 1`, + `panic = "abort"`, `strip = true` for smaller binaries. +* **Linux i686, armv7, riscv64 targets** — added to release workflow and install scripts. +* **Linux musl i686, armv7 targets** — cross-compiled via zigbuild in CI. +* **AUR packages** — `dcr-dev`, `dcr-dev-bin` publishing workflow. +* **Snap publishing** — automated Snapcraft publishing in CI. +* **Snap badge** — in README. + +### Changed + +* **`validate_package_name` made public** — callable from CLI commands. +* **README platform table** — reorganized: libc variants as separate OS rows, + removed extra columns. Linux architecture list updated. +* **`gen.rs` no-args output** — now uses styled output instead of raw `eprintln!`. +* **`tree.rs`, `fmt.rs`, and `setup.rs`** — now accept arguments for `--help`. +* **README install commands** — `| bash` → `| sh` for POSIX compatibility. + +### Fixed + +* **`dcr new \` creates directory then fails** — validation now + happens before any file operations. +* **`dcr init` on invalid directory name** — same fix. +* **Man pages missing in installed packages** — now shipped in all formats. +* **Windows drive letter false positive** — in dependency file parser. +* **CRLF (`\r\n`) breaks dependency parser** — now handles mixed line endings. +* **Newline after backslash not consumed** — in `parse_d_file` escape handling. + +## 0.7.0 (2026-06-01) + +### Added + +* **OpenBSD and NetBSD target support** — full platform routing with dynamic target triples using `std::env::consts::ARCH` and `std::env::consts::OS`. Affects `build`, `run`, `clean` commands and the platform module. +* **`src/platform/bsd.rs`** — new BSD platform module (shared by FreeBSD, OpenBSD, NetBSD) providing `bin_path`, `lib_path`, `elf_path`, `efi_path`, `shared_lib_path`. +* **`build.out_dir` config option** — custom output directory that overrides the default `target/\/\` path for final artifacts. Supported in `build`, `run`, and config validation. +* **`dcr fmt` command** — new CLI command that formats all C/C++ source files (`*.c`, `*.cpp`, `*.h`, `*.hpp`) in `src/` and `tests/` using `clang-format`. +* **Incremental linking** — `needs_link()` in `common.rs` checks if any object file is newer than the linked output, skipping unnecessary relinking. Implemented for all backends (`unix_cc`, `msvc`, `gas`, `nasm`). +* **`build.kind = "none"` and `"custom"`** — two new project kinds for special build scenarios that don't produce standard artifacts. +* **`install_bsd.sh`** — POSIX-compliant installation script for BSD systems (FreeBSD, OpenBSD, NetBSD) with binary download and source build modes. +* **Linux ARM64 support in `install.sh`** — added `Linux:aarch64|Linux:arm64` target detection for pre-built binary downloads. +* **BSD OS detection in `install.sh`** — detects FreeBSD, OpenBSD, NetBSD and determines target triple. +* **`rust-toolchain.toml`** — explicit toolchain pinning to `stable` channel. +* **Integration tests** — `build_with_target_config` (verifies `build.target = "linux"`) and `build_with_out_dir` (validates custom output directory). +* **`get_build_string_with_profile` made `pub`** — so `run.rs` can determine custom output directory configuration. + +### Changed + +* **`build.target` semantics changed** — now strictly contains a target triple (e.g., `x86_64-unknown-linux-gnu`) or short name (`linux`, `macos`, `windows`). No longer used as custom output directory — this functionality moved to `build.out_dir`. +* **`build.standard` made optional** — changed from `String` to `Option\`. Validation only enforces non-empty for non-ASM languages. Skipped in `dcr.toml` output if empty. +* **`dcr run` with `out_dir`** — now determines target directory respecting `build.out_dir` via `get_build_string_with_profile()` from `build.rs`. +* **`collect_sources()` returns empty vector** instead of error when no sources are found, allowing `kind = "none"` or `kind = "custom"` projects with no source files. +* **CI/CD release workflow refactored** — `git2` made target-specific (no vendored-openssl on Windows), Zig-based cross-compilation for non-x86_64 Linux targets, Arch Linux package version cleanup (dashes → dots), `gmake` symlink for NetBSD. +* **README compatibility table** — FreeBSD, OpenBSD, NetBSD build/run status upgraded from "community/best-effort" to "officially supported". +* **Documentation updated** — `build-section.md` describes new `build.target` and `build.out_dir` fields. `target-directory.md` rewritten to clarify the distinction. + +### Fixed + +* **stdout/stderr not inherited in `dcr run`** — child process output was captured and manually printed, breaking interactive programs. Fixed by switching to `Command::status()`. +* **Race condition in release CI** — matrix build jobs could upload assets to a release that didn't exist yet. Fixed by adding a dedicated `create-release` job. +* **Release GHA — stable toolchain override** — fixed Rust toolchain override issues in CI. +* **Arch Linux package version sanitization** — version strings with dashes (e.g., `0.7.0-dev`) are invalid for `pkgver`. Fixed by replacing dashes with dots. +* **GPG permissions after Docker** — Docker operations changed GPG directory ownership. Fixed by running `chown` after Docker commands. +* **RPM artifact paths** — RPM artifacts were placed in `rpm/x86_64/` instead of `fedora/x86_64/`. Fixed in Dexoron Packages Index workflow. +* **JSON parsing reliability in `install.sh`** — added `jq` as primary parser with `python3` fallback for dev channel release lookup. + +### Removed + +* **`format_roots()` helper function** — removed from `common.rs`. Was only used by the old error handling path in `collect_sources()`. +* **Per-distribution artifact download steps** — three separate `actions/download-artifact` steps replaced with unified `gh release download --clobber`. diff --git a/docs-crowdin-export/pl-PL/docs/commands/build-commands.mdx.mdx b/docs-crowdin-export/pl-PL/docs/commands/build-commands.mdx.mdx new file mode 100644 index 0000000..ad38d1a --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/commands/build-commands.mdx.mdx @@ -0,0 +1,47 @@ +--- +sidebar_label: Build commands (build, run, clean) +--- + +# Build Commands + +## `dcr build` + +Builds the project according to `dcr.toml`. + +```bash +dcr build # debug profile +dcr build --release # release build +dcr build --debug # explicit debug +dcr build --target aarch64-unknown-linux-gnu +dcr build --force # full rebuild (also re-runs build.steps / post_steps) +dcr build --clean # clean + build +dcr build --verbose # show compilation commands +dcr build --workspace pkg-a # build specific workspace package +``` + +Artifacts: `target/\/\/\` (Linux with explicit target). + +With `[archive]` in `dcr.toml`, a FAT disk image is packed after a successful build. + +## `dcr run` + +Builds (if sources are newer than artifacts) and runs the binary. + +```bash +dcr run +dcr run --release +dcr run --force # force rebuild then run +``` + +On a **workspace-only** root: if `[run].cmd` is set, that command is used after build; otherwise DCR delegates to a workspace member. + +## `dcr clean` + +Removes `target/` directory (or `target/\/\`). + +```bash +dcr clean +dcr clean --release # target/release/ only +dcr clean --target windows # target/x86_64-pc-windows-msvc/ +dcr clean --all # clean all workspace packages +``` diff --git a/docs-crowdin-export/pl-PL/docs/commands/dependency-commands.mdx.mdx b/docs-crowdin-export/pl-PL/docs/commands/dependency-commands.mdx.mdx new file mode 100644 index 0000000..4b5b982 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/commands/dependency-commands.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Dependency commands (add, tree) +--- + +# Dependency Commands + +## `dcr add \ [source]` + +Adds a dependency to `dcr.toml`. + +```bash +dcr add fmt # registry lookup +dcr add mylib ../path/to/lib # path as source +dcr add mylib path:./lib # explicit path prefix +dcr add mylib git:https://github.com/user/repo # explicit git prefix +dcr add mylib github:user/repo # GitHub shorthand +dcr add mylib gitlab:user/repo # GitLab shorthand +``` + +Source prefixes: + +* `path:` — local path +* `git:` — generic git URL +* `github:` — expands to `https://github.com/\/\` +* `gitlab:` — expands to `https://gitlab.com/\/\` +* `http://` / `https://` / `git@` — full URL + +Flags: + +* `--branch \` — git branch +* `--tag \` — git tag +* `--rev \` — git commit + +If source is omitted — DCR searches connected registries. + +## `dcr tree` + +Displays the project dependency tree. + +```bash +dcr tree +``` + +Example output: + +``` +my-app v0.1.0 +├── fmt (registry) +│ └── spdlog (registry) +└── catch2 (registry) +``` + +For path dependencies, recursively shows their own dependencies (from their `dcr.toml`). diff --git a/docs-crowdin-export/pl-PL/docs/commands/gen-commands.mdx.mdx b/docs-crowdin-export/pl-PL/docs/commands/gen-commands.mdx.mdx new file mode 100644 index 0000000..466b04c --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/commands/gen-commands.mdx.mdx @@ -0,0 +1,73 @@ +--- +sidebar_label: Gen commands (vscode, clion, ...) +--- + +# Gen Commands + +## `dcr gen \` + +Generates IDE integration files. + +### vscode + +```bash +dcr gen vscode +``` + +Creates: + +* `.vscode/tasks.json` — `build` task (dcr build) +* `.vscode/launch.json` — debug launch configuration +* `.vscode/settings.json` — C/C++ settings (clangd paths, includes) +* `.vscode/extensions.json` — recommended extensions (vscode-clangd, vscode-lldb) + +### clion + +```bash +dcr gen clion +``` + +Creates: + +* `.idea/externalTools.xml` — external tools (build, run, clean, test) +* `.idea/customTargets.xml` — custom build targets +* `.idea/misc.xml` — C/C++ project settings +* `.idea/runConfigurations/\.xml` — per-binary run configurations + +### compile-commands + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` — standard format for clangd, cpptools, static analyzers. + +### project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata: + +```json +[ + { + "name": "my-app", + "version": "0.1.0", + "root": "/path/to/project", + "profile": "debug", + "language": "c", + "standard": "c17", + "cxx_standard": null, + "compiler": "/usr/bin/clang", + "kind": "bin", + "sources": ["src/main.c"], + "include_dirs": ["src"], + "lib_dirs": [], + "libs": [], + "cflags": ["-std=c17", "-O0", "-g"], + "ldflags": [] + } +] +``` diff --git a/docs-crowdin-export/pl-PL/docs/commands/project-commands.mdx.mdx b/docs-crowdin-export/pl-PL/docs/commands/project-commands.mdx.mdx new file mode 100644 index 0000000..e5e4eb7 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/commands/project-commands.mdx.mdx @@ -0,0 +1,40 @@ +--- +sidebar_label: Project commands (new, init) +--- + +# Project Commands + +## `dcr new \` + +Creates a new project with a standard structure and `dcr.toml`. The `name` argument is required. + +Only ASCII letters, digits, underscores `_` and hyphens `-` are allowed in the project name. + +```bash +dcr new my-app +dcr new my-app --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +Generates: + +* `dcr.toml` with basic fields +* `src/main.c` with a `main` template + +## `dcr init` + +Initializes a DCR project in the current (empty) directory. + +```bash +dcr init +dcr init --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +The project name is taken from the current directory name. The directory name must follow the same naming rules as `dcr new`. diff --git a/docs-crowdin-export/pl-PL/docs/commands/quality-commands.mdx.mdx b/docs-crowdin-export/pl-PL/docs/commands/quality-commands.mdx.mdx new file mode 100644 index 0000000..cdfe503 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/commands/quality-commands.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Quality commands (test, fmt) +--- + +# Quality Commands + +## `dcr test` + +Runs tests. + +```bash +dcr test # debug profile +dcr test --release # release profile +dcr test --debug # explicit debug +dcr test --help # detailed help +``` + +Before first use, initialize tests: + +```bash +dcr test --init +``` + +This creates `tests/dcr_test.h` (framework) and `tests/test.c` (template). + +What `dcr test` does: + +1. Builds the project +2. Collects `tests/*.c` files (`.c` only, not `.cpp`) +3. Compiles and links each test file +4. Runs each test binary +5. Prints summary: TOTAL, PASS, SKIP, FAIL +6. Returns non-zero exit code on any FAIL + +## `dcr fmt` + +Formats C/C++ source files using `clang-format`. + +```bash +dcr fmt +``` + +Processes: `src/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}` and `tests/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}`. + +Uses `.clang-format` at the project root (if present), otherwise default clang-format style. + +## `dcr lint` + +Runs `clang-tidy` on C/C++ source files for static analysis. + +```bash +dcr lint # show diagnostics +dcr lint --fix # apply fixes automatically +dcr lint --help # detailed help +``` + +Processes: `src/**/*.{c,cpp,cxx,cc}` and `tests/**/*.{c,cpp,cxx,cc}`. + +Without `--fix`, clang-tidy reports warnings and errors without modifying files. +With `--fix`, clang-tidy applies automatic suggestions in place. diff --git a/docs-crowdin-export/pl-PL/docs/commands/system-commands.mdx.mdx b/docs-crowdin-export/pl-PL/docs/commands/system-commands.mdx.mdx new file mode 100644 index 0000000..ec99cf1 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/commands/system-commands.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: System commands (setup, --help, ...) +--- + +# System Commands + +## `dcr setup` + +Shows configured registries from `~/.dcr/config.toml`. + +```bash +dcr setup +``` + +If `~/.dcr/config.toml` is not found, DCR returns an error. Create it manually: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +## `dcr --help` + +Shows help for all commands. + +```bash +dcr --help +``` + +## `dcr --version` + +Shows version and target triple. + +```bash +dcr --version # dcr 0.7.0 (x86_64-unknown-linux-gnu) +``` + +## `dcr --update` + +Self-update. Downloads the latest release binary from GitHub Releases and replaces the current one. + +```bash +dcr --update +``` + +Features: + +* Auto-detects platform and architecture +* Warns if installed via AUR (use package manager instead) +* Works on Linux, macOS, Windows diff --git a/docs-crowdin-export/pl-PL/docs/contributing.mdx.mdx b/docs-crowdin-export/pl-PL/docs/contributing.mdx.mdx new file mode 100644 index 0000000..d422910 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/contributing.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: Contributing +--- + +# Contributing + +## Setup + +```bash +git clone https://github.com/dexoron/dcr +cd dcr +cargo build +``` + +## Code style + +All code must be formatted with `cargo fmt`: + +```bash +cargo fmt +``` + +## Linting + +```bash +cargo clippy --all-targets -- -D warnings +``` + +## Tests + +```bash +cargo test --all-targets +``` + +## PR process + +1. Fork the repository +2. Create a branch: `git checkout -b feature/description` +3. Make changes +4. Run `cargo fmt && cargo clippy && cargo test` +5. Open a Pull Request + +## CI + +CI runs: + +* `cargo fmt --check` +* `cargo clippy --all-targets -- -D warnings` +* `cargo check --all-targets --all-features` +* Build on Linux, macOS, Windows +* Integration tests (compilation check) diff --git a/docs-crowdin-export/pl-PL/docs/faq.mdx.mdx b/docs-crowdin-export/pl-PL/docs/faq.mdx.mdx new file mode 100644 index 0000000..4680f99 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/faq.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: FAQ +--- + +# FAQ + +## Registry not found + +``` +error: registry not found +``` + +**Solution:** Make sure `~/.dcr/config.toml` exists: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +And check `DCR_INDEX_PATH`: + +```bash +echo $DCR_INDEX_PATH +``` + +## Compiler not found + +``` +error: compiler not found +``` + +**Solution:** Ensure a compiler is installed and available in PATH. + +```bash +which gcc +which clang +``` + +Or specify explicitly via `[toolchain]` in `dcr.toml`. + +## Ctrl+C during build + +DCR handles SIGINT: interrupts the current compilation and exits with non-zero code. + +## How to create a library? + +See [Library Recipe](/docs/recipes/library-project). + +## How to cross-compile to Windows? + +See [Cross-Compile Recipe](/docs/recipes/cross-to-windows). + +## How to create a multi-package project? + +See [Workspace Recipe](/docs/recipes/multi-package-workspace). + +## Bootloader / pure NASM OS image + +Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk image. + +See [OS-dev recipe](/docs/recipes/os-flat-bin-archive). + +## Lock file + +`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`. diff --git a/docs-crowdin-export/pl-PL/docs/getting-started/first-steps.mdx.mdx b/docs-crowdin-export/pl-PL/docs/getting-started/first-steps.mdx.mdx new file mode 100644 index 0000000..ce4bcf9 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/getting-started/first-steps.mdx.mdx @@ -0,0 +1,79 @@ +--- +sidebar_label: First steps +--- + +# First Steps + +## Create a project + +```bash +dcr new my-app +cd my-app +``` + +Structure: + +``` +my-app/ +├── dcr.toml +└── src/ + └── main.c +``` + +`dcr.toml`: + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +``` + +## Build + +```bash +dcr build +``` + +Output — `target/\/debug/my-app` (Linux) or `target/debug/my-app.exe` (Windows). + +Build profiles: + +```bash +dcr build --release # release build +dcr build --debug # debug (default) +``` + +## Run + +```bash +dcr run +``` + +Builds (if needed) and runs the binary. + +## First test + +```bash +dcr test --init # create test template +dcr test # run tests +``` + +## Formatting + +```bash +dcr fmt # clang-format with .clang-format +``` + +## Linting + +```bash +dcr lint # clang-tidy checks +dcr lint --fix # apply fixes automatically +``` diff --git a/docs-crowdin-export/pl-PL/docs/getting-started/installation.mdx.mdx b/docs-crowdin-export/pl-PL/docs/getting-started/installation.mdx.mdx new file mode 100644 index 0000000..d574bb4 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,109 @@ +--- +sidebar_label: Installation +--- + +# Installation + +## Linux (Dexoron Packages) + +Configure your package manager at https://pkg.dexoron.su and install: + +**Arch Linux** + +```sh +sudo pacman -Sy dcr +``` + +**Debian/Ubuntu** + +```sh +sudo apt update && sudo apt install dcr +``` + +**Fedora/RHEL** + +```sh +sudo dnf install dcr +``` + +## Arch Linux (AUR) + +```sh +yay -S dcr +``` + +## macOS / Linux (Homebrew) + +```sh +brew tap dexoron/dexoron +brew install dcr +``` + +## Snap (Linux) + +```sh +sudo snap install dcrup +``` + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +# or install to profile: +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +## Linux / macOS (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install.sh | sh +``` + +## BSD (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh +``` + +## Windows (PowerShell) + +```powershell +irm https://dcr.dexoron.su/install.ps1 | iex +``` + +## From source + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr && cargo build --release +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +``` + +## Post-install + +Verify the installation: + +```bash +dcr --version +``` + +Man pages are available after installation: + +```bash +man dcr +man dcr-build +``` + +To use the registry, create `~/.dcr/config.toml`: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` diff --git a/docs-crowdin-export/pl-PL/docs/ide-integration.mdx.mdx b/docs-crowdin-export/pl-PL/docs/ide-integration.mdx.mdx new file mode 100644 index 0000000..7b0fdf6 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/ide-integration.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: IDE Integration +--- + +# IDE Integration + +## VS Code + +```bash +dcr gen vscode +``` + +Generates in `.vscode/`: + +| File | Purpose | +| ----------------- | -------------------------------------------- | +| `tasks.json` | `build` task (dcr build) | +| `launch.json` | Debug launch configuration | +| `settings.json` | clangd/IntelliSense: include paths, standard | +| `extensions.json` | Recommends vscode-clangd, vscode-lldb | + +## CLion + +```bash +dcr gen clion +``` + +Generates in `.idea/`: + +| File | Purpose | +| ------------------------------------------------ | ----------------------------------------- | +| `externalTools.xml` | Build, Run, Clean, Test as external tools | +| `customTargets.xml` | Custom build targets | +| `misc.xml` | C/C++ project settings | +| `runConfigurations/\.xml` | Per-binary run configurations | + +## compile_commands.json + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` at project root. Standard format for clangd, C/C++ IntelliSense, static analyzers. + +## project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata (see [gen-commands](/docs/commands/gen-commands)). diff --git a/docs-crowdin-export/pl-PL/docs/license.mdx.mdx b/docs-crowdin-export/pl-PL/docs/license.mdx.mdx new file mode 100644 index 0000000..20a7804 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/license.mdx.mdx @@ -0,0 +1,33 @@ +--- +sidebar_label: License +--- + +# License + +## DCR + +DCR itself is [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html) licensed. + +> **Note:** DCR is a build tool, not a library. The GPL applies only to DCR's own source code. Projects built with DCR are not subject to DCR's license — their licensing is determined solely by their own code and dependencies. + +## Rust dependencies + +DCR is written in Rust. The following notable Rust crates are statically linked: + +| Crate | License | +| ------------------------------------------------------- | ----------------- | +| [`ureq`](https://crates.io/crates/ureq) | MIT OR Apache-2.0 | +| [`serde`](https://crates.io/crates/serde) | MIT OR Apache-2.0 | +| [`toml`](https://crates.io/crates/toml) | MIT OR Apache-2.0 | +| [`toml_edit`](https://crates.io/crates/toml_edit) | MIT OR Apache-2.0 | +| [`serde_json`](https://crates.io/crates/serde_json) | MIT OR Apache-2.0 | +| [`sha2`](https://crates.io/crates/sha2) | MIT OR Apache-2.0 | +| [`glob`](https://crates.io/crates/glob) | MIT OR Apache-2.0 | +| [`self-replace`](https://crates.io/crates/self-replace) | MIT OR Apache-2.0 | +| [`ctrlc`](https://crates.io/crates/ctrlc) | MIT OR Apache-2.0 | + +Full dependency tree is available in [`Cargo.lock`](https://github.com/dexoron/dcr/blob/main/Cargo.lock). The overwhelming majority are dual-licensed under MIT OR Apache-2.0. + +## Additional credits + +* DCR's CLI design and project model are inspired by [Cargo](https://doc.rust-lang.org/cargo/). diff --git a/docs-crowdin-export/pl-PL/docs/recipes/cross-to-windows.mdx.mdx b/docs-crowdin-export/pl-PL/docs/recipes/cross-to-windows.mdx.mdx new file mode 100644 index 0000000..1250349 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/recipes/cross-to-windows.mdx.mdx @@ -0,0 +1,49 @@ +--- +sidebar_label: Cross-compile to Windows +--- + +# Cross-Compile to Windows from Linux + +Building a Windows binary on Linux using mingw-w64. + +## Install toolchain + +```bash +# Ubuntu/Debian +sudo apt install mingw-w64 + +# Fedora +sudo dnf install mingw64-gcc mingw64-binutils +``` + +## Configuration + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +target = "x86_64-pc-windows-gnu" # explicit mingw, not msvc +``` + +## Build + +```bash +dcr build --target x86_64-pc-windows-gnu --release +``` + +Artifact: `target/x86_64-pc-windows-gnu/release/my-app.exe`. + +## Custom toolchain + +```toml +[toolchain] +cc = "x86_64-w64-mingw32-gcc" +cxx = "x86_64-w64-mingw32-g++" +``` diff --git a/docs-crowdin-export/pl-PL/docs/recipes/library-project.mdx.mdx b/docs-crowdin-export/pl-PL/docs/recipes/library-project.mdx.mdx new file mode 100644 index 0000000..336c122 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/recipes/library-project.mdx.mdx @@ -0,0 +1,70 @@ +--- +sidebar_label: Library project +--- + +# Library Project + +Creating a static library and using it in another project. + +## Step 1: Create the library + +```bash +dcr new my-lib +cd my-lib +``` + +`dcr.toml`: + +```toml +[package] +name = "my-lib" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +kind = "staticlib" +``` + +`src/my_lib.h`: + +```c +#ifndef MY_LIB_H +#define MY_LIB_H +int add(int a, int b); +#endif +``` + +`src/my_lib.c`: + +```c +#include "my_lib.h" +int add(int a, int b) { return a + b; } +``` + +## Step 2: Build + +```bash +dcr build --release +``` + +Artifacts: + +* `target/\/release/libmy-lib.a` (Linux) +* `target/release/my-lib.lib` (Windows) +* `target/include/` — header files + +## Step 3: Use in another project + +```bash +dcr new my-app +cd my-app +dcr add my-lib ../my-lib +``` + +Automatically: + +* Adds include path to `target/include/` of the library +* Adds lib path to `target/\/release/` +* Links `libmy-lib.a` / `my-lib.lib` diff --git a/docs-crowdin-export/pl-PL/docs/recipes/multi-package-workspace.mdx.mdx b/docs-crowdin-export/pl-PL/docs/recipes/multi-package-workspace.mdx.mdx new file mode 100644 index 0000000..dde7cb5 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/recipes/multi-package-workspace.mdx.mdx @@ -0,0 +1,103 @@ +--- +sidebar_label: Multi-package workspace +--- + +# Multi-Package Workspace + +A project with three packages: two libraries and a binary. + +## Structure + +``` +workspace/ +├── dcr.toml # root workspace +├── lib-core/ +│ ├── dcr.toml +│ └── src/core.c +├── lib-utils/ +│ ├── dcr.toml +│ └── src/utils.c +└── app/ + ├── dcr.toml + └── src/main.c +``` + +## Root dcr.toml + +```toml +[package] +name = "my-workspace" +version = "0.1.0" +type = "none" + +[build] +inherit = true +language = "c" +standard = "c11" +workspace_only = true + +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +## Packages + +`lib-core/dcr.toml`: + +```toml +[package] +name = "lib-core" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`lib-utils/dcr.toml`: + +```toml +[package] +name = "lib-utils" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`app/dcr.toml`: + +```toml +[package] +name = "app" +version = "0.1.0" +type = "none" + +[build] +kind = "bin" +``` + +## Build + +```bash +cd workspace +dcr build # builds everything in correct order +dcr build --workspace app # only app (lib-core and lib-utils built as deps) +dcr run # builds and runs main package +``` + +Build order (topological sort): + +1. `lib-core` +2. `lib-utils` (depends on lib-core) +3. `app` (depends on lib-core, lib-utils) diff --git a/docs-crowdin-export/pl-PL/docs/recipes/os-flat-bin-archive.mdx.mdx b/docs-crowdin-export/pl-PL/docs/recipes/os-flat-bin-archive.mdx.mdx new file mode 100644 index 0000000..457bce4 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/recipes/os-flat-bin-archive.mdx.mdx @@ -0,0 +1,89 @@ +--- +sidebar_label: OS-dev (flat-bin + archive) +--- + +# Pure ASM / boot image (flat-bin + archive) + +Minimal OS-dev style pipeline: assemble raw binaries with NASM, then pack a FAT floppy/image with an optional boot sector. + +## Project layout + +``` +myos/ + dcr.toml + src/ + boot.asm # boot sector (512 bytes) + kernel.asm # payload +``` + +For multiple flat artifacts, use a **workspace** (one member per binary) or separate packages; a single `flat-bin` package produces one binary per source stem. + +## Boot package (`flat-bin`) + +```toml +[package] +name = "boot" +version = "0.1.0" + +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +```bash +dcr build +# → target/<…>/debug/boot.bin (NASM -f bin, no link) +``` + +## Disk image after build + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" +``` + +* `format`: `fat12`, `fat16`, or `fat32` +* `size`: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default ~1.44 MiB) +* `bootsector`: written only when `offset` is omitted or `0` +* `from` may be a glob; `{profile}` is substituted in paths + +## C kernel → flat binary + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldflags = ["-T", "linker.ld"] +``` + +Pipeline: objects → temporary linked ELF → `objcopy -O binary` → `kernel.bin`. Requires `objcopy` / `llvm-objcopy` in PATH. + +## Other assemblers + +| Tool | Notes | +| -------- | --------------------------------------------------------------------------------------- | +| **FASM** | Write `format binary` in the source; DCR writes `\.bin` directly | +| **GAS** | Assemble `.s` → obj → `objcopy -O binary` | +| **LLC** | `language = "llvm_ir"` → obj → objcopy | +| **MASM** | COFF obj → objcopy (needs binutils/LLVM objcopy) | + +## Notes + +* Single-file `roots` are supported: `roots = ["src/boot.asm"]`. +* `--force` re-runs `build.steps` / `build.post_steps` as well as recompilation. +* Prefer `kind = "elf"` if you need a relocatable ELF kernel without stripping to raw binary. diff --git a/docs-crowdin-export/pl-PL/docs/reference/build-profiles.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/build-profiles.mdx.mdx new file mode 100644 index 0000000..694efb0 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/build-profiles.mdx.mdx @@ -0,0 +1,82 @@ +--- +sidebar_label: Build profiles +--- + +# Build Profiles + +Profiles allow overriding `[build]` fields for specific build modes. + +## Configuration + +```toml +[build] +language = "c" +standard = "c17" +cflags = ["-Wall"] + +[build.debug] +cflags = ["-O0", "-g"] + +[build.release] +cflags = ["-O3", "-DNDEBUG"] +``` + +## Merge rules + +Fields from `[build.\]` are merged on top of `[build]`: + +* **Scalar fields** (strings, numbers, bools) — replaced +* **Arrays** (`cflags`, `ldflags`, ...) — **appended** (extend the `[build]` array) + +Set `inherit = false` to disable array inheritance (only profile's own arrays are used). + +## Built-in profiles + +The default flags for each profile are composed from three config fields: + +| Field | debug default | release default | +| ----------- | ------------------ | --------------- | +| `opt_level` | `"0"` | `"3"` | +| `debug` | `true` | `false` | +| `warnings` | `["all", "extra"]` | `[]` | + +Which produce the equivalent compiler flags: + +| Profile | Effective flags | +| --------- | ---------------------------------------------------------- | +| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` | +| `release` | `-O3 -DNDEBUG` | + +Additional build options can be toggled per-profile: + +```toml +[build.release] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "1" + +[build.debug] +opt_level = "1" +debug = false +warnings = ["all", "error"] +``` + +## Target-specific profiles + +```toml +[build.linux] +cflags = ["-DLINUX"] + +[build.windows.debug] +cflags = ["-DWIN32", "-O0", "-g"] +``` + +Application order (highest priority first): + +1. `[build.\.\]` +2. `[build.\.\]` +3. `[build.\]` +4. `[build.\]` +5. `[build]` diff --git a/docs-crowdin-export/pl-PL/docs/reference/build-system.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/build-system.mdx.mdx new file mode 100644 index 0000000..10fbd56 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/build-system.mdx.mdx @@ -0,0 +1,136 @@ +--- +sidebar_label: Build system +--- + +# Build System + +## Compiler Backends + +DCR supports 7 compilation backends. Selection is automatic based on file extension and `build.compiler` value. + +| Backend | Files | When used | +| --------- | --------------------------------- | ------------------------------------- | +| `unix_cc` | `.c`, `.cpp`, `.cxx`, `.cc`, `.S` | gcc/clang on Linux/macOS/BSD | +| `msvc` | `.c`, `.cpp`, `.cxx`, `.cc` | Windows (cl, clang-cl) | +| `gas` | `.s` | ARM/ARM64 assembler (no preprocessor) | +| `nasm` | `.asm`, `.s` | x86/x86_64 NASM assembler | +| `masm` | `.asm` | MASM (ml/ml64) on Windows | +| `fasm` | `.asm`, `.fasm` | Flat Assembler | +| `llvm_ir` | `.ll` | LLVM IR via `llc -filetype=obj` | + +## Qt Support + +DCR provides native Qt support for automatic meta-object handling (MOC, UIC, RCC). + +Enable it by setting `build.qt = true` in `dcr.toml`. DCR will automatically detect Qt-related files (`.ui`, `.qrc`, `.h` with `Q_OBJECT`) and process them. + +```toml +[build] +qt = true +``` + +*Note: Requires `qt6` modules (Core, Widgets, Gui, Svg) installed via `pkg-config`.* + +Advanced customization is still possible via `build.steps` if special handling is needed: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +### Unix CC + +* Compiler resolved via `resolve_compiler()`: `DCR_COMPILER` > `DCR_CC` > `[toolchain]` > `build.compiler` > `PATH` +* Supports `.d` files for header dependency tracking +* Flags: `-std=`, `-MMD -MF`, `-c -o`, `-I`, `-L`, `-l` +* Conditional flags based on config: + * `freestanding` or bare-metal target: `-ffreestanding` (compile), `-nostdlib -static` (link) + * `lto`: `-flto` (compile + link) + * `panic = "abort"`: `-fno-exceptions` (C++ only), `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables` + +### MSVC + +* Supports cl.exe and clang-cl.exe +* Flags: `/std:`, `/Fo:`, `/Fe:`, `/I`, `/link` + +### GAS / NASM / MASM / FASM / LLVM-IR + +* GAS: `-I`, `-c -o`, `--defsym` +* NASM: `-I`, `-o`, `-D`, `-f` (format: win64/elf64/macho64/macho32/elf32; **`bin` when `kind = "flat-bin"`**) +* MASM: `/nologo /c /Fo\ ` +* FASM: ` \` (output path is the object file) +* LLVM IR: `-filetype=obj -o \` + +## Incremental Builds + +Three levels of incrementality: + +1. **mtime** — if output is newer than all inputs, skip +2. **`.d` files** — header change tracking (including transitive) +3. **SHA256 fingerprint** — recompile if compiler flags changed (stored in `.dcr_fingerprint`) + +## Parallel Compilation + +* `thread::scope` for thread pool +* Atomic task queue (`AtomicU64`) +* Mutex on stdout (`OUTPUT_MUTEX`) +* Thread count = `available_parallelism()`, capped by `build.codegen-units` if set + +## Build Kinds + +| Kind | Type | Path (Linux example) | +| ----------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `bin` | Executable | `target/\/\/\` (.exe on Windows) | +| `staticlib` | Static library | `target/\/\/lib\.a` (.lib) | +| `sharedlib` | Dynamic library | `target/\/\/lib\.so` (.dll/.dylib) | +| `efi` | UEFI application | `target/\/\/\.efi` | +| `elf` | ELF without stdlib | `target/\/\/\` | +| `none` | Compile only, no link | — | +| `custom` | Full filename+extension control | `target/\/\/\.\` | +| `flat-bin` | Raw binary | ASM: `\.bin` (NASM `-f bin` / FASM / GAS·MASM·LLC via objcopy); C/C++: `\.bin` (link + objcopy) | + +## Disk images (`[archive]`) + +After a successful build, if `[archive]` is present in `dcr.toml`, DCR formats a FAT volume and copies files from `layout` into the image. See [dcr.toml → archive](/docs/reference/dcr-toml#archive). + +## Build Steps + +DCR supports pre-build and post-build steps: + +* `build.steps` — commands before compilation +* `build.post_steps` — commands after compilation + +Substitutions: `{stem}`, `{in}`, `{out}`, `{profile}`, `{version}`, `{name}`. + +Example Qt codegen via build steps: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +## pkg-config + +Automatic lookup (read from raw config): + +```toml +[build] +pkg_config = ["sdl2", "gl"] +``` + +DCR runs `pkg-config --cflags sdl2 gl` and `pkg-config --libs sdl2 gl` and adds results to compiler/linker flags. + +## Variable Substitution + +Supported variables: + +| Variable | Description | +| ----------------------- | ---------------------------- | +| `{version}` | Package version | +| `{version_major}` | Major version part | +| `{version_minor}` | Minor version part | +| `{version_patch}` | Patch version | +| `{version_suffix}` | Suffix (e.g., `-rc1`) | +| `{version_suffix_dash}` | Suffix with dash | +| `{profile}` | Profile name (debug/release) | +| `{name}` | Package name | diff --git a/docs-crowdin-export/pl-PL/docs/reference/cross-compilation.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/cross-compilation.mdx.mdx new file mode 100644 index 0000000..2ca0cc7 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/cross-compilation.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Cross-compilation +--- + +# Cross-Compilation + +## Short Names + +DCR supports short platform names: + +| Short Name | Full Triple | +| ---------- | -------------------------- | +| `linux` | `x86_64-unknown-linux-gnu` | +| `macos` | `x86_64-apple-darwin` | +| `windows` | `x86_64-pc-windows-msvc` | + +```bash +dcr build --target windows +``` + +## Full Triples + +```bash +dcr build --target aarch64-unknown-linux-gnu +dcr build --target x86_64-pc-windows-gnu # mingw +dcr build --target armv7-unknown-linux-gnueabihf +``` + +## clang --target + +When using clang, DCR injects `--target=\` into CFLAGS. + +```toml +[build] +compiler = "clang" +target = "aarch64-unknown-linux-gnu" +# Auto: cflags += ["--target=aarch64-unknown-linux-gnu"] +``` + +## Bare-Metal / Freestanding + +For targets containing `none`, `-elf`, `eabi`, or `baremetal`, DCR automatically: + +1. **Disables default flags** — no system include paths, no `-l` libc +2. **Injects `-ffreestanding`** at compile time and `-nostdlib -static` at link time + +You can also enable freestanding mode explicitly: + +```toml +[build] +freestanding = true +``` + +```bash +dcr build --target aarch64-none-elf +``` + +## Target Directory + +By default, the compilation output directories are structured as follows: + +* **Linux and BSD**: Always output to `target/\/\/` (using host triple if no target is specified). +* **macOS and Windows (without target)**: Output to `target/\/`. +* **macOS and Windows (with explicit target)**: Output to `target/\/\/`. diff --git a/docs-crowdin-export/pl-PL/docs/reference/dcr-toml.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/dcr-toml.mdx.mdx new file mode 100644 index 0000000..240399b --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,261 @@ +--- +sidebar_label: dcr.toml overview +--- + +# dcr.toml + +Main project configuration file. Located at the project root. + +## Structure + +```toml +[package] +# required fields + +[build] +# build settings + +[build.debug] # optional: debug override +[build.release] # optional: release override + +[build.linux] # optional: Linux override +[build.windows] # optional: Windows override +[build.windows.debug] # target + profile combination + +[toolchain] +# compiler/linker paths + +[dependencies] +# project dependencies + +[workspace] +# multi-package configuration + +[run] +# run settings + +[archive] +# optional: pack FAT disk image after build +``` + +## [package] + +| Field | Required | Description | +| --------- | -------- | ------------------------------------------- | +| `name` | yes | Project name | +| `version` | yes | Semantic version | +| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) | +| `license` | no | SPDX license identifier | +| `author` | no | Author | + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "app" +license = "MIT" +author = "John Doe" +``` + +## [build] + +... + +* `build.qt` — (bool) Enable automatic Qt meta-object handling (MOC, UIC, RCC). Requires `qt6` modules installed via `pkg-config`. + +| Field | Default | Description | +| ---------------- | ------------- | --------------------------------------------------------------------------------------------------------- | +| `language` | `"c"` | `"c"`, `"c++"`, `"cpp"`, `"cxx"`, `"asm"`, `"llvm_ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to `"c"`) | +| `standard` | `"c11"` | C standard (`c11`, `c17`, `c23`) | +| `cxx_standard` | — | C++ standard (`c++17`, `c++20`, `c++23`) | +| `compiler` | `"clang"` | Preferred compiler (optional, defaults to `"clang"`) | +| `kind` | `"bin"` | `bin`, `staticlib`, `sharedlib`, `efi`, `elf`, `none`, `custom`, `flat-bin` | +| `target` | host | Target triple for cross-compilation | +| `platform` | `"native"` | `native`, `efi` | +| `cflags` | `[]` | Additional C/C++/ASM flags | +| `ldflags` | `[]` | Additional linker flags | +| `filename` | `""` | Custom output file name | +| `extension` | `""` | Custom file extension (for `flat-bin`, default is `bin`) | +| `roots` | `["src"]` | Source roots: directories and/or individual source/header files | +| `exclude` | `[]` | Exclude patterns | +| `include` | `[]` | Additional include directories | +| `src_disable` | `false` | Disable auto source discovery | +| `inherit` | `false` | Inherit build from workspace root | +| `clean` | `[]` | Glob patterns for custom clean paths | +| `out_dir` | `""` | Custom output directory | +| `workspace_only` | `false` | Workspace-only, not built standalone (no `language`/`compiler` required) | +| `freestanding` | `false` | Compile in freestanding mode (`-ffreestanding` + `-nostdlib -static`) | +| `opt_level` | — | Optimization level: `0`-`3`, `"s"`, `"z"` (derived from profile if omitted) | +| `debug` | profile-based | Emit debug symbols (`-g`): `true` in debug, `false` in release | +| `lto` | `false` | Link-time optimization (`-flto` for both compiler and linker) | +| `strip` | `false` | Strip symbols from output (`-s` in ldflags) | +| `warnings` | `[]` | Warning flags (e.g. `"all"`, `"extra"`, `"pedantic"`); engine adds `-Wall -Wextra` in debug if empty | +| `panic` | `""` | Panic strategy: `"abort"` disables exceptions and unwind tables | +| `codegen-units` | `""` | Max parallel compilation jobs (`"0"` = auto) | +| `qt` | `false` | Enable automatic Qt meta-object handling (MOC, UIC, RCC) | + +Settings from raw config (not in typed struct): + +* `pkg_config` — list of pkg-config packages +* `ldscript` — linker script path +* `build.steps` / `build.post_steps` — codegen steps + +## Per-language overrides: `[build.c]`, `[build.cxx]`, `[build.asm]`, `[build.llvm_ir]` + +Each language can have its own table that overrides the flat `[build]` settings: + +```toml +[build] +compiler = "clang" +standard = "c11" + +[build.c] +standard = "c23" +compiler = "gcc" + +[build.cxx] +standard = "c++23" +compiler = "g++" + +[build.asm] +compiler = "nasm" +flags = ["-felf64"] + +[build.llvm_ir] +compiler = "llc" +``` + +The flat `[build]` acts as fallback; per-language tables take precedence for their language. + +Example: + +```toml +[build] +language = "c++" +standard = "c23" +cxx_standard = "c++23" +compiler = "clang" +kind = "sharedlib" +cflags = ["-Wall", "-Wextra"] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "2" +``` + +## [toolchain] + +```toml +[toolchain] +cc = "/usr/bin/clang" +cxx = "/usr/bin/clang++" +as = "/usr/bin/as" +ar = "/usr/bin/ar" +ld = "/usr/bin/ld.lld" +``` + +Raw config also supports `uic`, `moc`, `rcc` for Qt codegen. + +## [dependencies] + +See [dependencies](/docs/reference/dependencies). + +## [run] + +```toml +[run] +cmd = "./target/{profile}/{name}" +``` + +Substitutions: + +* `{version}` — package version +* `{version_major}`, `{version_minor}`, `{version_patch}`, `{version_suffix}`, `{version_suffix_dash}` — version parts +* `{profile}` — debug / release +* `{name}` — package name + +Default `cmd` = `./target/{profile}/{name}` (macOS/Windows) or `./target/\/\/\` (Linux). + +## [workspace] + +See [workspaces](/docs/reference/workspaces). + +## [archive] + +Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`). + +| Field | Required | Description | +| ------------ | -------- | ------------------------------------------------------------------------------------------- | +| `output` | yes | Image path relative to project root (`{profile}` allowed) | +| `format` | yes | `fat12`, `fat16`, or `fat32` | +| `size` | no | Image size: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default `1474560` ≈ 1.44 MiB) | +| `offset` | no | Byte offset of the FAT volume inside the image (default `0`) | +| `label` | no | Volume label (max 11 chars, default `VOLUME`) | +| `bootsector` | no | Path to a 512-byte boot sector written at offset 0 when `offset` is 0 (`{profile}` allowed) | +| `layout` | no | List of `{ from, to }` entries (files or globs → path inside the volume) | + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" + +[[archive.layout]] +from = "assets/*" +to = "/" +``` + +Typical pairing with `kind = "flat-bin"` (NASM `-f bin`) for bootloaders and pure-ASM OS images. + +## `flat-bin` (kind) + +Produces a raw binary (default extension `bin`) for boot sectors, kernels, and freestanding payloads. + +### Assemblers + +| Tool | Language / compiler | How flat-bin is produced | +| ---- | ------------------------------------------ | -------------------------------------------- | +| NASM | `language = "asm"`, `compiler = "nasm"` | `-f bin` → `\.bin` | +| FASM | `compiler = "fasm"` | direct write (use `format binary` in source) | +| GAS | `compiler = "as"` / `"gas"` | assemble → `objcopy -O binary` | +| MASM | `compiler = "ml"` / `"ml64"` | assemble → `objcopy -O binary` | +| LLC | `language = "llvm_ir"`, `compiler = "llc"` | `-filetype=obj` → `objcopy -O binary` | + +```toml +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +### C / C++ + +Compile all sources, link with `-nostdlib -static` (plus your `ldflags` / `ldscript`), then convert the intermediate ELF/PE with `objcopy -O binary` to `\.bin`. + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldscript = "linker.ld" +ldflags = ["-T", "linker.ld"] +``` + +Notes: + +* Multi-file **ASM** packages emit one `\.bin` per source; **C/C++** emit a single project binary. +* `objcopy` tools tried in order: `llvm-objcopy`, `objcopy`, `gobjcopy`. +* Incompatible with `build.qt = true`. +* `dcr run` rejects `flat-bin` (not a host executable). diff --git a/docs-crowdin-export/pl-PL/docs/reference/dependencies.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/dependencies.mdx.mdx new file mode 100644 index 0000000..97a1a6e --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/dependencies.mdx.mdx @@ -0,0 +1,84 @@ +--- +sidebar_label: Dependencies +--- + +# Dependencies + +## Formats + +The `[dependencies]` section supports three formats: + +### String (registry) + +```toml +[dependencies] +fmt = "10.1.1" +spdlog = "1.12" +catch2 = "3.4.0" +``` + +The version string is used as-is for registry lookup. + +### Table (git) + +```toml +[dependencies] +fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" } +``` + +Fields: `git`, `branch`, `tag`, `rev`. + +### Table (path) + +```toml +[dependencies] +mylib = { path = "../mylib" } +``` + +## Registry + +DCR uses a package registry for dependency lookup by name. + +```toml +# ~/.dcr/config.toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrides the path to `index.json`. + +## Git dependencies + +Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources: + +* `branch` — switch to a branch +* `tag` — switch to a tag +* `rev` — switch to a specific commit +* `features` — feature flags (parsed, but does not affect build) + +## Path dependencies + +Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`. + +```toml +[dependencies] +mylib = { path = "/abs/path/to/lib" } +mylib = { path = "../relative/path" } +``` + +*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.* + +## dcr.lock + +Dependency lock file. Contains package names and sources. + +Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`. + +## Resolution process + +1. Load all dependencies (registry → git → path) +2. For path deps: recursively read their `dcr.toml` +3. For registry deps: search `index.json` +4. For git deps: clone to cache +5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler diff --git a/docs-crowdin-export/pl-PL/docs/reference/environment-variables.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/environment-variables.mdx.mdx new file mode 100644 index 0000000..8b75814 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/environment-variables.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Environment variables +--- + +# Environment Variables + +## DCR_COMPILER + +Overrides the compiler for all languages. **Highest priority.** + +```bash +export DCR_COMPILER=clang +dcr build +``` + +Compiler resolution priority: + +1. `DCR_COMPILER` (env) +2. `DCR_CC` / `DCR_CXX` / `DCR_AS` (env) +3. `[toolchain]` (dcr.toml) +4. `build.compiler` (dcr.toml) +5. `PATH` + +## DCR_CC / DCR_CXX / DCR_AS + +Per-language override (lower priority than `DCR_COMPILER`, higher than `[toolchain]`). + +```bash +export DCR_CC=gcc-14 +export DCR_CXX=g++-14 +export DCR_AS=arm-linux-gnueabihf-as +``` + +## DCR_LD / DCR_AR + +Override linker and archiver. + +```bash +export DCR_LD=ld.lld +export DCR_AR=llvm-ar +``` + +## DCR_DEBUG + +Enables debug mode — prints all compilation commands to stderr before execution. + +```bash +export DCR_DEBUG=1 +dcr build +``` + +## DCR_INDEX_PATH + +Overrides the path to the registry `index.json`. + +```bash +export DCR_INDEX_PATH=/custom/path/index.json +``` + +Default: `~/.dcr/index.json`. diff --git a/docs-crowdin-export/pl-PL/docs/reference/platform-support.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/platform-support.mdx.mdx new file mode 100644 index 0000000..a97eab5 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/platform-support.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Platform support +--- + +# Platform Support + +## Target Triples + +DCR normalizes target triples. Short platform names are expanded to full triples. + +### Linux + +``` +target/-unknown-linux-// +``` + +Architectures: `x86_64`, `aarch64`, `i686`, `armv7`, `riscv64` (host-detected). +Environments: `gnu` (default), `musl`. + +Artifact type: ELF. Extensions: `.so` (sharedlib), `.a` (staticlib). + +### macOS + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64` (host-detected). + +Extensions: `.dylib` (sharedlib), `.a` (staticlib). + +### Windows + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64`. +Environments: `msvc` (default), `gnu` (MinGW). + +Extensions: `.exe` (bin), `.lib` (staticlib), `.dll` (sharedlib), `.efi` (UEFI). + +### BSD + +``` +target/-unknown-// +``` + +Supported systems: `freebsd`, `openbsd`, `netbsd`, `dragonfly`. + +## Host Detection + +DCR uses `std::env::consts::ARCH` and `std::env::consts::OS` for host platform detection. Used as fallback when `target` is not specified. diff --git a/docs-crowdin-export/pl-PL/docs/reference/workspaces.mdx.mdx b/docs-crowdin-export/pl-PL/docs/reference/workspaces.mdx.mdx new file mode 100644 index 0000000..082be1e --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/workspaces.mdx.mdx @@ -0,0 +1,88 @@ +--- +sidebar_label: Workspaces +--- + +# Workspaces + +Workspaces allow managing multiple packages in a single repository. + +## Configuration + +```toml +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +### Member fields + +| Field | Description | +| ------ | ------------------------------------------------ | +| `path` | Path to the package (relative to workspace root) | +| `deps` | Dependencies on other members | +| `main` | Mark as the main package | + +## Topological sort + +DCR automatically sorts packages by dependencies: package A is built before B if B depends on A. + +Cyclic dependencies are detected and cause an error. + +## Build + +```bash +dcr build # build all packages in dependency order +dcr build --workspace app # build only app (dependencies built automatically) +``` + +When building a workspace, DCR automatically injects include and library paths of dependent workspace members: + +* **Include Paths**: Automatically resolves and injects header directories of dependencies, including the member's `src/` directory, local `include/` directory, and the packaged `target/include` directory. +* **Library Paths**: Injects compiled library search paths (`target/lib` as well as target-specific build folders) to allow automatic linking with member libraries. + +## Clean + +```bash +dcr clean # clean only root target/ +dcr clean --all # clean target/ of all packages +``` + +## Inheritance + +If a member has `inherit = true` in its `[build]` section, fields from the root `[build]` are merged into the member: + +```toml +# root dcr.toml +[build] +inherit = true +language = "c" +standard = "c17" + +# member inherits language and standard +``` + +## Workspace-only root (no build of its own) + +A workspace root can set `workspace_only = true` — it won't be built itself, and doesn't need `language` or `compiler`: + +```toml +[package] +name = "my-workspace" +version = "0.1.0" + +[build] +workspace_only = true +kind = "bin" + +[workspace] +lib-core = { path = "lib-core" } +app = { path = "app", deps = ["lib-core"] } +``` diff --git a/docs-crowdin-export/pl-PL/docs/self-update.mdx.mdx b/docs-crowdin-export/pl-PL/docs/self-update.mdx.mdx new file mode 100644 index 0000000..f9e7e88 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/self-update.mdx.mdx @@ -0,0 +1,46 @@ +--- +sidebar_label: Self Update +--- + +# Self Update + +## dcr --update + +Automatic update to the latest version. Downloads a binary (not an archive) from GitHub Releases and replaces the current executable. + +```bash +dcr --update +``` + +## How it works + +1. DCR detects the current platform and architecture +2. Fetches the latest release from `api.github.com/repos/dexoron/dcr/releases/latest` +3. Compares versions +4. Downloads the matching asset (direct binary URL, not archive) +5. Replaces the current executable via `self_replace` + +## Asset naming + +Pattern: `dcr-\` or `dcr-\.exe` + +| Platform | Asset name | +| -------------- | -------------------------------- | +| Linux x86_64 | `dcr-x86_64-unknown-linux-gnu` | +| macOS x86_64 | `dcr-x86_64-apple-darwin` | +| macOS ARM64 | `dcr-aarch64-apple-darwin` | +| Windows x86_64 | `dcr-x86_64-pc-windows-msvc.exe` | + +## AUR + +If DCR was installed via AUR, `--update` shows a warning: + +``` +Update via package manager: yay/paru -Syu {package_name} or sudo pacman -Syu {package_name} +``` + +## Errors + +* Cannot detect platform — error +* Cannot fetch release — error with URL +* No write permission — error (use `sudo` or manual install) diff --git a/docs-crowdin-export/pl-PL/docs/testing/running-tests.mdx.mdx b/docs-crowdin-export/pl-PL/docs/testing/running-tests.mdx.mdx new file mode 100644 index 0000000..934b0ed --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/testing/running-tests.mdx.mdx @@ -0,0 +1,45 @@ +--- +sidebar_label: Running tests +--- + +# Running Tests + +## Execution + +```bash +dcr test +``` + +Builds the project, then compiles and runs test files from `tests/`. + +## Profiles + +```bash +dcr test # debug (default) +dcr test --release # release +dcr test --debug # explicit debug +``` + +## Output + +``` +===================== + Testsuite summary +===================== +TOTAL: 5 +PASS: 3 +SKIP: 1 +FAIL: 1 +===================== +``` + +## Exit code + +* 0 — all tests passed (FAIL = 0) +* 1 — test failures or build error + +## What gets built + +* All `.c` files from `tests/` (`.cpp` not supported) +* Include path: `tests/` (for `dcr_test.h`) +* Linked with project if `package.type = "lib"` or `kind = "staticlib"`/`"sharedlib"` diff --git a/docs-crowdin-export/pl-PL/docs/testing/test-framework.mdx.mdx b/docs-crowdin-export/pl-PL/docs/testing/test-framework.mdx.mdx new file mode 100644 index 0000000..ae43679 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/testing/test-framework.mdx.mdx @@ -0,0 +1,69 @@ +--- +sidebar_label: Test framework (EXPECT, TEST, ...) +--- + +# Test Framework + +DCR has a built-in minimal test framework for C. + +## Macros + +### `EXPECT(expr)` + +Asserts that an expression is true. + +```c +EXPECT(1 + 1 == 2); +EXPECT(ptr != NULL); +``` + +### `SKIP(reason)` + +Skips a test with a message. + +```c +SKIP("not implemented on Windows"); +``` + +### `TEST(name)` + +Defines a test. + +```c +TEST(addition) { + EXPECT(1 + 1 == 2); + EXPECT(2 + 2 == 4); +} +``` + +### `TEST_CASE(name)` + +Registers a test case. + +```c +TEST_CASE(math) { + EXPECT(1 + 1 == 2); +} +``` + +## Initialization + +```bash +dcr test --init +``` + +Creates: + +* `tests/dcr_test.h` — framework header (do not edit) +* `tests/test.c` — template with example test + +## Structure + +``` +tests/ +├── dcr_test.h # framework (do not edit) +├── test.c # main tests +└── ... # additional .c test files +``` + +Only `.c` files are compiled (`.cpp` is not supported). diff --git a/docs-crowdin-export/ru-RU/docs/README.mdx.mdx b/docs-crowdin-export/ru-RU/docs/README.mdx.mdx new file mode 100644 index 0000000..f00c04a --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/README.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Introduction +--- + +# DCR — C/C++ Build Tool & Package Manager + +
+Quick reference + +```bash +# Installation +curl -fsSL https://dcr.dexoron.su/install.sh | sh + +# Create a project +dcr new my-app +cd my-app + +# Build and run +dcr build +dcr run + +# Run tests +dcr test + +# Add a dependency +dcr add fmt + +# Generate IDE files +dcr gen vscode +``` + +
+ +## Contents + +| Section | Description | +| ----------------------------------------------------- | --------------------------------------------- | +| [Getting Started](/docs/getting-started/installation) | Installation and first steps | +| [Commands](/docs/commands/project-commands) | All CLI commands | +| [Reference](/docs/reference/dcr-toml) | Configuration, build, dependencies, platforms | +| [Testing](/docs/testing/test-framework) | Built-in test framework | +| [Recipes](/docs/recipes/cross-to-windows) | Common scenarios | +| [IDE Integration](/docs/ide-integration) | VS Code, CLion, compile_commands.json | +| [Self Update](/docs/self-update) | Auto-update | +| [FAQ](/docs/faq) | Frequently asked questions | +| [Changelog](/docs/changelog) | Version history | +| [License](/docs/license) | DCR and vendored library licenses | +| [Contributing](/docs/contributing) | DCR development | + +## Features + +* **Incremental builds** — mtime + `.d` headers + SHA256 fingerprint +* **Parallel compilation** — thread::scope, atomic task queue +* **7 backends** — gcc/clang (unix_cc), MSVC/clang-cl (msvc), GAS, NASM, MASM, FASM, LLVM IR +* **8 project kinds** — bin, staticlib, sharedlib, efi, elf, none, custom, flat-bin +* **Disk images** — optional `[archive]` packs FAT12/16/32 images after build +* **Cross-compilation** — short names and full triples +* **Profiles** — debug / release with field overrides +* **Workspaces** — multi-package projects with topological sort +* **Registry + Git + Path** — three dependency mechanisms +* **IDE generation** — VS Code, CLion, compile_commands.json, JSON metadata +* **pkg-config** — automatic system library discovery +* **Per-command `--help`** — `dcr build --help`, `dcr new --help`, etc. +* **Man pages** — `man dcr`, `man dcr-build`, `man dcr-new` diff --git a/docs-crowdin-export/ru-RU/docs/changelog.mdx.mdx b/docs-crowdin-export/ru-RU/docs/changelog.mdx.mdx new file mode 100644 index 0000000..6f494b7 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/changelog.mdx.mdx @@ -0,0 +1,193 @@ +--- +sidebar_label: Changelog +--- + +# Changelog + +## 0.8.1 (2026-07-20) + +### Added + +* **`build.kind = "flat-bin"`** — raw binary (default `.bin`) for OS-dev payloads: + * **NASM** — `-f bin` → `\.bin` + * **FASM** — direct output (`format binary` in source) + * **GAS / MASM / LLC** — object → `objcopy -O binary` → `\.bin` + * **C/C++** — objects → freestanding link → `objcopy -O binary` → `\.bin` + * Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit +* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths. +* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory. + +### Changed + +* **`--force`** also re-runs `build.steps` and `build.post_steps`. +* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member. + +### Dependencies + +* `fatfs = "0.3"` for FAT image packing. + +## 0.8.0 (2026-07-18) + +### Added + +* **Dedicated Build Engine (`src/core/build/engine.rs`)** — decoupled the build orchestration logic completely from the CLI front-end wrapper in `src/cli/build.rs` to a reusable, decoupled core build engine. +* **Polymorphic Language Model (`Language` trait)** — introduced the abstract `Language` trait (`src/core/build/language/mod.rs`). File scanning, compiler resolution, and flags handling are now encapsulated in dedicated language modules for C, C++ (including Qt code generation), LLVM IR, and ASM (GAS, NASM, FASM, MASM). +* **Polymorphic Compilation Dispatch (`Builder` trait)** — introduced the `Builder` trait to generalize builder invocations (`src/core/build/builder/mod.rs`). Consolidated GCC/Clang logic into `builder/cc_common.rs` and Microsoft Visual C++ logic into `builder/msvc/`. +* **Per-Language Configuration overrides (`[build.\]`)** — introduced support for configuring language-specific compiler, standard, and flags (e.g. `[build.c]`, `[build.cxx]`, `[build.asm]`) independently in `dcr.toml`. +* **Automatic Workspace Dependency Injection** — during workspace builds, include/lib paths of dependent workspace members (including their source headers, local `include/` folders, and build target `target/include` / `target/lib` folders) are automatically resolved and injected. +* **`BuildReporter` Event System** — decoupled build orchestration output into a structured event-driven reporter model (`src/core/build/report.rs`), making DCR suitable for library embedding and IDE integrations without stderr capturing. +* **Build Cancellation Support** — introduced thread-safe cancellation tokens (`Arc\`) allowing clients to safely abort compile runs mid-execution. +* **TOML Formatting & Custom Keys Preservation** — migrated the config editor to `toml_edit`, preserving all unknown/user-defined TOML keys, structures, and comments during file write operations (e.g., in `dcr add`). +* **Path Dependencies Target Include Resolution** — local path dependencies configured via tables now correctly expose headers built and packaged into their `target/include` folder to consumer packages. +* **Modular Integration Test Suite** — refactored the monolith `tests/cli_basic.rs` file into clean, specialized integration tests: `cli_build.rs`, `cli_deps.rs`, `cli_lint.rs`, `cli_new.rs`, `cli_qt.rs`, `cli_test.rs`, `cli_workspace.rs`. + +### Changed + +* **Consolidated Linking and Archiving** — artifact generation (linking executables/shared libraries and archiving static libraries) consolidated into a single `src/core/build/builder/artifact.rs` module. +* **Workspace-Aware member execution** — `dcr run` executed at the workspace root of a `workspace_only` project now triggers the member build inside the workspace context using the `--workspace` parameter, preventing standalone build issues. +* **Elimination of Global State** — removed global variables and states from the build core, encapsulating build logic inside isolated `BuildContext` structs for thread safety. +* **Build Cache Separation** — relocated mtime tracking, incremental caching, and header-dependency checking logic to `src/core/build/cache.rs`. +* **Modularized Pre-build Steps** — decoupled generator scripts and pre-build commands parsing into `src/core/build/steps.rs`. + +## 0.7.4 (2026-06-17) + +### Added + +* **Native Qt support** — automatic meta-object handling (MOC, UIC, RCC) added when `build.qt = true` is set in `dcr.toml`. +* **`dcr lint` command** — C/C++ static analysis via `clang-tidy`. Supports `--fix` for automatic fixes. Respects `build.roots` and `build.src_disable` from config. +* **Three new assembler backends**: + * **MASM** (`compiler = "ml"` / `"ml64"`) — Microsoft Macro Assembler. + * **FASM** (`compiler = "fasm"`) — Flat Assembler. + * **LLVM IR** (`compiler = "llc"`) — compiles `.ll` files via `llc -filetype=obj`. +* **Shared ASM pipeline** — linking and archiving logic consolidated into `core/builder/asm.rs`. Adding a new assembler backend now takes ~30 lines. +* **Filesystem utilities** — `to_hex()` and `home_dir()` extracted to `utils/fs.rs`. +* **Build utilities** — `normalize_target()`, `normalize_kind()`, `normalize_platform()`, `default_profile_flags()` extracted to `utils/build.rs`. +* **Backend helpers** — `asm_lang_flag()`, `source_extensions()`, `elapsed_secs()` added to `core/builder/common.rs`. +* **Full Bare-Metal / Freestanding Automation** — introduced the `build.freestanding = true` configuration option. When enabled (or when a bare-metal target is detected), DCR automatically injects `-ffreestanding` during compilation and both `-nostdlib` and `-static` during linking. +* **Artifact Optimization (LTO & Strip)** — added `build.lto` (auto-injects `-flto` for compiler and linker) and `build.strip` (automatically strips debug symbols via linker `-s` flag) options to `dcr.toml`. +* **Compilation Thread Control** — added the `build.codegen-units` option to strictly limit the maximum number of parallel jobs utilized by the custom `parallel_build` worker pool. +* **Panic Behavior Management** — added `build.panic = "abort"` support. For C++ targets, it automatically strips exception handling and unwind tables via `-fno-exceptions`, `-fno-unwind-tables`, and `-fno-asynchronous-unwind-tables`. + +### Changed + +* **Intelligent Default Flags Generation** — automated injection of fallback optimization (`-O3`/`-O0`), debug (`-g`), and warning (`-Wall -Wextra`) flags is now suppressed for bare-metal and freestanding builds if `build.cflags` are overridden. +* **Centralized Bare-Metal Detection** — relocated the `is_bare_metal_target` helper to common build utilities (`src/utils/build.rs`) for unified access across the building core. +* **Architectural Refactoring**: + * Renamed `src/config.rs` to `src/templates.rs`. + * Started consolidation of configuration and build orchestration logic. + +## 0.7.3 (2026-06-13) + +### Added + +* **`--vcs` option for `new` and `init` commands** — introduced explicit version control system selection via `--vcs \`. +* **Git metadata integration in `--version`** — the CLI now appends the current short commit hash and a `-dirty` suffix if there are uncommitted changes in the DCR repository. +* **Automatic `.gitignore` generation** — Git repository initialization now automatically writes a `.gitignore` file excluding the `/target` directory. +* **Nested repository prevention** — automatic Git initialization is now skipped if `dcr new` or `dcr init` is executed inside an already existing Git repository. +* **VCS verification tests** — added `new_vcs_options_work` and `init_vcs_options_work` integration tests to ensure reliable repository behavior. + +### Changed + +* **Complete removal of `git2` dependency** — all Git actions (dependency fetching, VCS setup, status checks) are now delegated to the system `git` executable via `Command`. This simplifies compilation and drops the need for `vendored` and `openssl` features. +* **Migrated from `reqwest` to `ureq`** — replaced the heavy `reqwest` crate in `flag_update.rs` with the lightweight synchronous `ureq 2.10` client, reducing overhead and the final binary size. + +## 0.7.2 (2026-06-07) + +### Added + +* `default_target_triple()` now respects `target_env` — Linux (gnu/musl) and Windows (msvc/gnu) use the correct environment instead of hardcoded values. + +### Fixed + +* **macOS Apple Silicon builds failed with `_main` undefined** — `--target=` is now passed to ldflags, not just cflags. `default_target_triple()` uses `std::env::consts::ARCH` on macOS instead of hardcoded `x86_64`. +* **GitHub Stars and GPL-3.0 badges not rendering in README** — badge block converted to pure HTML. + +### Changed + +* Default target resolution extracted into shared `default_target_triple()` — removed duplication across build, run, clean. + +## 0.7.1 (2026-06-02) + +### Added + +* **`--help` for all commands** — `dcr build --help`, `dcr run --help`, `dcr new --help`, + `dcr init --help`, `dcr clean --help`, `dcr add --help`, `dcr fmt --help`, + `dcr setup --help`, `dcr tree --help`, `dcr gen --help`, `dcr --update --help`, + `dcr test --help`. All output uses styled headers (green) and usage lines (cyan). +* **Man pages** — 12 troff pages in `man/man1/`: `dcr.1`, `dcr-build.1`, + `dcr-run.1`, `dcr-new.1`, `dcr-init.1`, `dcr-clean.1`, `dcr-add.1`, `dcr-test.1`, + `dcr-gen.1`, `dcr-fmt.1`, `dcr-tree.1`, `dcr-setup.1`. +* **Man pages in all packaging** — install.sh, install_bsd.sh, AUR PKGBUILD, + Debian (cargo-deb), RPM (cargo-generate-rpm), Nix (postInstall), Homebrew + (resource), Snap, GitHub Release assets. +* **Project name validation** — `dcr init` and `dcr new` now validate names before + creating files. Only ASCII letters, digits, `_` and `-` are allowed. +* **`documentation` and `homepage` fields** — added to `Cargo.toml`. +* **Release profile optimizations** — `opt-level = "z"`, LTO, `codegen-units = 1`, + `panic = "abort"`, `strip = true` for smaller binaries. +* **Linux i686, armv7, riscv64 targets** — added to release workflow and install scripts. +* **Linux musl i686, armv7 targets** — cross-compiled via zigbuild in CI. +* **AUR packages** — `dcr-dev`, `dcr-dev-bin` publishing workflow. +* **Snap publishing** — automated Snapcraft publishing in CI. +* **Snap badge** — in README. + +### Changed + +* **`validate_package_name` made public** — callable from CLI commands. +* **README platform table** — reorganized: libc variants as separate OS rows, + removed extra columns. Linux architecture list updated. +* **`gen.rs` no-args output** — now uses styled output instead of raw `eprintln!`. +* **`tree.rs`, `fmt.rs`, and `setup.rs`** — now accept arguments for `--help`. +* **README install commands** — `| bash` → `| sh` for POSIX compatibility. + +### Fixed + +* **`dcr new \` creates directory then fails** — validation now + happens before any file operations. +* **`dcr init` on invalid directory name** — same fix. +* **Man pages missing in installed packages** — now shipped in all formats. +* **Windows drive letter false positive** — in dependency file parser. +* **CRLF (`\r\n`) breaks dependency parser** — now handles mixed line endings. +* **Newline after backslash not consumed** — in `parse_d_file` escape handling. + +## 0.7.0 (2026-06-01) + +### Added + +* **OpenBSD and NetBSD target support** — full platform routing with dynamic target triples using `std::env::consts::ARCH` and `std::env::consts::OS`. Affects `build`, `run`, `clean` commands and the platform module. +* **`src/platform/bsd.rs`** — new BSD platform module (shared by FreeBSD, OpenBSD, NetBSD) providing `bin_path`, `lib_path`, `elf_path`, `efi_path`, `shared_lib_path`. +* **`build.out_dir` config option** — custom output directory that overrides the default `target/\/\` path for final artifacts. Supported in `build`, `run`, and config validation. +* **`dcr fmt` command** — new CLI command that formats all C/C++ source files (`*.c`, `*.cpp`, `*.h`, `*.hpp`) in `src/` and `tests/` using `clang-format`. +* **Incremental linking** — `needs_link()` in `common.rs` checks if any object file is newer than the linked output, skipping unnecessary relinking. Implemented for all backends (`unix_cc`, `msvc`, `gas`, `nasm`). +* **`build.kind = "none"` and `"custom"`** — two new project kinds for special build scenarios that don't produce standard artifacts. +* **`install_bsd.sh`** — POSIX-compliant installation script for BSD systems (FreeBSD, OpenBSD, NetBSD) with binary download and source build modes. +* **Linux ARM64 support in `install.sh`** — added `Linux:aarch64|Linux:arm64` target detection for pre-built binary downloads. +* **BSD OS detection in `install.sh`** — detects FreeBSD, OpenBSD, NetBSD and determines target triple. +* **`rust-toolchain.toml`** — explicit toolchain pinning to `stable` channel. +* **Integration tests** — `build_with_target_config` (verifies `build.target = "linux"`) and `build_with_out_dir` (validates custom output directory). +* **`get_build_string_with_profile` made `pub`** — so `run.rs` can determine custom output directory configuration. + +### Changed + +* **`build.target` semantics changed** — now strictly contains a target triple (e.g., `x86_64-unknown-linux-gnu`) or short name (`linux`, `macos`, `windows`). No longer used as custom output directory — this functionality moved to `build.out_dir`. +* **`build.standard` made optional** — changed from `String` to `Option\`. Validation only enforces non-empty for non-ASM languages. Skipped in `dcr.toml` output if empty. +* **`dcr run` with `out_dir`** — now determines target directory respecting `build.out_dir` via `get_build_string_with_profile()` from `build.rs`. +* **`collect_sources()` returns empty vector** instead of error when no sources are found, allowing `kind = "none"` or `kind = "custom"` projects with no source files. +* **CI/CD release workflow refactored** — `git2` made target-specific (no vendored-openssl on Windows), Zig-based cross-compilation for non-x86_64 Linux targets, Arch Linux package version cleanup (dashes → dots), `gmake` symlink for NetBSD. +* **README compatibility table** — FreeBSD, OpenBSD, NetBSD build/run status upgraded from "community/best-effort" to "officially supported". +* **Documentation updated** — `build-section.md` describes new `build.target` and `build.out_dir` fields. `target-directory.md` rewritten to clarify the distinction. + +### Fixed + +* **stdout/stderr not inherited in `dcr run`** — child process output was captured and manually printed, breaking interactive programs. Fixed by switching to `Command::status()`. +* **Race condition in release CI** — matrix build jobs could upload assets to a release that didn't exist yet. Fixed by adding a dedicated `create-release` job. +* **Release GHA — stable toolchain override** — fixed Rust toolchain override issues in CI. +* **Arch Linux package version sanitization** — version strings with dashes (e.g., `0.7.0-dev`) are invalid for `pkgver`. Fixed by replacing dashes with dots. +* **GPG permissions after Docker** — Docker operations changed GPG directory ownership. Fixed by running `chown` after Docker commands. +* **RPM artifact paths** — RPM artifacts were placed in `rpm/x86_64/` instead of `fedora/x86_64/`. Fixed in Dexoron Packages Index workflow. +* **JSON parsing reliability in `install.sh`** — added `jq` as primary parser with `python3` fallback for dev channel release lookup. + +### Removed + +* **`format_roots()` helper function** — removed from `common.rs`. Was only used by the old error handling path in `collect_sources()`. +* **Per-distribution artifact download steps** — three separate `actions/download-artifact` steps replaced with unified `gh release download --clobber`. diff --git a/docs-crowdin-export/ru-RU/docs/commands/build-commands.mdx.mdx b/docs-crowdin-export/ru-RU/docs/commands/build-commands.mdx.mdx new file mode 100644 index 0000000..ad38d1a --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/build-commands.mdx.mdx @@ -0,0 +1,47 @@ +--- +sidebar_label: Build commands (build, run, clean) +--- + +# Build Commands + +## `dcr build` + +Builds the project according to `dcr.toml`. + +```bash +dcr build # debug profile +dcr build --release # release build +dcr build --debug # explicit debug +dcr build --target aarch64-unknown-linux-gnu +dcr build --force # full rebuild (also re-runs build.steps / post_steps) +dcr build --clean # clean + build +dcr build --verbose # show compilation commands +dcr build --workspace pkg-a # build specific workspace package +``` + +Artifacts: `target/\/\/\` (Linux with explicit target). + +With `[archive]` in `dcr.toml`, a FAT disk image is packed after a successful build. + +## `dcr run` + +Builds (if sources are newer than artifacts) and runs the binary. + +```bash +dcr run +dcr run --release +dcr run --force # force rebuild then run +``` + +On a **workspace-only** root: if `[run].cmd` is set, that command is used after build; otherwise DCR delegates to a workspace member. + +## `dcr clean` + +Removes `target/` directory (or `target/\/\`). + +```bash +dcr clean +dcr clean --release # target/release/ only +dcr clean --target windows # target/x86_64-pc-windows-msvc/ +dcr clean --all # clean all workspace packages +``` diff --git a/docs-crowdin-export/ru-RU/docs/commands/dependency-commands.mdx.mdx b/docs-crowdin-export/ru-RU/docs/commands/dependency-commands.mdx.mdx new file mode 100644 index 0000000..4b5b982 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/dependency-commands.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Dependency commands (add, tree) +--- + +# Dependency Commands + +## `dcr add \ [source]` + +Adds a dependency to `dcr.toml`. + +```bash +dcr add fmt # registry lookup +dcr add mylib ../path/to/lib # path as source +dcr add mylib path:./lib # explicit path prefix +dcr add mylib git:https://github.com/user/repo # explicit git prefix +dcr add mylib github:user/repo # GitHub shorthand +dcr add mylib gitlab:user/repo # GitLab shorthand +``` + +Source prefixes: + +* `path:` — local path +* `git:` — generic git URL +* `github:` — expands to `https://github.com/\/\` +* `gitlab:` — expands to `https://gitlab.com/\/\` +* `http://` / `https://` / `git@` — full URL + +Flags: + +* `--branch \` — git branch +* `--tag \` — git tag +* `--rev \` — git commit + +If source is omitted — DCR searches connected registries. + +## `dcr tree` + +Displays the project dependency tree. + +```bash +dcr tree +``` + +Example output: + +``` +my-app v0.1.0 +├── fmt (registry) +│ └── spdlog (registry) +└── catch2 (registry) +``` + +For path dependencies, recursively shows their own dependencies (from their `dcr.toml`). diff --git a/docs-crowdin-export/ru-RU/docs/commands/gen-commands.mdx.mdx b/docs-crowdin-export/ru-RU/docs/commands/gen-commands.mdx.mdx new file mode 100644 index 0000000..466b04c --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/gen-commands.mdx.mdx @@ -0,0 +1,73 @@ +--- +sidebar_label: Gen commands (vscode, clion, ...) +--- + +# Gen Commands + +## `dcr gen \` + +Generates IDE integration files. + +### vscode + +```bash +dcr gen vscode +``` + +Creates: + +* `.vscode/tasks.json` — `build` task (dcr build) +* `.vscode/launch.json` — debug launch configuration +* `.vscode/settings.json` — C/C++ settings (clangd paths, includes) +* `.vscode/extensions.json` — recommended extensions (vscode-clangd, vscode-lldb) + +### clion + +```bash +dcr gen clion +``` + +Creates: + +* `.idea/externalTools.xml` — external tools (build, run, clean, test) +* `.idea/customTargets.xml` — custom build targets +* `.idea/misc.xml` — C/C++ project settings +* `.idea/runConfigurations/\.xml` — per-binary run configurations + +### compile-commands + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` — standard format for clangd, cpptools, static analyzers. + +### project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata: + +```json +[ + { + "name": "my-app", + "version": "0.1.0", + "root": "/path/to/project", + "profile": "debug", + "language": "c", + "standard": "c17", + "cxx_standard": null, + "compiler": "/usr/bin/clang", + "kind": "bin", + "sources": ["src/main.c"], + "include_dirs": ["src"], + "lib_dirs": [], + "libs": [], + "cflags": ["-std=c17", "-O0", "-g"], + "ldflags": [] + } +] +``` diff --git a/docs-crowdin-export/ru-RU/docs/commands/project-commands.mdx.mdx b/docs-crowdin-export/ru-RU/docs/commands/project-commands.mdx.mdx new file mode 100644 index 0000000..e5e4eb7 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/project-commands.mdx.mdx @@ -0,0 +1,40 @@ +--- +sidebar_label: Project commands (new, init) +--- + +# Project Commands + +## `dcr new \` + +Creates a new project with a standard structure and `dcr.toml`. The `name` argument is required. + +Only ASCII letters, digits, underscores `_` and hyphens `-` are allowed in the project name. + +```bash +dcr new my-app +dcr new my-app --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +Generates: + +* `dcr.toml` with basic fields +* `src/main.c` with a `main` template + +## `dcr init` + +Initializes a DCR project in the current (empty) directory. + +```bash +dcr init +dcr init --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +The project name is taken from the current directory name. The directory name must follow the same naming rules as `dcr new`. diff --git a/docs-crowdin-export/ru-RU/docs/commands/quality-commands.mdx.mdx b/docs-crowdin-export/ru-RU/docs/commands/quality-commands.mdx.mdx new file mode 100644 index 0000000..cdfe503 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/quality-commands.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Quality commands (test, fmt) +--- + +# Quality Commands + +## `dcr test` + +Runs tests. + +```bash +dcr test # debug profile +dcr test --release # release profile +dcr test --debug # explicit debug +dcr test --help # detailed help +``` + +Before first use, initialize tests: + +```bash +dcr test --init +``` + +This creates `tests/dcr_test.h` (framework) and `tests/test.c` (template). + +What `dcr test` does: + +1. Builds the project +2. Collects `tests/*.c` files (`.c` only, not `.cpp`) +3. Compiles and links each test file +4. Runs each test binary +5. Prints summary: TOTAL, PASS, SKIP, FAIL +6. Returns non-zero exit code on any FAIL + +## `dcr fmt` + +Formats C/C++ source files using `clang-format`. + +```bash +dcr fmt +``` + +Processes: `src/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}` and `tests/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}`. + +Uses `.clang-format` at the project root (if present), otherwise default clang-format style. + +## `dcr lint` + +Runs `clang-tidy` on C/C++ source files for static analysis. + +```bash +dcr lint # show diagnostics +dcr lint --fix # apply fixes automatically +dcr lint --help # detailed help +``` + +Processes: `src/**/*.{c,cpp,cxx,cc}` and `tests/**/*.{c,cpp,cxx,cc}`. + +Without `--fix`, clang-tidy reports warnings and errors without modifying files. +With `--fix`, clang-tidy applies automatic suggestions in place. diff --git a/docs-crowdin-export/ru-RU/docs/commands/system-commands.mdx.mdx b/docs-crowdin-export/ru-RU/docs/commands/system-commands.mdx.mdx new file mode 100644 index 0000000..ec99cf1 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/system-commands.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: System commands (setup, --help, ...) +--- + +# System Commands + +## `dcr setup` + +Shows configured registries from `~/.dcr/config.toml`. + +```bash +dcr setup +``` + +If `~/.dcr/config.toml` is not found, DCR returns an error. Create it manually: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +## `dcr --help` + +Shows help for all commands. + +```bash +dcr --help +``` + +## `dcr --version` + +Shows version and target triple. + +```bash +dcr --version # dcr 0.7.0 (x86_64-unknown-linux-gnu) +``` + +## `dcr --update` + +Self-update. Downloads the latest release binary from GitHub Releases and replaces the current one. + +```bash +dcr --update +``` + +Features: + +* Auto-detects platform and architecture +* Warns if installed via AUR (use package manager instead) +* Works on Linux, macOS, Windows diff --git a/docs-crowdin-export/ru-RU/docs/contributing.mdx.mdx b/docs-crowdin-export/ru-RU/docs/contributing.mdx.mdx new file mode 100644 index 0000000..d422910 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/contributing.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: Contributing +--- + +# Contributing + +## Setup + +```bash +git clone https://github.com/dexoron/dcr +cd dcr +cargo build +``` + +## Code style + +All code must be formatted with `cargo fmt`: + +```bash +cargo fmt +``` + +## Linting + +```bash +cargo clippy --all-targets -- -D warnings +``` + +## Tests + +```bash +cargo test --all-targets +``` + +## PR process + +1. Fork the repository +2. Create a branch: `git checkout -b feature/description` +3. Make changes +4. Run `cargo fmt && cargo clippy && cargo test` +5. Open a Pull Request + +## CI + +CI runs: + +* `cargo fmt --check` +* `cargo clippy --all-targets -- -D warnings` +* `cargo check --all-targets --all-features` +* Build on Linux, macOS, Windows +* Integration tests (compilation check) diff --git a/docs-crowdin-export/ru-RU/docs/faq.mdx.mdx b/docs-crowdin-export/ru-RU/docs/faq.mdx.mdx new file mode 100644 index 0000000..4680f99 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/faq.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: FAQ +--- + +# FAQ + +## Registry not found + +``` +error: registry not found +``` + +**Solution:** Make sure `~/.dcr/config.toml` exists: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +And check `DCR_INDEX_PATH`: + +```bash +echo $DCR_INDEX_PATH +``` + +## Compiler not found + +``` +error: compiler not found +``` + +**Solution:** Ensure a compiler is installed and available in PATH. + +```bash +which gcc +which clang +``` + +Or specify explicitly via `[toolchain]` in `dcr.toml`. + +## Ctrl+C during build + +DCR handles SIGINT: interrupts the current compilation and exits with non-zero code. + +## How to create a library? + +See [Library Recipe](/docs/recipes/library-project). + +## How to cross-compile to Windows? + +See [Cross-Compile Recipe](/docs/recipes/cross-to-windows). + +## How to create a multi-package project? + +See [Workspace Recipe](/docs/recipes/multi-package-workspace). + +## Bootloader / pure NASM OS image + +Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk image. + +See [OS-dev recipe](/docs/recipes/os-flat-bin-archive). + +## Lock file + +`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`. diff --git a/docs-crowdin-export/ru-RU/docs/getting-started/first-steps.mdx.mdx b/docs-crowdin-export/ru-RU/docs/getting-started/first-steps.mdx.mdx new file mode 100644 index 0000000..ce4bcf9 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/getting-started/first-steps.mdx.mdx @@ -0,0 +1,79 @@ +--- +sidebar_label: First steps +--- + +# First Steps + +## Create a project + +```bash +dcr new my-app +cd my-app +``` + +Structure: + +``` +my-app/ +├── dcr.toml +└── src/ + └── main.c +``` + +`dcr.toml`: + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +``` + +## Build + +```bash +dcr build +``` + +Output — `target/\/debug/my-app` (Linux) or `target/debug/my-app.exe` (Windows). + +Build profiles: + +```bash +dcr build --release # release build +dcr build --debug # debug (default) +``` + +## Run + +```bash +dcr run +``` + +Builds (if needed) and runs the binary. + +## First test + +```bash +dcr test --init # create test template +dcr test # run tests +``` + +## Formatting + +```bash +dcr fmt # clang-format with .clang-format +``` + +## Linting + +```bash +dcr lint # clang-tidy checks +dcr lint --fix # apply fixes automatically +``` diff --git a/docs-crowdin-export/ru-RU/docs/getting-started/installation.mdx.mdx b/docs-crowdin-export/ru-RU/docs/getting-started/installation.mdx.mdx new file mode 100644 index 0000000..d574bb4 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,109 @@ +--- +sidebar_label: Installation +--- + +# Installation + +## Linux (Dexoron Packages) + +Configure your package manager at https://pkg.dexoron.su and install: + +**Arch Linux** + +```sh +sudo pacman -Sy dcr +``` + +**Debian/Ubuntu** + +```sh +sudo apt update && sudo apt install dcr +``` + +**Fedora/RHEL** + +```sh +sudo dnf install dcr +``` + +## Arch Linux (AUR) + +```sh +yay -S dcr +``` + +## macOS / Linux (Homebrew) + +```sh +brew tap dexoron/dexoron +brew install dcr +``` + +## Snap (Linux) + +```sh +sudo snap install dcrup +``` + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +# or install to profile: +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +## Linux / macOS (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install.sh | sh +``` + +## BSD (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh +``` + +## Windows (PowerShell) + +```powershell +irm https://dcr.dexoron.su/install.ps1 | iex +``` + +## From source + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr && cargo build --release +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +``` + +## Post-install + +Verify the installation: + +```bash +dcr --version +``` + +Man pages are available after installation: + +```bash +man dcr +man dcr-build +``` + +To use the registry, create `~/.dcr/config.toml`: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` diff --git a/docs-crowdin-export/ru-RU/docs/ide-integration.mdx.mdx b/docs-crowdin-export/ru-RU/docs/ide-integration.mdx.mdx new file mode 100644 index 0000000..7b0fdf6 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/ide-integration.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: IDE Integration +--- + +# IDE Integration + +## VS Code + +```bash +dcr gen vscode +``` + +Generates in `.vscode/`: + +| File | Purpose | +| ----------------- | -------------------------------------------- | +| `tasks.json` | `build` task (dcr build) | +| `launch.json` | Debug launch configuration | +| `settings.json` | clangd/IntelliSense: include paths, standard | +| `extensions.json` | Recommends vscode-clangd, vscode-lldb | + +## CLion + +```bash +dcr gen clion +``` + +Generates in `.idea/`: + +| File | Purpose | +| ------------------------------------------------ | ----------------------------------------- | +| `externalTools.xml` | Build, Run, Clean, Test as external tools | +| `customTargets.xml` | Custom build targets | +| `misc.xml` | C/C++ project settings | +| `runConfigurations/\.xml` | Per-binary run configurations | + +## compile_commands.json + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` at project root. Standard format for clangd, C/C++ IntelliSense, static analyzers. + +## project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata (see [gen-commands](/docs/commands/gen-commands)). diff --git a/docs-crowdin-export/ru-RU/docs/license.mdx.mdx b/docs-crowdin-export/ru-RU/docs/license.mdx.mdx new file mode 100644 index 0000000..20a7804 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/license.mdx.mdx @@ -0,0 +1,33 @@ +--- +sidebar_label: License +--- + +# License + +## DCR + +DCR itself is [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html) licensed. + +> **Note:** DCR is a build tool, not a library. The GPL applies only to DCR's own source code. Projects built with DCR are not subject to DCR's license — their licensing is determined solely by their own code and dependencies. + +## Rust dependencies + +DCR is written in Rust. The following notable Rust crates are statically linked: + +| Crate | License | +| ------------------------------------------------------- | ----------------- | +| [`ureq`](https://crates.io/crates/ureq) | MIT OR Apache-2.0 | +| [`serde`](https://crates.io/crates/serde) | MIT OR Apache-2.0 | +| [`toml`](https://crates.io/crates/toml) | MIT OR Apache-2.0 | +| [`toml_edit`](https://crates.io/crates/toml_edit) | MIT OR Apache-2.0 | +| [`serde_json`](https://crates.io/crates/serde_json) | MIT OR Apache-2.0 | +| [`sha2`](https://crates.io/crates/sha2) | MIT OR Apache-2.0 | +| [`glob`](https://crates.io/crates/glob) | MIT OR Apache-2.0 | +| [`self-replace`](https://crates.io/crates/self-replace) | MIT OR Apache-2.0 | +| [`ctrlc`](https://crates.io/crates/ctrlc) | MIT OR Apache-2.0 | + +Full dependency tree is available in [`Cargo.lock`](https://github.com/dexoron/dcr/blob/main/Cargo.lock). The overwhelming majority are dual-licensed under MIT OR Apache-2.0. + +## Additional credits + +* DCR's CLI design and project model are inspired by [Cargo](https://doc.rust-lang.org/cargo/). diff --git a/docs-crowdin-export/ru-RU/docs/recipes/cross-to-windows.mdx.mdx b/docs-crowdin-export/ru-RU/docs/recipes/cross-to-windows.mdx.mdx new file mode 100644 index 0000000..1250349 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/recipes/cross-to-windows.mdx.mdx @@ -0,0 +1,49 @@ +--- +sidebar_label: Cross-compile to Windows +--- + +# Cross-Compile to Windows from Linux + +Building a Windows binary on Linux using mingw-w64. + +## Install toolchain + +```bash +# Ubuntu/Debian +sudo apt install mingw-w64 + +# Fedora +sudo dnf install mingw64-gcc mingw64-binutils +``` + +## Configuration + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +target = "x86_64-pc-windows-gnu" # explicit mingw, not msvc +``` + +## Build + +```bash +dcr build --target x86_64-pc-windows-gnu --release +``` + +Artifact: `target/x86_64-pc-windows-gnu/release/my-app.exe`. + +## Custom toolchain + +```toml +[toolchain] +cc = "x86_64-w64-mingw32-gcc" +cxx = "x86_64-w64-mingw32-g++" +``` diff --git a/docs-crowdin-export/ru-RU/docs/recipes/library-project.mdx.mdx b/docs-crowdin-export/ru-RU/docs/recipes/library-project.mdx.mdx new file mode 100644 index 0000000..336c122 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/recipes/library-project.mdx.mdx @@ -0,0 +1,70 @@ +--- +sidebar_label: Library project +--- + +# Library Project + +Creating a static library and using it in another project. + +## Step 1: Create the library + +```bash +dcr new my-lib +cd my-lib +``` + +`dcr.toml`: + +```toml +[package] +name = "my-lib" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +kind = "staticlib" +``` + +`src/my_lib.h`: + +```c +#ifndef MY_LIB_H +#define MY_LIB_H +int add(int a, int b); +#endif +``` + +`src/my_lib.c`: + +```c +#include "my_lib.h" +int add(int a, int b) { return a + b; } +``` + +## Step 2: Build + +```bash +dcr build --release +``` + +Artifacts: + +* `target/\/release/libmy-lib.a` (Linux) +* `target/release/my-lib.lib` (Windows) +* `target/include/` — header files + +## Step 3: Use in another project + +```bash +dcr new my-app +cd my-app +dcr add my-lib ../my-lib +``` + +Automatically: + +* Adds include path to `target/include/` of the library +* Adds lib path to `target/\/release/` +* Links `libmy-lib.a` / `my-lib.lib` diff --git a/docs-crowdin-export/ru-RU/docs/recipes/multi-package-workspace.mdx.mdx b/docs-crowdin-export/ru-RU/docs/recipes/multi-package-workspace.mdx.mdx new file mode 100644 index 0000000..dde7cb5 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/recipes/multi-package-workspace.mdx.mdx @@ -0,0 +1,103 @@ +--- +sidebar_label: Multi-package workspace +--- + +# Multi-Package Workspace + +A project with three packages: two libraries and a binary. + +## Structure + +``` +workspace/ +├── dcr.toml # root workspace +├── lib-core/ +│ ├── dcr.toml +│ └── src/core.c +├── lib-utils/ +│ ├── dcr.toml +│ └── src/utils.c +└── app/ + ├── dcr.toml + └── src/main.c +``` + +## Root dcr.toml + +```toml +[package] +name = "my-workspace" +version = "0.1.0" +type = "none" + +[build] +inherit = true +language = "c" +standard = "c11" +workspace_only = true + +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +## Packages + +`lib-core/dcr.toml`: + +```toml +[package] +name = "lib-core" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`lib-utils/dcr.toml`: + +```toml +[package] +name = "lib-utils" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`app/dcr.toml`: + +```toml +[package] +name = "app" +version = "0.1.0" +type = "none" + +[build] +kind = "bin" +``` + +## Build + +```bash +cd workspace +dcr build # builds everything in correct order +dcr build --workspace app # only app (lib-core and lib-utils built as deps) +dcr run # builds and runs main package +``` + +Build order (topological sort): + +1. `lib-core` +2. `lib-utils` (depends on lib-core) +3. `app` (depends on lib-core, lib-utils) diff --git a/docs-crowdin-export/ru-RU/docs/recipes/os-flat-bin-archive.mdx.mdx b/docs-crowdin-export/ru-RU/docs/recipes/os-flat-bin-archive.mdx.mdx new file mode 100644 index 0000000..457bce4 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/recipes/os-flat-bin-archive.mdx.mdx @@ -0,0 +1,89 @@ +--- +sidebar_label: OS-dev (flat-bin + archive) +--- + +# Pure ASM / boot image (flat-bin + archive) + +Minimal OS-dev style pipeline: assemble raw binaries with NASM, then pack a FAT floppy/image with an optional boot sector. + +## Project layout + +``` +myos/ + dcr.toml + src/ + boot.asm # boot sector (512 bytes) + kernel.asm # payload +``` + +For multiple flat artifacts, use a **workspace** (one member per binary) or separate packages; a single `flat-bin` package produces one binary per source stem. + +## Boot package (`flat-bin`) + +```toml +[package] +name = "boot" +version = "0.1.0" + +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +```bash +dcr build +# → target/<…>/debug/boot.bin (NASM -f bin, no link) +``` + +## Disk image after build + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" +``` + +* `format`: `fat12`, `fat16`, or `fat32` +* `size`: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default ~1.44 MiB) +* `bootsector`: written only when `offset` is omitted or `0` +* `from` may be a glob; `{profile}` is substituted in paths + +## C kernel → flat binary + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldflags = ["-T", "linker.ld"] +``` + +Pipeline: objects → temporary linked ELF → `objcopy -O binary` → `kernel.bin`. Requires `objcopy` / `llvm-objcopy` in PATH. + +## Other assemblers + +| Tool | Notes | +| -------- | --------------------------------------------------------------------------------------- | +| **FASM** | Write `format binary` in the source; DCR writes `\.bin` directly | +| **GAS** | Assemble `.s` → obj → `objcopy -O binary` | +| **LLC** | `language = "llvm_ir"` → obj → objcopy | +| **MASM** | COFF obj → objcopy (needs binutils/LLVM objcopy) | + +## Notes + +* Single-file `roots` are supported: `roots = ["src/boot.asm"]`. +* `--force` re-runs `build.steps` / `build.post_steps` as well as recompilation. +* Prefer `kind = "elf"` if you need a relocatable ELF kernel without stripping to raw binary. diff --git a/docs-crowdin-export/ru-RU/docs/reference/build-profiles.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/build-profiles.mdx.mdx new file mode 100644 index 0000000..694efb0 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/build-profiles.mdx.mdx @@ -0,0 +1,82 @@ +--- +sidebar_label: Build profiles +--- + +# Build Profiles + +Profiles allow overriding `[build]` fields for specific build modes. + +## Configuration + +```toml +[build] +language = "c" +standard = "c17" +cflags = ["-Wall"] + +[build.debug] +cflags = ["-O0", "-g"] + +[build.release] +cflags = ["-O3", "-DNDEBUG"] +``` + +## Merge rules + +Fields from `[build.\]` are merged on top of `[build]`: + +* **Scalar fields** (strings, numbers, bools) — replaced +* **Arrays** (`cflags`, `ldflags`, ...) — **appended** (extend the `[build]` array) + +Set `inherit = false` to disable array inheritance (only profile's own arrays are used). + +## Built-in profiles + +The default flags for each profile are composed from three config fields: + +| Field | debug default | release default | +| ----------- | ------------------ | --------------- | +| `opt_level` | `"0"` | `"3"` | +| `debug` | `true` | `false` | +| `warnings` | `["all", "extra"]` | `[]` | + +Which produce the equivalent compiler flags: + +| Profile | Effective flags | +| --------- | ---------------------------------------------------------- | +| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` | +| `release` | `-O3 -DNDEBUG` | + +Additional build options can be toggled per-profile: + +```toml +[build.release] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "1" + +[build.debug] +opt_level = "1" +debug = false +warnings = ["all", "error"] +``` + +## Target-specific profiles + +```toml +[build.linux] +cflags = ["-DLINUX"] + +[build.windows.debug] +cflags = ["-DWIN32", "-O0", "-g"] +``` + +Application order (highest priority first): + +1. `[build.\.\]` +2. `[build.\.\]` +3. `[build.\]` +4. `[build.\]` +5. `[build]` diff --git a/docs-crowdin-export/ru-RU/docs/reference/build-system.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/build-system.mdx.mdx new file mode 100644 index 0000000..10fbd56 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/build-system.mdx.mdx @@ -0,0 +1,136 @@ +--- +sidebar_label: Build system +--- + +# Build System + +## Compiler Backends + +DCR supports 7 compilation backends. Selection is automatic based on file extension and `build.compiler` value. + +| Backend | Files | When used | +| --------- | --------------------------------- | ------------------------------------- | +| `unix_cc` | `.c`, `.cpp`, `.cxx`, `.cc`, `.S` | gcc/clang on Linux/macOS/BSD | +| `msvc` | `.c`, `.cpp`, `.cxx`, `.cc` | Windows (cl, clang-cl) | +| `gas` | `.s` | ARM/ARM64 assembler (no preprocessor) | +| `nasm` | `.asm`, `.s` | x86/x86_64 NASM assembler | +| `masm` | `.asm` | MASM (ml/ml64) on Windows | +| `fasm` | `.asm`, `.fasm` | Flat Assembler | +| `llvm_ir` | `.ll` | LLVM IR via `llc -filetype=obj` | + +## Qt Support + +DCR provides native Qt support for automatic meta-object handling (MOC, UIC, RCC). + +Enable it by setting `build.qt = true` in `dcr.toml`. DCR will automatically detect Qt-related files (`.ui`, `.qrc`, `.h` with `Q_OBJECT`) and process them. + +```toml +[build] +qt = true +``` + +*Note: Requires `qt6` modules (Core, Widgets, Gui, Svg) installed via `pkg-config`.* + +Advanced customization is still possible via `build.steps` if special handling is needed: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +### Unix CC + +* Compiler resolved via `resolve_compiler()`: `DCR_COMPILER` > `DCR_CC` > `[toolchain]` > `build.compiler` > `PATH` +* Supports `.d` files for header dependency tracking +* Flags: `-std=`, `-MMD -MF`, `-c -o`, `-I`, `-L`, `-l` +* Conditional flags based on config: + * `freestanding` or bare-metal target: `-ffreestanding` (compile), `-nostdlib -static` (link) + * `lto`: `-flto` (compile + link) + * `panic = "abort"`: `-fno-exceptions` (C++ only), `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables` + +### MSVC + +* Supports cl.exe and clang-cl.exe +* Flags: `/std:`, `/Fo:`, `/Fe:`, `/I`, `/link` + +### GAS / NASM / MASM / FASM / LLVM-IR + +* GAS: `-I`, `-c -o`, `--defsym` +* NASM: `-I`, `-o`, `-D`, `-f` (format: win64/elf64/macho64/macho32/elf32; **`bin` when `kind = "flat-bin"`**) +* MASM: `/nologo /c /Fo\ ` +* FASM: ` \` (output path is the object file) +* LLVM IR: `-filetype=obj -o \` + +## Incremental Builds + +Three levels of incrementality: + +1. **mtime** — if output is newer than all inputs, skip +2. **`.d` files** — header change tracking (including transitive) +3. **SHA256 fingerprint** — recompile if compiler flags changed (stored in `.dcr_fingerprint`) + +## Parallel Compilation + +* `thread::scope` for thread pool +* Atomic task queue (`AtomicU64`) +* Mutex on stdout (`OUTPUT_MUTEX`) +* Thread count = `available_parallelism()`, capped by `build.codegen-units` if set + +## Build Kinds + +| Kind | Type | Path (Linux example) | +| ----------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `bin` | Executable | `target/\/\/\` (.exe on Windows) | +| `staticlib` | Static library | `target/\/\/lib\.a` (.lib) | +| `sharedlib` | Dynamic library | `target/\/\/lib\.so` (.dll/.dylib) | +| `efi` | UEFI application | `target/\/\/\.efi` | +| `elf` | ELF without stdlib | `target/\/\/\` | +| `none` | Compile only, no link | — | +| `custom` | Full filename+extension control | `target/\/\/\.\` | +| `flat-bin` | Raw binary | ASM: `\.bin` (NASM `-f bin` / FASM / GAS·MASM·LLC via objcopy); C/C++: `\.bin` (link + objcopy) | + +## Disk images (`[archive]`) + +After a successful build, if `[archive]` is present in `dcr.toml`, DCR formats a FAT volume and copies files from `layout` into the image. See [dcr.toml → archive](/docs/reference/dcr-toml#archive). + +## Build Steps + +DCR supports pre-build and post-build steps: + +* `build.steps` — commands before compilation +* `build.post_steps` — commands after compilation + +Substitutions: `{stem}`, `{in}`, `{out}`, `{profile}`, `{version}`, `{name}`. + +Example Qt codegen via build steps: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +## pkg-config + +Automatic lookup (read from raw config): + +```toml +[build] +pkg_config = ["sdl2", "gl"] +``` + +DCR runs `pkg-config --cflags sdl2 gl` and `pkg-config --libs sdl2 gl` and adds results to compiler/linker flags. + +## Variable Substitution + +Supported variables: + +| Variable | Description | +| ----------------------- | ---------------------------- | +| `{version}` | Package version | +| `{version_major}` | Major version part | +| `{version_minor}` | Minor version part | +| `{version_patch}` | Patch version | +| `{version_suffix}` | Suffix (e.g., `-rc1`) | +| `{version_suffix_dash}` | Suffix with dash | +| `{profile}` | Profile name (debug/release) | +| `{name}` | Package name | diff --git a/docs-crowdin-export/ru-RU/docs/reference/cross-compilation.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/cross-compilation.mdx.mdx new file mode 100644 index 0000000..2ca0cc7 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/cross-compilation.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Cross-compilation +--- + +# Cross-Compilation + +## Short Names + +DCR supports short platform names: + +| Short Name | Full Triple | +| ---------- | -------------------------- | +| `linux` | `x86_64-unknown-linux-gnu` | +| `macos` | `x86_64-apple-darwin` | +| `windows` | `x86_64-pc-windows-msvc` | + +```bash +dcr build --target windows +``` + +## Full Triples + +```bash +dcr build --target aarch64-unknown-linux-gnu +dcr build --target x86_64-pc-windows-gnu # mingw +dcr build --target armv7-unknown-linux-gnueabihf +``` + +## clang --target + +When using clang, DCR injects `--target=\` into CFLAGS. + +```toml +[build] +compiler = "clang" +target = "aarch64-unknown-linux-gnu" +# Auto: cflags += ["--target=aarch64-unknown-linux-gnu"] +``` + +## Bare-Metal / Freestanding + +For targets containing `none`, `-elf`, `eabi`, or `baremetal`, DCR automatically: + +1. **Disables default flags** — no system include paths, no `-l` libc +2. **Injects `-ffreestanding`** at compile time and `-nostdlib -static` at link time + +You can also enable freestanding mode explicitly: + +```toml +[build] +freestanding = true +``` + +```bash +dcr build --target aarch64-none-elf +``` + +## Target Directory + +By default, the compilation output directories are structured as follows: + +* **Linux and BSD**: Always output to `target/\/\/` (using host triple if no target is specified). +* **macOS and Windows (without target)**: Output to `target/\/`. +* **macOS and Windows (with explicit target)**: Output to `target/\/\/`. diff --git a/docs-crowdin-export/ru-RU/docs/reference/dcr-toml.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/dcr-toml.mdx.mdx new file mode 100644 index 0000000..240399b --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,261 @@ +--- +sidebar_label: dcr.toml overview +--- + +# dcr.toml + +Main project configuration file. Located at the project root. + +## Structure + +```toml +[package] +# required fields + +[build] +# build settings + +[build.debug] # optional: debug override +[build.release] # optional: release override + +[build.linux] # optional: Linux override +[build.windows] # optional: Windows override +[build.windows.debug] # target + profile combination + +[toolchain] +# compiler/linker paths + +[dependencies] +# project dependencies + +[workspace] +# multi-package configuration + +[run] +# run settings + +[archive] +# optional: pack FAT disk image after build +``` + +## [package] + +| Field | Required | Description | +| --------- | -------- | ------------------------------------------- | +| `name` | yes | Project name | +| `version` | yes | Semantic version | +| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) | +| `license` | no | SPDX license identifier | +| `author` | no | Author | + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "app" +license = "MIT" +author = "John Doe" +``` + +## [build] + +... + +* `build.qt` — (bool) Enable automatic Qt meta-object handling (MOC, UIC, RCC). Requires `qt6` modules installed via `pkg-config`. + +| Field | Default | Description | +| ---------------- | ------------- | --------------------------------------------------------------------------------------------------------- | +| `language` | `"c"` | `"c"`, `"c++"`, `"cpp"`, `"cxx"`, `"asm"`, `"llvm_ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to `"c"`) | +| `standard` | `"c11"` | C standard (`c11`, `c17`, `c23`) | +| `cxx_standard` | — | C++ standard (`c++17`, `c++20`, `c++23`) | +| `compiler` | `"clang"` | Preferred compiler (optional, defaults to `"clang"`) | +| `kind` | `"bin"` | `bin`, `staticlib`, `sharedlib`, `efi`, `elf`, `none`, `custom`, `flat-bin` | +| `target` | host | Target triple for cross-compilation | +| `platform` | `"native"` | `native`, `efi` | +| `cflags` | `[]` | Additional C/C++/ASM flags | +| `ldflags` | `[]` | Additional linker flags | +| `filename` | `""` | Custom output file name | +| `extension` | `""` | Custom file extension (for `flat-bin`, default is `bin`) | +| `roots` | `["src"]` | Source roots: directories and/or individual source/header files | +| `exclude` | `[]` | Exclude patterns | +| `include` | `[]` | Additional include directories | +| `src_disable` | `false` | Disable auto source discovery | +| `inherit` | `false` | Inherit build from workspace root | +| `clean` | `[]` | Glob patterns for custom clean paths | +| `out_dir` | `""` | Custom output directory | +| `workspace_only` | `false` | Workspace-only, not built standalone (no `language`/`compiler` required) | +| `freestanding` | `false` | Compile in freestanding mode (`-ffreestanding` + `-nostdlib -static`) | +| `opt_level` | — | Optimization level: `0`-`3`, `"s"`, `"z"` (derived from profile if omitted) | +| `debug` | profile-based | Emit debug symbols (`-g`): `true` in debug, `false` in release | +| `lto` | `false` | Link-time optimization (`-flto` for both compiler and linker) | +| `strip` | `false` | Strip symbols from output (`-s` in ldflags) | +| `warnings` | `[]` | Warning flags (e.g. `"all"`, `"extra"`, `"pedantic"`); engine adds `-Wall -Wextra` in debug if empty | +| `panic` | `""` | Panic strategy: `"abort"` disables exceptions and unwind tables | +| `codegen-units` | `""` | Max parallel compilation jobs (`"0"` = auto) | +| `qt` | `false` | Enable automatic Qt meta-object handling (MOC, UIC, RCC) | + +Settings from raw config (not in typed struct): + +* `pkg_config` — list of pkg-config packages +* `ldscript` — linker script path +* `build.steps` / `build.post_steps` — codegen steps + +## Per-language overrides: `[build.c]`, `[build.cxx]`, `[build.asm]`, `[build.llvm_ir]` + +Each language can have its own table that overrides the flat `[build]` settings: + +```toml +[build] +compiler = "clang" +standard = "c11" + +[build.c] +standard = "c23" +compiler = "gcc" + +[build.cxx] +standard = "c++23" +compiler = "g++" + +[build.asm] +compiler = "nasm" +flags = ["-felf64"] + +[build.llvm_ir] +compiler = "llc" +``` + +The flat `[build]` acts as fallback; per-language tables take precedence for their language. + +Example: + +```toml +[build] +language = "c++" +standard = "c23" +cxx_standard = "c++23" +compiler = "clang" +kind = "sharedlib" +cflags = ["-Wall", "-Wextra"] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "2" +``` + +## [toolchain] + +```toml +[toolchain] +cc = "/usr/bin/clang" +cxx = "/usr/bin/clang++" +as = "/usr/bin/as" +ar = "/usr/bin/ar" +ld = "/usr/bin/ld.lld" +``` + +Raw config also supports `uic`, `moc`, `rcc` for Qt codegen. + +## [dependencies] + +See [dependencies](/docs/reference/dependencies). + +## [run] + +```toml +[run] +cmd = "./target/{profile}/{name}" +``` + +Substitutions: + +* `{version}` — package version +* `{version_major}`, `{version_minor}`, `{version_patch}`, `{version_suffix}`, `{version_suffix_dash}` — version parts +* `{profile}` — debug / release +* `{name}` — package name + +Default `cmd` = `./target/{profile}/{name}` (macOS/Windows) or `./target/\/\/\` (Linux). + +## [workspace] + +See [workspaces](/docs/reference/workspaces). + +## [archive] + +Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`). + +| Field | Required | Description | +| ------------ | -------- | ------------------------------------------------------------------------------------------- | +| `output` | yes | Image path relative to project root (`{profile}` allowed) | +| `format` | yes | `fat12`, `fat16`, or `fat32` | +| `size` | no | Image size: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default `1474560` ≈ 1.44 MiB) | +| `offset` | no | Byte offset of the FAT volume inside the image (default `0`) | +| `label` | no | Volume label (max 11 chars, default `VOLUME`) | +| `bootsector` | no | Path to a 512-byte boot sector written at offset 0 when `offset` is 0 (`{profile}` allowed) | +| `layout` | no | List of `{ from, to }` entries (files or globs → path inside the volume) | + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" + +[[archive.layout]] +from = "assets/*" +to = "/" +``` + +Typical pairing with `kind = "flat-bin"` (NASM `-f bin`) for bootloaders and pure-ASM OS images. + +## `flat-bin` (kind) + +Produces a raw binary (default extension `bin`) for boot sectors, kernels, and freestanding payloads. + +### Assemblers + +| Tool | Language / compiler | How flat-bin is produced | +| ---- | ------------------------------------------ | -------------------------------------------- | +| NASM | `language = "asm"`, `compiler = "nasm"` | `-f bin` → `\.bin` | +| FASM | `compiler = "fasm"` | direct write (use `format binary` in source) | +| GAS | `compiler = "as"` / `"gas"` | assemble → `objcopy -O binary` | +| MASM | `compiler = "ml"` / `"ml64"` | assemble → `objcopy -O binary` | +| LLC | `language = "llvm_ir"`, `compiler = "llc"` | `-filetype=obj` → `objcopy -O binary` | + +```toml +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +### C / C++ + +Compile all sources, link with `-nostdlib -static` (plus your `ldflags` / `ldscript`), then convert the intermediate ELF/PE with `objcopy -O binary` to `\.bin`. + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldscript = "linker.ld" +ldflags = ["-T", "linker.ld"] +``` + +Notes: + +* Multi-file **ASM** packages emit one `\.bin` per source; **C/C++** emit a single project binary. +* `objcopy` tools tried in order: `llvm-objcopy`, `objcopy`, `gobjcopy`. +* Incompatible with `build.qt = true`. +* `dcr run` rejects `flat-bin` (not a host executable). diff --git a/docs-crowdin-export/ru-RU/docs/reference/dependencies.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/dependencies.mdx.mdx new file mode 100644 index 0000000..97a1a6e --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/dependencies.mdx.mdx @@ -0,0 +1,84 @@ +--- +sidebar_label: Dependencies +--- + +# Dependencies + +## Formats + +The `[dependencies]` section supports three formats: + +### String (registry) + +```toml +[dependencies] +fmt = "10.1.1" +spdlog = "1.12" +catch2 = "3.4.0" +``` + +The version string is used as-is for registry lookup. + +### Table (git) + +```toml +[dependencies] +fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" } +``` + +Fields: `git`, `branch`, `tag`, `rev`. + +### Table (path) + +```toml +[dependencies] +mylib = { path = "../mylib" } +``` + +## Registry + +DCR uses a package registry for dependency lookup by name. + +```toml +# ~/.dcr/config.toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrides the path to `index.json`. + +## Git dependencies + +Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources: + +* `branch` — switch to a branch +* `tag` — switch to a tag +* `rev` — switch to a specific commit +* `features` — feature flags (parsed, but does not affect build) + +## Path dependencies + +Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`. + +```toml +[dependencies] +mylib = { path = "/abs/path/to/lib" } +mylib = { path = "../relative/path" } +``` + +*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.* + +## dcr.lock + +Dependency lock file. Contains package names and sources. + +Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`. + +## Resolution process + +1. Load all dependencies (registry → git → path) +2. For path deps: recursively read their `dcr.toml` +3. For registry deps: search `index.json` +4. For git deps: clone to cache +5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler diff --git a/docs-crowdin-export/ru-RU/docs/reference/environment-variables.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/environment-variables.mdx.mdx new file mode 100644 index 0000000..8b75814 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/environment-variables.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Environment variables +--- + +# Environment Variables + +## DCR_COMPILER + +Overrides the compiler for all languages. **Highest priority.** + +```bash +export DCR_COMPILER=clang +dcr build +``` + +Compiler resolution priority: + +1. `DCR_COMPILER` (env) +2. `DCR_CC` / `DCR_CXX` / `DCR_AS` (env) +3. `[toolchain]` (dcr.toml) +4. `build.compiler` (dcr.toml) +5. `PATH` + +## DCR_CC / DCR_CXX / DCR_AS + +Per-language override (lower priority than `DCR_COMPILER`, higher than `[toolchain]`). + +```bash +export DCR_CC=gcc-14 +export DCR_CXX=g++-14 +export DCR_AS=arm-linux-gnueabihf-as +``` + +## DCR_LD / DCR_AR + +Override linker and archiver. + +```bash +export DCR_LD=ld.lld +export DCR_AR=llvm-ar +``` + +## DCR_DEBUG + +Enables debug mode — prints all compilation commands to stderr before execution. + +```bash +export DCR_DEBUG=1 +dcr build +``` + +## DCR_INDEX_PATH + +Overrides the path to the registry `index.json`. + +```bash +export DCR_INDEX_PATH=/custom/path/index.json +``` + +Default: `~/.dcr/index.json`. diff --git a/docs-crowdin-export/ru-RU/docs/reference/platform-support.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/platform-support.mdx.mdx new file mode 100644 index 0000000..a97eab5 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/platform-support.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Platform support +--- + +# Platform Support + +## Target Triples + +DCR normalizes target triples. Short platform names are expanded to full triples. + +### Linux + +``` +target/-unknown-linux-// +``` + +Architectures: `x86_64`, `aarch64`, `i686`, `armv7`, `riscv64` (host-detected). +Environments: `gnu` (default), `musl`. + +Artifact type: ELF. Extensions: `.so` (sharedlib), `.a` (staticlib). + +### macOS + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64` (host-detected). + +Extensions: `.dylib` (sharedlib), `.a` (staticlib). + +### Windows + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64`. +Environments: `msvc` (default), `gnu` (MinGW). + +Extensions: `.exe` (bin), `.lib` (staticlib), `.dll` (sharedlib), `.efi` (UEFI). + +### BSD + +``` +target/-unknown-// +``` + +Supported systems: `freebsd`, `openbsd`, `netbsd`, `dragonfly`. + +## Host Detection + +DCR uses `std::env::consts::ARCH` and `std::env::consts::OS` for host platform detection. Used as fallback when `target` is not specified. diff --git a/docs-crowdin-export/ru-RU/docs/reference/workspaces.mdx.mdx b/docs-crowdin-export/ru-RU/docs/reference/workspaces.mdx.mdx new file mode 100644 index 0000000..082be1e --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/workspaces.mdx.mdx @@ -0,0 +1,88 @@ +--- +sidebar_label: Workspaces +--- + +# Workspaces + +Workspaces allow managing multiple packages in a single repository. + +## Configuration + +```toml +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +### Member fields + +| Field | Description | +| ------ | ------------------------------------------------ | +| `path` | Path to the package (relative to workspace root) | +| `deps` | Dependencies on other members | +| `main` | Mark as the main package | + +## Topological sort + +DCR automatically sorts packages by dependencies: package A is built before B if B depends on A. + +Cyclic dependencies are detected and cause an error. + +## Build + +```bash +dcr build # build all packages in dependency order +dcr build --workspace app # build only app (dependencies built automatically) +``` + +When building a workspace, DCR automatically injects include and library paths of dependent workspace members: + +* **Include Paths**: Automatically resolves and injects header directories of dependencies, including the member's `src/` directory, local `include/` directory, and the packaged `target/include` directory. +* **Library Paths**: Injects compiled library search paths (`target/lib` as well as target-specific build folders) to allow automatic linking with member libraries. + +## Clean + +```bash +dcr clean # clean only root target/ +dcr clean --all # clean target/ of all packages +``` + +## Inheritance + +If a member has `inherit = true` in its `[build]` section, fields from the root `[build]` are merged into the member: + +```toml +# root dcr.toml +[build] +inherit = true +language = "c" +standard = "c17" + +# member inherits language and standard +``` + +## Workspace-only root (no build of its own) + +A workspace root can set `workspace_only = true` — it won't be built itself, and doesn't need `language` or `compiler`: + +```toml +[package] +name = "my-workspace" +version = "0.1.0" + +[build] +workspace_only = true +kind = "bin" + +[workspace] +lib-core = { path = "lib-core" } +app = { path = "app", deps = ["lib-core"] } +``` diff --git a/docs-crowdin-export/ru-RU/docs/self-update.mdx.mdx b/docs-crowdin-export/ru-RU/docs/self-update.mdx.mdx new file mode 100644 index 0000000..f9e7e88 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/self-update.mdx.mdx @@ -0,0 +1,46 @@ +--- +sidebar_label: Self Update +--- + +# Self Update + +## dcr --update + +Automatic update to the latest version. Downloads a binary (not an archive) from GitHub Releases and replaces the current executable. + +```bash +dcr --update +``` + +## How it works + +1. DCR detects the current platform and architecture +2. Fetches the latest release from `api.github.com/repos/dexoron/dcr/releases/latest` +3. Compares versions +4. Downloads the matching asset (direct binary URL, not archive) +5. Replaces the current executable via `self_replace` + +## Asset naming + +Pattern: `dcr-\` or `dcr-\.exe` + +| Platform | Asset name | +| -------------- | -------------------------------- | +| Linux x86_64 | `dcr-x86_64-unknown-linux-gnu` | +| macOS x86_64 | `dcr-x86_64-apple-darwin` | +| macOS ARM64 | `dcr-aarch64-apple-darwin` | +| Windows x86_64 | `dcr-x86_64-pc-windows-msvc.exe` | + +## AUR + +If DCR was installed via AUR, `--update` shows a warning: + +``` +Update via package manager: yay/paru -Syu {package_name} or sudo pacman -Syu {package_name} +``` + +## Errors + +* Cannot detect platform — error +* Cannot fetch release — error with URL +* No write permission — error (use `sudo` or manual install) diff --git a/docs-crowdin-export/ru-RU/docs/testing/running-tests.mdx.mdx b/docs-crowdin-export/ru-RU/docs/testing/running-tests.mdx.mdx new file mode 100644 index 0000000..934b0ed --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/testing/running-tests.mdx.mdx @@ -0,0 +1,45 @@ +--- +sidebar_label: Running tests +--- + +# Running Tests + +## Execution + +```bash +dcr test +``` + +Builds the project, then compiles and runs test files from `tests/`. + +## Profiles + +```bash +dcr test # debug (default) +dcr test --release # release +dcr test --debug # explicit debug +``` + +## Output + +``` +===================== + Testsuite summary +===================== +TOTAL: 5 +PASS: 3 +SKIP: 1 +FAIL: 1 +===================== +``` + +## Exit code + +* 0 — all tests passed (FAIL = 0) +* 1 — test failures or build error + +## What gets built + +* All `.c` files from `tests/` (`.cpp` not supported) +* Include path: `tests/` (for `dcr_test.h`) +* Linked with project if `package.type = "lib"` or `kind = "staticlib"`/`"sharedlib"` diff --git a/docs-crowdin-export/ru-RU/docs/testing/test-framework.mdx.mdx b/docs-crowdin-export/ru-RU/docs/testing/test-framework.mdx.mdx new file mode 100644 index 0000000..ae43679 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/testing/test-framework.mdx.mdx @@ -0,0 +1,69 @@ +--- +sidebar_label: Test framework (EXPECT, TEST, ...) +--- + +# Test Framework + +DCR has a built-in minimal test framework for C. + +## Macros + +### `EXPECT(expr)` + +Asserts that an expression is true. + +```c +EXPECT(1 + 1 == 2); +EXPECT(ptr != NULL); +``` + +### `SKIP(reason)` + +Skips a test with a message. + +```c +SKIP("not implemented on Windows"); +``` + +### `TEST(name)` + +Defines a test. + +```c +TEST(addition) { + EXPECT(1 + 1 == 2); + EXPECT(2 + 2 == 4); +} +``` + +### `TEST_CASE(name)` + +Registers a test case. + +```c +TEST_CASE(math) { + EXPECT(1 + 1 == 2); +} +``` + +## Initialization + +```bash +dcr test --init +``` + +Creates: + +* `tests/dcr_test.h` — framework header (do not edit) +* `tests/test.c` — template with example test + +## Structure + +``` +tests/ +├── dcr_test.h # framework (do not edit) +├── test.c # main tests +└── ... # additional .c test files +``` + +Only `.c` files are compiled (`.cpp` is not supported). diff --git a/docs-crowdin-export/uk-UA/docs/README.mdx.mdx b/docs-crowdin-export/uk-UA/docs/README.mdx.mdx new file mode 100644 index 0000000..f00c04a --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/README.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Introduction +--- + +# DCR — C/C++ Build Tool & Package Manager + +
+Quick reference + +```bash +# Installation +curl -fsSL https://dcr.dexoron.su/install.sh | sh + +# Create a project +dcr new my-app +cd my-app + +# Build and run +dcr build +dcr run + +# Run tests +dcr test + +# Add a dependency +dcr add fmt + +# Generate IDE files +dcr gen vscode +``` + +
+ +## Contents + +| Section | Description | +| ----------------------------------------------------- | --------------------------------------------- | +| [Getting Started](/docs/getting-started/installation) | Installation and first steps | +| [Commands](/docs/commands/project-commands) | All CLI commands | +| [Reference](/docs/reference/dcr-toml) | Configuration, build, dependencies, platforms | +| [Testing](/docs/testing/test-framework) | Built-in test framework | +| [Recipes](/docs/recipes/cross-to-windows) | Common scenarios | +| [IDE Integration](/docs/ide-integration) | VS Code, CLion, compile_commands.json | +| [Self Update](/docs/self-update) | Auto-update | +| [FAQ](/docs/faq) | Frequently asked questions | +| [Changelog](/docs/changelog) | Version history | +| [License](/docs/license) | DCR and vendored library licenses | +| [Contributing](/docs/contributing) | DCR development | + +## Features + +* **Incremental builds** — mtime + `.d` headers + SHA256 fingerprint +* **Parallel compilation** — thread::scope, atomic task queue +* **7 backends** — gcc/clang (unix_cc), MSVC/clang-cl (msvc), GAS, NASM, MASM, FASM, LLVM IR +* **8 project kinds** — bin, staticlib, sharedlib, efi, elf, none, custom, flat-bin +* **Disk images** — optional `[archive]` packs FAT12/16/32 images after build +* **Cross-compilation** — short names and full triples +* **Profiles** — debug / release with field overrides +* **Workspaces** — multi-package projects with topological sort +* **Registry + Git + Path** — three dependency mechanisms +* **IDE generation** — VS Code, CLion, compile_commands.json, JSON metadata +* **pkg-config** — automatic system library discovery +* **Per-command `--help`** — `dcr build --help`, `dcr new --help`, etc. +* **Man pages** — `man dcr`, `man dcr-build`, `man dcr-new` diff --git a/docs-crowdin-export/uk-UA/docs/changelog.mdx.mdx b/docs-crowdin-export/uk-UA/docs/changelog.mdx.mdx new file mode 100644 index 0000000..6f494b7 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/changelog.mdx.mdx @@ -0,0 +1,193 @@ +--- +sidebar_label: Changelog +--- + +# Changelog + +## 0.8.1 (2026-07-20) + +### Added + +* **`build.kind = "flat-bin"`** — raw binary (default `.bin`) for OS-dev payloads: + * **NASM** — `-f bin` → `\.bin` + * **FASM** — direct output (`format binary` in source) + * **GAS / MASM / LLC** — object → `objcopy -O binary` → `\.bin` + * **C/C++** — objects → freestanding link → `objcopy -O binary` → `\.bin` + * Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit +* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths. +* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory. + +### Changed + +* **`--force`** also re-runs `build.steps` and `build.post_steps`. +* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member. + +### Dependencies + +* `fatfs = "0.3"` for FAT image packing. + +## 0.8.0 (2026-07-18) + +### Added + +* **Dedicated Build Engine (`src/core/build/engine.rs`)** — decoupled the build orchestration logic completely from the CLI front-end wrapper in `src/cli/build.rs` to a reusable, decoupled core build engine. +* **Polymorphic Language Model (`Language` trait)** — introduced the abstract `Language` trait (`src/core/build/language/mod.rs`). File scanning, compiler resolution, and flags handling are now encapsulated in dedicated language modules for C, C++ (including Qt code generation), LLVM IR, and ASM (GAS, NASM, FASM, MASM). +* **Polymorphic Compilation Dispatch (`Builder` trait)** — introduced the `Builder` trait to generalize builder invocations (`src/core/build/builder/mod.rs`). Consolidated GCC/Clang logic into `builder/cc_common.rs` and Microsoft Visual C++ logic into `builder/msvc/`. +* **Per-Language Configuration overrides (`[build.\]`)** — introduced support for configuring language-specific compiler, standard, and flags (e.g. `[build.c]`, `[build.cxx]`, `[build.asm]`) independently in `dcr.toml`. +* **Automatic Workspace Dependency Injection** — during workspace builds, include/lib paths of dependent workspace members (including their source headers, local `include/` folders, and build target `target/include` / `target/lib` folders) are automatically resolved and injected. +* **`BuildReporter` Event System** — decoupled build orchestration output into a structured event-driven reporter model (`src/core/build/report.rs`), making DCR suitable for library embedding and IDE integrations without stderr capturing. +* **Build Cancellation Support** — introduced thread-safe cancellation tokens (`Arc\`) allowing clients to safely abort compile runs mid-execution. +* **TOML Formatting & Custom Keys Preservation** — migrated the config editor to `toml_edit`, preserving all unknown/user-defined TOML keys, structures, and comments during file write operations (e.g., in `dcr add`). +* **Path Dependencies Target Include Resolution** — local path dependencies configured via tables now correctly expose headers built and packaged into their `target/include` folder to consumer packages. +* **Modular Integration Test Suite** — refactored the monolith `tests/cli_basic.rs` file into clean, specialized integration tests: `cli_build.rs`, `cli_deps.rs`, `cli_lint.rs`, `cli_new.rs`, `cli_qt.rs`, `cli_test.rs`, `cli_workspace.rs`. + +### Changed + +* **Consolidated Linking and Archiving** — artifact generation (linking executables/shared libraries and archiving static libraries) consolidated into a single `src/core/build/builder/artifact.rs` module. +* **Workspace-Aware member execution** — `dcr run` executed at the workspace root of a `workspace_only` project now triggers the member build inside the workspace context using the `--workspace` parameter, preventing standalone build issues. +* **Elimination of Global State** — removed global variables and states from the build core, encapsulating build logic inside isolated `BuildContext` structs for thread safety. +* **Build Cache Separation** — relocated mtime tracking, incremental caching, and header-dependency checking logic to `src/core/build/cache.rs`. +* **Modularized Pre-build Steps** — decoupled generator scripts and pre-build commands parsing into `src/core/build/steps.rs`. + +## 0.7.4 (2026-06-17) + +### Added + +* **Native Qt support** — automatic meta-object handling (MOC, UIC, RCC) added when `build.qt = true` is set in `dcr.toml`. +* **`dcr lint` command** — C/C++ static analysis via `clang-tidy`. Supports `--fix` for automatic fixes. Respects `build.roots` and `build.src_disable` from config. +* **Three new assembler backends**: + * **MASM** (`compiler = "ml"` / `"ml64"`) — Microsoft Macro Assembler. + * **FASM** (`compiler = "fasm"`) — Flat Assembler. + * **LLVM IR** (`compiler = "llc"`) — compiles `.ll` files via `llc -filetype=obj`. +* **Shared ASM pipeline** — linking and archiving logic consolidated into `core/builder/asm.rs`. Adding a new assembler backend now takes ~30 lines. +* **Filesystem utilities** — `to_hex()` and `home_dir()` extracted to `utils/fs.rs`. +* **Build utilities** — `normalize_target()`, `normalize_kind()`, `normalize_platform()`, `default_profile_flags()` extracted to `utils/build.rs`. +* **Backend helpers** — `asm_lang_flag()`, `source_extensions()`, `elapsed_secs()` added to `core/builder/common.rs`. +* **Full Bare-Metal / Freestanding Automation** — introduced the `build.freestanding = true` configuration option. When enabled (or when a bare-metal target is detected), DCR automatically injects `-ffreestanding` during compilation and both `-nostdlib` and `-static` during linking. +* **Artifact Optimization (LTO & Strip)** — added `build.lto` (auto-injects `-flto` for compiler and linker) and `build.strip` (automatically strips debug symbols via linker `-s` flag) options to `dcr.toml`. +* **Compilation Thread Control** — added the `build.codegen-units` option to strictly limit the maximum number of parallel jobs utilized by the custom `parallel_build` worker pool. +* **Panic Behavior Management** — added `build.panic = "abort"` support. For C++ targets, it automatically strips exception handling and unwind tables via `-fno-exceptions`, `-fno-unwind-tables`, and `-fno-asynchronous-unwind-tables`. + +### Changed + +* **Intelligent Default Flags Generation** — automated injection of fallback optimization (`-O3`/`-O0`), debug (`-g`), and warning (`-Wall -Wextra`) flags is now suppressed for bare-metal and freestanding builds if `build.cflags` are overridden. +* **Centralized Bare-Metal Detection** — relocated the `is_bare_metal_target` helper to common build utilities (`src/utils/build.rs`) for unified access across the building core. +* **Architectural Refactoring**: + * Renamed `src/config.rs` to `src/templates.rs`. + * Started consolidation of configuration and build orchestration logic. + +## 0.7.3 (2026-06-13) + +### Added + +* **`--vcs` option for `new` and `init` commands** — introduced explicit version control system selection via `--vcs \`. +* **Git metadata integration in `--version`** — the CLI now appends the current short commit hash and a `-dirty` suffix if there are uncommitted changes in the DCR repository. +* **Automatic `.gitignore` generation** — Git repository initialization now automatically writes a `.gitignore` file excluding the `/target` directory. +* **Nested repository prevention** — automatic Git initialization is now skipped if `dcr new` or `dcr init` is executed inside an already existing Git repository. +* **VCS verification tests** — added `new_vcs_options_work` and `init_vcs_options_work` integration tests to ensure reliable repository behavior. + +### Changed + +* **Complete removal of `git2` dependency** — all Git actions (dependency fetching, VCS setup, status checks) are now delegated to the system `git` executable via `Command`. This simplifies compilation and drops the need for `vendored` and `openssl` features. +* **Migrated from `reqwest` to `ureq`** — replaced the heavy `reqwest` crate in `flag_update.rs` with the lightweight synchronous `ureq 2.10` client, reducing overhead and the final binary size. + +## 0.7.2 (2026-06-07) + +### Added + +* `default_target_triple()` now respects `target_env` — Linux (gnu/musl) and Windows (msvc/gnu) use the correct environment instead of hardcoded values. + +### Fixed + +* **macOS Apple Silicon builds failed with `_main` undefined** — `--target=` is now passed to ldflags, not just cflags. `default_target_triple()` uses `std::env::consts::ARCH` on macOS instead of hardcoded `x86_64`. +* **GitHub Stars and GPL-3.0 badges not rendering in README** — badge block converted to pure HTML. + +### Changed + +* Default target resolution extracted into shared `default_target_triple()` — removed duplication across build, run, clean. + +## 0.7.1 (2026-06-02) + +### Added + +* **`--help` for all commands** — `dcr build --help`, `dcr run --help`, `dcr new --help`, + `dcr init --help`, `dcr clean --help`, `dcr add --help`, `dcr fmt --help`, + `dcr setup --help`, `dcr tree --help`, `dcr gen --help`, `dcr --update --help`, + `dcr test --help`. All output uses styled headers (green) and usage lines (cyan). +* **Man pages** — 12 troff pages in `man/man1/`: `dcr.1`, `dcr-build.1`, + `dcr-run.1`, `dcr-new.1`, `dcr-init.1`, `dcr-clean.1`, `dcr-add.1`, `dcr-test.1`, + `dcr-gen.1`, `dcr-fmt.1`, `dcr-tree.1`, `dcr-setup.1`. +* **Man pages in all packaging** — install.sh, install_bsd.sh, AUR PKGBUILD, + Debian (cargo-deb), RPM (cargo-generate-rpm), Nix (postInstall), Homebrew + (resource), Snap, GitHub Release assets. +* **Project name validation** — `dcr init` and `dcr new` now validate names before + creating files. Only ASCII letters, digits, `_` and `-` are allowed. +* **`documentation` and `homepage` fields** — added to `Cargo.toml`. +* **Release profile optimizations** — `opt-level = "z"`, LTO, `codegen-units = 1`, + `panic = "abort"`, `strip = true` for smaller binaries. +* **Linux i686, armv7, riscv64 targets** — added to release workflow and install scripts. +* **Linux musl i686, armv7 targets** — cross-compiled via zigbuild in CI. +* **AUR packages** — `dcr-dev`, `dcr-dev-bin` publishing workflow. +* **Snap publishing** — automated Snapcraft publishing in CI. +* **Snap badge** — in README. + +### Changed + +* **`validate_package_name` made public** — callable from CLI commands. +* **README platform table** — reorganized: libc variants as separate OS rows, + removed extra columns. Linux architecture list updated. +* **`gen.rs` no-args output** — now uses styled output instead of raw `eprintln!`. +* **`tree.rs`, `fmt.rs`, and `setup.rs`** — now accept arguments for `--help`. +* **README install commands** — `| bash` → `| sh` for POSIX compatibility. + +### Fixed + +* **`dcr new \` creates directory then fails** — validation now + happens before any file operations. +* **`dcr init` on invalid directory name** — same fix. +* **Man pages missing in installed packages** — now shipped in all formats. +* **Windows drive letter false positive** — in dependency file parser. +* **CRLF (`\r\n`) breaks dependency parser** — now handles mixed line endings. +* **Newline after backslash not consumed** — in `parse_d_file` escape handling. + +## 0.7.0 (2026-06-01) + +### Added + +* **OpenBSD and NetBSD target support** — full platform routing with dynamic target triples using `std::env::consts::ARCH` and `std::env::consts::OS`. Affects `build`, `run`, `clean` commands and the platform module. +* **`src/platform/bsd.rs`** — new BSD platform module (shared by FreeBSD, OpenBSD, NetBSD) providing `bin_path`, `lib_path`, `elf_path`, `efi_path`, `shared_lib_path`. +* **`build.out_dir` config option** — custom output directory that overrides the default `target/\/\` path for final artifacts. Supported in `build`, `run`, and config validation. +* **`dcr fmt` command** — new CLI command that formats all C/C++ source files (`*.c`, `*.cpp`, `*.h`, `*.hpp`) in `src/` and `tests/` using `clang-format`. +* **Incremental linking** — `needs_link()` in `common.rs` checks if any object file is newer than the linked output, skipping unnecessary relinking. Implemented for all backends (`unix_cc`, `msvc`, `gas`, `nasm`). +* **`build.kind = "none"` and `"custom"`** — two new project kinds for special build scenarios that don't produce standard artifacts. +* **`install_bsd.sh`** — POSIX-compliant installation script for BSD systems (FreeBSD, OpenBSD, NetBSD) with binary download and source build modes. +* **Linux ARM64 support in `install.sh`** — added `Linux:aarch64|Linux:arm64` target detection for pre-built binary downloads. +* **BSD OS detection in `install.sh`** — detects FreeBSD, OpenBSD, NetBSD and determines target triple. +* **`rust-toolchain.toml`** — explicit toolchain pinning to `stable` channel. +* **Integration tests** — `build_with_target_config` (verifies `build.target = "linux"`) and `build_with_out_dir` (validates custom output directory). +* **`get_build_string_with_profile` made `pub`** — so `run.rs` can determine custom output directory configuration. + +### Changed + +* **`build.target` semantics changed** — now strictly contains a target triple (e.g., `x86_64-unknown-linux-gnu`) or short name (`linux`, `macos`, `windows`). No longer used as custom output directory — this functionality moved to `build.out_dir`. +* **`build.standard` made optional** — changed from `String` to `Option\`. Validation only enforces non-empty for non-ASM languages. Skipped in `dcr.toml` output if empty. +* **`dcr run` with `out_dir`** — now determines target directory respecting `build.out_dir` via `get_build_string_with_profile()` from `build.rs`. +* **`collect_sources()` returns empty vector** instead of error when no sources are found, allowing `kind = "none"` or `kind = "custom"` projects with no source files. +* **CI/CD release workflow refactored** — `git2` made target-specific (no vendored-openssl on Windows), Zig-based cross-compilation for non-x86_64 Linux targets, Arch Linux package version cleanup (dashes → dots), `gmake` symlink for NetBSD. +* **README compatibility table** — FreeBSD, OpenBSD, NetBSD build/run status upgraded from "community/best-effort" to "officially supported". +* **Documentation updated** — `build-section.md` describes new `build.target` and `build.out_dir` fields. `target-directory.md` rewritten to clarify the distinction. + +### Fixed + +* **stdout/stderr not inherited in `dcr run`** — child process output was captured and manually printed, breaking interactive programs. Fixed by switching to `Command::status()`. +* **Race condition in release CI** — matrix build jobs could upload assets to a release that didn't exist yet. Fixed by adding a dedicated `create-release` job. +* **Release GHA — stable toolchain override** — fixed Rust toolchain override issues in CI. +* **Arch Linux package version sanitization** — version strings with dashes (e.g., `0.7.0-dev`) are invalid for `pkgver`. Fixed by replacing dashes with dots. +* **GPG permissions after Docker** — Docker operations changed GPG directory ownership. Fixed by running `chown` after Docker commands. +* **RPM artifact paths** — RPM artifacts were placed in `rpm/x86_64/` instead of `fedora/x86_64/`. Fixed in Dexoron Packages Index workflow. +* **JSON parsing reliability in `install.sh`** — added `jq` as primary parser with `python3` fallback for dev channel release lookup. + +### Removed + +* **`format_roots()` helper function** — removed from `common.rs`. Was only used by the old error handling path in `collect_sources()`. +* **Per-distribution artifact download steps** — three separate `actions/download-artifact` steps replaced with unified `gh release download --clobber`. diff --git a/docs-crowdin-export/uk-UA/docs/commands/build-commands.mdx.mdx b/docs-crowdin-export/uk-UA/docs/commands/build-commands.mdx.mdx new file mode 100644 index 0000000..ad38d1a --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/commands/build-commands.mdx.mdx @@ -0,0 +1,47 @@ +--- +sidebar_label: Build commands (build, run, clean) +--- + +# Build Commands + +## `dcr build` + +Builds the project according to `dcr.toml`. + +```bash +dcr build # debug profile +dcr build --release # release build +dcr build --debug # explicit debug +dcr build --target aarch64-unknown-linux-gnu +dcr build --force # full rebuild (also re-runs build.steps / post_steps) +dcr build --clean # clean + build +dcr build --verbose # show compilation commands +dcr build --workspace pkg-a # build specific workspace package +``` + +Artifacts: `target/\/\/\` (Linux with explicit target). + +With `[archive]` in `dcr.toml`, a FAT disk image is packed after a successful build. + +## `dcr run` + +Builds (if sources are newer than artifacts) and runs the binary. + +```bash +dcr run +dcr run --release +dcr run --force # force rebuild then run +``` + +On a **workspace-only** root: if `[run].cmd` is set, that command is used after build; otherwise DCR delegates to a workspace member. + +## `dcr clean` + +Removes `target/` directory (or `target/\/\`). + +```bash +dcr clean +dcr clean --release # target/release/ only +dcr clean --target windows # target/x86_64-pc-windows-msvc/ +dcr clean --all # clean all workspace packages +``` diff --git a/docs-crowdin-export/uk-UA/docs/commands/dependency-commands.mdx.mdx b/docs-crowdin-export/uk-UA/docs/commands/dependency-commands.mdx.mdx new file mode 100644 index 0000000..4b5b982 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/commands/dependency-commands.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Dependency commands (add, tree) +--- + +# Dependency Commands + +## `dcr add \ [source]` + +Adds a dependency to `dcr.toml`. + +```bash +dcr add fmt # registry lookup +dcr add mylib ../path/to/lib # path as source +dcr add mylib path:./lib # explicit path prefix +dcr add mylib git:https://github.com/user/repo # explicit git prefix +dcr add mylib github:user/repo # GitHub shorthand +dcr add mylib gitlab:user/repo # GitLab shorthand +``` + +Source prefixes: + +* `path:` — local path +* `git:` — generic git URL +* `github:` — expands to `https://github.com/\/\` +* `gitlab:` — expands to `https://gitlab.com/\/\` +* `http://` / `https://` / `git@` — full URL + +Flags: + +* `--branch \` — git branch +* `--tag \` — git tag +* `--rev \` — git commit + +If source is omitted — DCR searches connected registries. + +## `dcr tree` + +Displays the project dependency tree. + +```bash +dcr tree +``` + +Example output: + +``` +my-app v0.1.0 +├── fmt (registry) +│ └── spdlog (registry) +└── catch2 (registry) +``` + +For path dependencies, recursively shows their own dependencies (from their `dcr.toml`). diff --git a/docs-crowdin-export/uk-UA/docs/commands/gen-commands.mdx.mdx b/docs-crowdin-export/uk-UA/docs/commands/gen-commands.mdx.mdx new file mode 100644 index 0000000..466b04c --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/commands/gen-commands.mdx.mdx @@ -0,0 +1,73 @@ +--- +sidebar_label: Gen commands (vscode, clion, ...) +--- + +# Gen Commands + +## `dcr gen \` + +Generates IDE integration files. + +### vscode + +```bash +dcr gen vscode +``` + +Creates: + +* `.vscode/tasks.json` — `build` task (dcr build) +* `.vscode/launch.json` — debug launch configuration +* `.vscode/settings.json` — C/C++ settings (clangd paths, includes) +* `.vscode/extensions.json` — recommended extensions (vscode-clangd, vscode-lldb) + +### clion + +```bash +dcr gen clion +``` + +Creates: + +* `.idea/externalTools.xml` — external tools (build, run, clean, test) +* `.idea/customTargets.xml` — custom build targets +* `.idea/misc.xml` — C/C++ project settings +* `.idea/runConfigurations/\.xml` — per-binary run configurations + +### compile-commands + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` — standard format for clangd, cpptools, static analyzers. + +### project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata: + +```json +[ + { + "name": "my-app", + "version": "0.1.0", + "root": "/path/to/project", + "profile": "debug", + "language": "c", + "standard": "c17", + "cxx_standard": null, + "compiler": "/usr/bin/clang", + "kind": "bin", + "sources": ["src/main.c"], + "include_dirs": ["src"], + "lib_dirs": [], + "libs": [], + "cflags": ["-std=c17", "-O0", "-g"], + "ldflags": [] + } +] +``` diff --git a/docs-crowdin-export/uk-UA/docs/commands/project-commands.mdx.mdx b/docs-crowdin-export/uk-UA/docs/commands/project-commands.mdx.mdx new file mode 100644 index 0000000..e5e4eb7 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/commands/project-commands.mdx.mdx @@ -0,0 +1,40 @@ +--- +sidebar_label: Project commands (new, init) +--- + +# Project Commands + +## `dcr new \` + +Creates a new project with a standard structure and `dcr.toml`. The `name` argument is required. + +Only ASCII letters, digits, underscores `_` and hyphens `-` are allowed in the project name. + +```bash +dcr new my-app +dcr new my-app --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +Generates: + +* `dcr.toml` with basic fields +* `src/main.c` with a `main` template + +## `dcr init` + +Initializes a DCR project in the current (empty) directory. + +```bash +dcr init +dcr init --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +The project name is taken from the current directory name. The directory name must follow the same naming rules as `dcr new`. diff --git a/docs-crowdin-export/uk-UA/docs/commands/quality-commands.mdx.mdx b/docs-crowdin-export/uk-UA/docs/commands/quality-commands.mdx.mdx new file mode 100644 index 0000000..cdfe503 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/commands/quality-commands.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Quality commands (test, fmt) +--- + +# Quality Commands + +## `dcr test` + +Runs tests. + +```bash +dcr test # debug profile +dcr test --release # release profile +dcr test --debug # explicit debug +dcr test --help # detailed help +``` + +Before first use, initialize tests: + +```bash +dcr test --init +``` + +This creates `tests/dcr_test.h` (framework) and `tests/test.c` (template). + +What `dcr test` does: + +1. Builds the project +2. Collects `tests/*.c` files (`.c` only, not `.cpp`) +3. Compiles and links each test file +4. Runs each test binary +5. Prints summary: TOTAL, PASS, SKIP, FAIL +6. Returns non-zero exit code on any FAIL + +## `dcr fmt` + +Formats C/C++ source files using `clang-format`. + +```bash +dcr fmt +``` + +Processes: `src/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}` and `tests/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}`. + +Uses `.clang-format` at the project root (if present), otherwise default clang-format style. + +## `dcr lint` + +Runs `clang-tidy` on C/C++ source files for static analysis. + +```bash +dcr lint # show diagnostics +dcr lint --fix # apply fixes automatically +dcr lint --help # detailed help +``` + +Processes: `src/**/*.{c,cpp,cxx,cc}` and `tests/**/*.{c,cpp,cxx,cc}`. + +Without `--fix`, clang-tidy reports warnings and errors without modifying files. +With `--fix`, clang-tidy applies automatic suggestions in place. diff --git a/docs-crowdin-export/uk-UA/docs/commands/system-commands.mdx.mdx b/docs-crowdin-export/uk-UA/docs/commands/system-commands.mdx.mdx new file mode 100644 index 0000000..ec99cf1 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/commands/system-commands.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: System commands (setup, --help, ...) +--- + +# System Commands + +## `dcr setup` + +Shows configured registries from `~/.dcr/config.toml`. + +```bash +dcr setup +``` + +If `~/.dcr/config.toml` is not found, DCR returns an error. Create it manually: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +## `dcr --help` + +Shows help for all commands. + +```bash +dcr --help +``` + +## `dcr --version` + +Shows version and target triple. + +```bash +dcr --version # dcr 0.7.0 (x86_64-unknown-linux-gnu) +``` + +## `dcr --update` + +Self-update. Downloads the latest release binary from GitHub Releases and replaces the current one. + +```bash +dcr --update +``` + +Features: + +* Auto-detects platform and architecture +* Warns if installed via AUR (use package manager instead) +* Works on Linux, macOS, Windows diff --git a/docs-crowdin-export/uk-UA/docs/contributing.mdx.mdx b/docs-crowdin-export/uk-UA/docs/contributing.mdx.mdx new file mode 100644 index 0000000..d422910 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/contributing.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: Contributing +--- + +# Contributing + +## Setup + +```bash +git clone https://github.com/dexoron/dcr +cd dcr +cargo build +``` + +## Code style + +All code must be formatted with `cargo fmt`: + +```bash +cargo fmt +``` + +## Linting + +```bash +cargo clippy --all-targets -- -D warnings +``` + +## Tests + +```bash +cargo test --all-targets +``` + +## PR process + +1. Fork the repository +2. Create a branch: `git checkout -b feature/description` +3. Make changes +4. Run `cargo fmt && cargo clippy && cargo test` +5. Open a Pull Request + +## CI + +CI runs: + +* `cargo fmt --check` +* `cargo clippy --all-targets -- -D warnings` +* `cargo check --all-targets --all-features` +* Build on Linux, macOS, Windows +* Integration tests (compilation check) diff --git a/docs-crowdin-export/uk-UA/docs/faq.mdx.mdx b/docs-crowdin-export/uk-UA/docs/faq.mdx.mdx new file mode 100644 index 0000000..4680f99 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/faq.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: FAQ +--- + +# FAQ + +## Registry not found + +``` +error: registry not found +``` + +**Solution:** Make sure `~/.dcr/config.toml` exists: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +And check `DCR_INDEX_PATH`: + +```bash +echo $DCR_INDEX_PATH +``` + +## Compiler not found + +``` +error: compiler not found +``` + +**Solution:** Ensure a compiler is installed and available in PATH. + +```bash +which gcc +which clang +``` + +Or specify explicitly via `[toolchain]` in `dcr.toml`. + +## Ctrl+C during build + +DCR handles SIGINT: interrupts the current compilation and exits with non-zero code. + +## How to create a library? + +See [Library Recipe](/docs/recipes/library-project). + +## How to cross-compile to Windows? + +See [Cross-Compile Recipe](/docs/recipes/cross-to-windows). + +## How to create a multi-package project? + +See [Workspace Recipe](/docs/recipes/multi-package-workspace). + +## Bootloader / pure NASM OS image + +Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk image. + +See [OS-dev recipe](/docs/recipes/os-flat-bin-archive). + +## Lock file + +`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`. diff --git a/docs-crowdin-export/uk-UA/docs/getting-started/first-steps.mdx.mdx b/docs-crowdin-export/uk-UA/docs/getting-started/first-steps.mdx.mdx new file mode 100644 index 0000000..ce4bcf9 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/getting-started/first-steps.mdx.mdx @@ -0,0 +1,79 @@ +--- +sidebar_label: First steps +--- + +# First Steps + +## Create a project + +```bash +dcr new my-app +cd my-app +``` + +Structure: + +``` +my-app/ +├── dcr.toml +└── src/ + └── main.c +``` + +`dcr.toml`: + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +``` + +## Build + +```bash +dcr build +``` + +Output — `target/\/debug/my-app` (Linux) or `target/debug/my-app.exe` (Windows). + +Build profiles: + +```bash +dcr build --release # release build +dcr build --debug # debug (default) +``` + +## Run + +```bash +dcr run +``` + +Builds (if needed) and runs the binary. + +## First test + +```bash +dcr test --init # create test template +dcr test # run tests +``` + +## Formatting + +```bash +dcr fmt # clang-format with .clang-format +``` + +## Linting + +```bash +dcr lint # clang-tidy checks +dcr lint --fix # apply fixes automatically +``` diff --git a/docs-crowdin-export/uk-UA/docs/getting-started/installation.mdx.mdx b/docs-crowdin-export/uk-UA/docs/getting-started/installation.mdx.mdx new file mode 100644 index 0000000..d574bb4 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,109 @@ +--- +sidebar_label: Installation +--- + +# Installation + +## Linux (Dexoron Packages) + +Configure your package manager at https://pkg.dexoron.su and install: + +**Arch Linux** + +```sh +sudo pacman -Sy dcr +``` + +**Debian/Ubuntu** + +```sh +sudo apt update && sudo apt install dcr +``` + +**Fedora/RHEL** + +```sh +sudo dnf install dcr +``` + +## Arch Linux (AUR) + +```sh +yay -S dcr +``` + +## macOS / Linux (Homebrew) + +```sh +brew tap dexoron/dexoron +brew install dcr +``` + +## Snap (Linux) + +```sh +sudo snap install dcrup +``` + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +# or install to profile: +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +## Linux / macOS (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install.sh | sh +``` + +## BSD (script) + +```sh +curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh +``` + +## Windows (PowerShell) + +```powershell +irm https://dcr.dexoron.su/install.ps1 | iex +``` + +## From source + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr && cargo build --release +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +``` + +## Post-install + +Verify the installation: + +```bash +dcr --version +``` + +Man pages are available after installation: + +```bash +man dcr +man dcr-build +``` + +To use the registry, create `~/.dcr/config.toml`: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` diff --git a/docs-crowdin-export/uk-UA/docs/ide-integration.mdx.mdx b/docs-crowdin-export/uk-UA/docs/ide-integration.mdx.mdx new file mode 100644 index 0000000..7b0fdf6 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/ide-integration.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: IDE Integration +--- + +# IDE Integration + +## VS Code + +```bash +dcr gen vscode +``` + +Generates in `.vscode/`: + +| File | Purpose | +| ----------------- | -------------------------------------------- | +| `tasks.json` | `build` task (dcr build) | +| `launch.json` | Debug launch configuration | +| `settings.json` | clangd/IntelliSense: include paths, standard | +| `extensions.json` | Recommends vscode-clangd, vscode-lldb | + +## CLion + +```bash +dcr gen clion +``` + +Generates in `.idea/`: + +| File | Purpose | +| ------------------------------------------------ | ----------------------------------------- | +| `externalTools.xml` | Build, Run, Clean, Test as external tools | +| `customTargets.xml` | Custom build targets | +| `misc.xml` | C/C++ project settings | +| `runConfigurations/\.xml` | Per-binary run configurations | + +## compile_commands.json + +```bash +dcr gen compile-commands +``` + +Generates `compile_commands.json` at project root. Standard format for clangd, C/C++ IntelliSense, static analyzers. + +## project-info + +```bash +dcr gen project-info +``` + +Outputs JSON array with project metadata (see [gen-commands](/docs/commands/gen-commands)). diff --git a/docs-crowdin-export/uk-UA/docs/license.mdx.mdx b/docs-crowdin-export/uk-UA/docs/license.mdx.mdx new file mode 100644 index 0000000..20a7804 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/license.mdx.mdx @@ -0,0 +1,33 @@ +--- +sidebar_label: License +--- + +# License + +## DCR + +DCR itself is [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html) licensed. + +> **Note:** DCR is a build tool, not a library. The GPL applies only to DCR's own source code. Projects built with DCR are not subject to DCR's license — their licensing is determined solely by their own code and dependencies. + +## Rust dependencies + +DCR is written in Rust. The following notable Rust crates are statically linked: + +| Crate | License | +| ------------------------------------------------------- | ----------------- | +| [`ureq`](https://crates.io/crates/ureq) | MIT OR Apache-2.0 | +| [`serde`](https://crates.io/crates/serde) | MIT OR Apache-2.0 | +| [`toml`](https://crates.io/crates/toml) | MIT OR Apache-2.0 | +| [`toml_edit`](https://crates.io/crates/toml_edit) | MIT OR Apache-2.0 | +| [`serde_json`](https://crates.io/crates/serde_json) | MIT OR Apache-2.0 | +| [`sha2`](https://crates.io/crates/sha2) | MIT OR Apache-2.0 | +| [`glob`](https://crates.io/crates/glob) | MIT OR Apache-2.0 | +| [`self-replace`](https://crates.io/crates/self-replace) | MIT OR Apache-2.0 | +| [`ctrlc`](https://crates.io/crates/ctrlc) | MIT OR Apache-2.0 | + +Full dependency tree is available in [`Cargo.lock`](https://github.com/dexoron/dcr/blob/main/Cargo.lock). The overwhelming majority are dual-licensed under MIT OR Apache-2.0. + +## Additional credits + +* DCR's CLI design and project model are inspired by [Cargo](https://doc.rust-lang.org/cargo/). diff --git a/docs-crowdin-export/uk-UA/docs/recipes/cross-to-windows.mdx.mdx b/docs-crowdin-export/uk-UA/docs/recipes/cross-to-windows.mdx.mdx new file mode 100644 index 0000000..1250349 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/recipes/cross-to-windows.mdx.mdx @@ -0,0 +1,49 @@ +--- +sidebar_label: Cross-compile to Windows +--- + +# Cross-Compile to Windows from Linux + +Building a Windows binary on Linux using mingw-w64. + +## Install toolchain + +```bash +# Ubuntu/Debian +sudo apt install mingw-w64 + +# Fedora +sudo dnf install mingw64-gcc mingw64-binutils +``` + +## Configuration + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +compiler = "clang" +kind = "bin" +target = "x86_64-pc-windows-gnu" # explicit mingw, not msvc +``` + +## Build + +```bash +dcr build --target x86_64-pc-windows-gnu --release +``` + +Artifact: `target/x86_64-pc-windows-gnu/release/my-app.exe`. + +## Custom toolchain + +```toml +[toolchain] +cc = "x86_64-w64-mingw32-gcc" +cxx = "x86_64-w64-mingw32-g++" +``` diff --git a/docs-crowdin-export/uk-UA/docs/recipes/library-project.mdx.mdx b/docs-crowdin-export/uk-UA/docs/recipes/library-project.mdx.mdx new file mode 100644 index 0000000..336c122 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/recipes/library-project.mdx.mdx @@ -0,0 +1,70 @@ +--- +sidebar_label: Library project +--- + +# Library Project + +Creating a static library and using it in another project. + +## Step 1: Create the library + +```bash +dcr new my-lib +cd my-lib +``` + +`dcr.toml`: + +```toml +[package] +name = "my-lib" +version = "0.1.0" +type = "none" + +[build] +language = "c" +standard = "c11" +kind = "staticlib" +``` + +`src/my_lib.h`: + +```c +#ifndef MY_LIB_H +#define MY_LIB_H +int add(int a, int b); +#endif +``` + +`src/my_lib.c`: + +```c +#include "my_lib.h" +int add(int a, int b) { return a + b; } +``` + +## Step 2: Build + +```bash +dcr build --release +``` + +Artifacts: + +* `target/\/release/libmy-lib.a` (Linux) +* `target/release/my-lib.lib` (Windows) +* `target/include/` — header files + +## Step 3: Use in another project + +```bash +dcr new my-app +cd my-app +dcr add my-lib ../my-lib +``` + +Automatically: + +* Adds include path to `target/include/` of the library +* Adds lib path to `target/\/release/` +* Links `libmy-lib.a` / `my-lib.lib` diff --git a/docs-crowdin-export/uk-UA/docs/recipes/multi-package-workspace.mdx.mdx b/docs-crowdin-export/uk-UA/docs/recipes/multi-package-workspace.mdx.mdx new file mode 100644 index 0000000..dde7cb5 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/recipes/multi-package-workspace.mdx.mdx @@ -0,0 +1,103 @@ +--- +sidebar_label: Multi-package workspace +--- + +# Multi-Package Workspace + +A project with three packages: two libraries and a binary. + +## Structure + +``` +workspace/ +├── dcr.toml # root workspace +├── lib-core/ +│ ├── dcr.toml +│ └── src/core.c +├── lib-utils/ +│ ├── dcr.toml +│ └── src/utils.c +└── app/ + ├── dcr.toml + └── src/main.c +``` + +## Root dcr.toml + +```toml +[package] +name = "my-workspace" +version = "0.1.0" +type = "none" + +[build] +inherit = true +language = "c" +standard = "c11" +workspace_only = true + +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +## Packages + +`lib-core/dcr.toml`: + +```toml +[package] +name = "lib-core" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`lib-utils/dcr.toml`: + +```toml +[package] +name = "lib-utils" +version = "0.1.0" +type = "none" + +[build] +kind = "staticlib" +``` + +`app/dcr.toml`: + +```toml +[package] +name = "app" +version = "0.1.0" +type = "none" + +[build] +kind = "bin" +``` + +## Build + +```bash +cd workspace +dcr build # builds everything in correct order +dcr build --workspace app # only app (lib-core and lib-utils built as deps) +dcr run # builds and runs main package +``` + +Build order (topological sort): + +1. `lib-core` +2. `lib-utils` (depends on lib-core) +3. `app` (depends on lib-core, lib-utils) diff --git a/docs-crowdin-export/uk-UA/docs/recipes/os-flat-bin-archive.mdx.mdx b/docs-crowdin-export/uk-UA/docs/recipes/os-flat-bin-archive.mdx.mdx new file mode 100644 index 0000000..457bce4 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/recipes/os-flat-bin-archive.mdx.mdx @@ -0,0 +1,89 @@ +--- +sidebar_label: OS-dev (flat-bin + archive) +--- + +# Pure ASM / boot image (flat-bin + archive) + +Minimal OS-dev style pipeline: assemble raw binaries with NASM, then pack a FAT floppy/image with an optional boot sector. + +## Project layout + +``` +myos/ + dcr.toml + src/ + boot.asm # boot sector (512 bytes) + kernel.asm # payload +``` + +For multiple flat artifacts, use a **workspace** (one member per binary) or separate packages; a single `flat-bin` package produces one binary per source stem. + +## Boot package (`flat-bin`) + +```toml +[package] +name = "boot" +version = "0.1.0" + +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +```bash +dcr build +# → target/<…>/debug/boot.bin (NASM -f bin, no link) +``` + +## Disk image after build + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" +``` + +* `format`: `fat12`, `fat16`, or `fat32` +* `size`: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default ~1.44 MiB) +* `bootsector`: written only when `offset` is omitted or `0` +* `from` may be a glob; `{profile}` is substituted in paths + +## C kernel → flat binary + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldflags = ["-T", "linker.ld"] +``` + +Pipeline: objects → temporary linked ELF → `objcopy -O binary` → `kernel.bin`. Requires `objcopy` / `llvm-objcopy` in PATH. + +## Other assemblers + +| Tool | Notes | +| -------- | --------------------------------------------------------------------------------------- | +| **FASM** | Write `format binary` in the source; DCR writes `\.bin` directly | +| **GAS** | Assemble `.s` → obj → `objcopy -O binary` | +| **LLC** | `language = "llvm_ir"` → obj → objcopy | +| **MASM** | COFF obj → objcopy (needs binutils/LLVM objcopy) | + +## Notes + +* Single-file `roots` are supported: `roots = ["src/boot.asm"]`. +* `--force` re-runs `build.steps` / `build.post_steps` as well as recompilation. +* Prefer `kind = "elf"` if you need a relocatable ELF kernel without stripping to raw binary. diff --git a/docs-crowdin-export/uk-UA/docs/reference/build-profiles.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/build-profiles.mdx.mdx new file mode 100644 index 0000000..694efb0 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/build-profiles.mdx.mdx @@ -0,0 +1,82 @@ +--- +sidebar_label: Build profiles +--- + +# Build Profiles + +Profiles allow overriding `[build]` fields for specific build modes. + +## Configuration + +```toml +[build] +language = "c" +standard = "c17" +cflags = ["-Wall"] + +[build.debug] +cflags = ["-O0", "-g"] + +[build.release] +cflags = ["-O3", "-DNDEBUG"] +``` + +## Merge rules + +Fields from `[build.\]` are merged on top of `[build]`: + +* **Scalar fields** (strings, numbers, bools) — replaced +* **Arrays** (`cflags`, `ldflags`, ...) — **appended** (extend the `[build]` array) + +Set `inherit = false` to disable array inheritance (only profile's own arrays are used). + +## Built-in profiles + +The default flags for each profile are composed from three config fields: + +| Field | debug default | release default | +| ----------- | ------------------ | --------------- | +| `opt_level` | `"0"` | `"3"` | +| `debug` | `true` | `false` | +| `warnings` | `["all", "extra"]` | `[]` | + +Which produce the equivalent compiler flags: + +| Profile | Effective flags | +| --------- | ---------------------------------------------------------- | +| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` | +| `release` | `-O3 -DNDEBUG` | + +Additional build options can be toggled per-profile: + +```toml +[build.release] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "1" + +[build.debug] +opt_level = "1" +debug = false +warnings = ["all", "error"] +``` + +## Target-specific profiles + +```toml +[build.linux] +cflags = ["-DLINUX"] + +[build.windows.debug] +cflags = ["-DWIN32", "-O0", "-g"] +``` + +Application order (highest priority first): + +1. `[build.\.\]` +2. `[build.\.\]` +3. `[build.\]` +4. `[build.\]` +5. `[build]` diff --git a/docs-crowdin-export/uk-UA/docs/reference/build-system.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/build-system.mdx.mdx new file mode 100644 index 0000000..10fbd56 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/build-system.mdx.mdx @@ -0,0 +1,136 @@ +--- +sidebar_label: Build system +--- + +# Build System + +## Compiler Backends + +DCR supports 7 compilation backends. Selection is automatic based on file extension and `build.compiler` value. + +| Backend | Files | When used | +| --------- | --------------------------------- | ------------------------------------- | +| `unix_cc` | `.c`, `.cpp`, `.cxx`, `.cc`, `.S` | gcc/clang on Linux/macOS/BSD | +| `msvc` | `.c`, `.cpp`, `.cxx`, `.cc` | Windows (cl, clang-cl) | +| `gas` | `.s` | ARM/ARM64 assembler (no preprocessor) | +| `nasm` | `.asm`, `.s` | x86/x86_64 NASM assembler | +| `masm` | `.asm` | MASM (ml/ml64) on Windows | +| `fasm` | `.asm`, `.fasm` | Flat Assembler | +| `llvm_ir` | `.ll` | LLVM IR via `llc -filetype=obj` | + +## Qt Support + +DCR provides native Qt support for automatic meta-object handling (MOC, UIC, RCC). + +Enable it by setting `build.qt = true` in `dcr.toml`. DCR will automatically detect Qt-related files (`.ui`, `.qrc`, `.h` with `Q_OBJECT`) and process them. + +```toml +[build] +qt = true +``` + +*Note: Requires `qt6` modules (Core, Widgets, Gui, Svg) installed via `pkg-config`.* + +Advanced customization is still possible via `build.steps` if special handling is needed: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +### Unix CC + +* Compiler resolved via `resolve_compiler()`: `DCR_COMPILER` > `DCR_CC` > `[toolchain]` > `build.compiler` > `PATH` +* Supports `.d` files for header dependency tracking +* Flags: `-std=`, `-MMD -MF`, `-c -o`, `-I`, `-L`, `-l` +* Conditional flags based on config: + * `freestanding` or bare-metal target: `-ffreestanding` (compile), `-nostdlib -static` (link) + * `lto`: `-flto` (compile + link) + * `panic = "abort"`: `-fno-exceptions` (C++ only), `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables` + +### MSVC + +* Supports cl.exe and clang-cl.exe +* Flags: `/std:`, `/Fo:`, `/Fe:`, `/I`, `/link` + +### GAS / NASM / MASM / FASM / LLVM-IR + +* GAS: `-I`, `-c -o`, `--defsym` +* NASM: `-I`, `-o`, `-D`, `-f` (format: win64/elf64/macho64/macho32/elf32; **`bin` when `kind = "flat-bin"`**) +* MASM: `/nologo /c /Fo\ ` +* FASM: ` \` (output path is the object file) +* LLVM IR: `-filetype=obj -o \` + +## Incremental Builds + +Three levels of incrementality: + +1. **mtime** — if output is newer than all inputs, skip +2. **`.d` files** — header change tracking (including transitive) +3. **SHA256 fingerprint** — recompile if compiler flags changed (stored in `.dcr_fingerprint`) + +## Parallel Compilation + +* `thread::scope` for thread pool +* Atomic task queue (`AtomicU64`) +* Mutex on stdout (`OUTPUT_MUTEX`) +* Thread count = `available_parallelism()`, capped by `build.codegen-units` if set + +## Build Kinds + +| Kind | Type | Path (Linux example) | +| ----------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `bin` | Executable | `target/\/\/\` (.exe on Windows) | +| `staticlib` | Static library | `target/\/\/lib\.a` (.lib) | +| `sharedlib` | Dynamic library | `target/\/\/lib\.so` (.dll/.dylib) | +| `efi` | UEFI application | `target/\/\/\.efi` | +| `elf` | ELF without stdlib | `target/\/\/\` | +| `none` | Compile only, no link | — | +| `custom` | Full filename+extension control | `target/\/\/\.\` | +| `flat-bin` | Raw binary | ASM: `\.bin` (NASM `-f bin` / FASM / GAS·MASM·LLC via objcopy); C/C++: `\.bin` (link + objcopy) | + +## Disk images (`[archive]`) + +After a successful build, if `[archive]` is present in `dcr.toml`, DCR formats a FAT volume and copies files from `layout` into the image. See [dcr.toml → archive](/docs/reference/dcr-toml#archive). + +## Build Steps + +DCR supports pre-build and post-build steps: + +* `build.steps` — commands before compilation +* `build.post_steps` — commands after compilation + +Substitutions: `{stem}`, `{in}`, `{out}`, `{profile}`, `{version}`, `{name}`. + +Example Qt codegen via build steps: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +## pkg-config + +Automatic lookup (read from raw config): + +```toml +[build] +pkg_config = ["sdl2", "gl"] +``` + +DCR runs `pkg-config --cflags sdl2 gl` and `pkg-config --libs sdl2 gl` and adds results to compiler/linker flags. + +## Variable Substitution + +Supported variables: + +| Variable | Description | +| ----------------------- | ---------------------------- | +| `{version}` | Package version | +| `{version_major}` | Major version part | +| `{version_minor}` | Minor version part | +| `{version_patch}` | Patch version | +| `{version_suffix}` | Suffix (e.g., `-rc1`) | +| `{version_suffix_dash}` | Suffix with dash | +| `{profile}` | Profile name (debug/release) | +| `{name}` | Package name | diff --git a/docs-crowdin-export/uk-UA/docs/reference/cross-compilation.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/cross-compilation.mdx.mdx new file mode 100644 index 0000000..2ca0cc7 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/cross-compilation.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Cross-compilation +--- + +# Cross-Compilation + +## Short Names + +DCR supports short platform names: + +| Short Name | Full Triple | +| ---------- | -------------------------- | +| `linux` | `x86_64-unknown-linux-gnu` | +| `macos` | `x86_64-apple-darwin` | +| `windows` | `x86_64-pc-windows-msvc` | + +```bash +dcr build --target windows +``` + +## Full Triples + +```bash +dcr build --target aarch64-unknown-linux-gnu +dcr build --target x86_64-pc-windows-gnu # mingw +dcr build --target armv7-unknown-linux-gnueabihf +``` + +## clang --target + +When using clang, DCR injects `--target=\` into CFLAGS. + +```toml +[build] +compiler = "clang" +target = "aarch64-unknown-linux-gnu" +# Auto: cflags += ["--target=aarch64-unknown-linux-gnu"] +``` + +## Bare-Metal / Freestanding + +For targets containing `none`, `-elf`, `eabi`, or `baremetal`, DCR automatically: + +1. **Disables default flags** — no system include paths, no `-l` libc +2. **Injects `-ffreestanding`** at compile time and `-nostdlib -static` at link time + +You can also enable freestanding mode explicitly: + +```toml +[build] +freestanding = true +``` + +```bash +dcr build --target aarch64-none-elf +``` + +## Target Directory + +By default, the compilation output directories are structured as follows: + +* **Linux and BSD**: Always output to `target/\/\/` (using host triple if no target is specified). +* **macOS and Windows (without target)**: Output to `target/\/`. +* **macOS and Windows (with explicit target)**: Output to `target/\/\/`. diff --git a/docs-crowdin-export/uk-UA/docs/reference/dcr-toml.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/dcr-toml.mdx.mdx new file mode 100644 index 0000000..240399b --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,261 @@ +--- +sidebar_label: dcr.toml overview +--- + +# dcr.toml + +Main project configuration file. Located at the project root. + +## Structure + +```toml +[package] +# required fields + +[build] +# build settings + +[build.debug] # optional: debug override +[build.release] # optional: release override + +[build.linux] # optional: Linux override +[build.windows] # optional: Windows override +[build.windows.debug] # target + profile combination + +[toolchain] +# compiler/linker paths + +[dependencies] +# project dependencies + +[workspace] +# multi-package configuration + +[run] +# run settings + +[archive] +# optional: pack FAT disk image after build +``` + +## [package] + +| Field | Required | Description | +| --------- | -------- | ------------------------------------------- | +| `name` | yes | Project name | +| `version` | yes | Semantic version | +| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) | +| `license` | no | SPDX license identifier | +| `author` | no | Author | + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "app" +license = "MIT" +author = "John Doe" +``` + +## [build] + +... + +* `build.qt` — (bool) Enable automatic Qt meta-object handling (MOC, UIC, RCC). Requires `qt6` modules installed via `pkg-config`. + +| Field | Default | Description | +| ---------------- | ------------- | --------------------------------------------------------------------------------------------------------- | +| `language` | `"c"` | `"c"`, `"c++"`, `"cpp"`, `"cxx"`, `"asm"`, `"llvm_ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to `"c"`) | +| `standard` | `"c11"` | C standard (`c11`, `c17`, `c23`) | +| `cxx_standard` | — | C++ standard (`c++17`, `c++20`, `c++23`) | +| `compiler` | `"clang"` | Preferred compiler (optional, defaults to `"clang"`) | +| `kind` | `"bin"` | `bin`, `staticlib`, `sharedlib`, `efi`, `elf`, `none`, `custom`, `flat-bin` | +| `target` | host | Target triple for cross-compilation | +| `platform` | `"native"` | `native`, `efi` | +| `cflags` | `[]` | Additional C/C++/ASM flags | +| `ldflags` | `[]` | Additional linker flags | +| `filename` | `""` | Custom output file name | +| `extension` | `""` | Custom file extension (for `flat-bin`, default is `bin`) | +| `roots` | `["src"]` | Source roots: directories and/or individual source/header files | +| `exclude` | `[]` | Exclude patterns | +| `include` | `[]` | Additional include directories | +| `src_disable` | `false` | Disable auto source discovery | +| `inherit` | `false` | Inherit build from workspace root | +| `clean` | `[]` | Glob patterns for custom clean paths | +| `out_dir` | `""` | Custom output directory | +| `workspace_only` | `false` | Workspace-only, not built standalone (no `language`/`compiler` required) | +| `freestanding` | `false` | Compile in freestanding mode (`-ffreestanding` + `-nostdlib -static`) | +| `opt_level` | — | Optimization level: `0`-`3`, `"s"`, `"z"` (derived from profile if omitted) | +| `debug` | profile-based | Emit debug symbols (`-g`): `true` in debug, `false` in release | +| `lto` | `false` | Link-time optimization (`-flto` for both compiler and linker) | +| `strip` | `false` | Strip symbols from output (`-s` in ldflags) | +| `warnings` | `[]` | Warning flags (e.g. `"all"`, `"extra"`, `"pedantic"`); engine adds `-Wall -Wextra` in debug if empty | +| `panic` | `""` | Panic strategy: `"abort"` disables exceptions and unwind tables | +| `codegen-units` | `""` | Max parallel compilation jobs (`"0"` = auto) | +| `qt` | `false` | Enable automatic Qt meta-object handling (MOC, UIC, RCC) | + +Settings from raw config (not in typed struct): + +* `pkg_config` — list of pkg-config packages +* `ldscript` — linker script path +* `build.steps` / `build.post_steps` — codegen steps + +## Per-language overrides: `[build.c]`, `[build.cxx]`, `[build.asm]`, `[build.llvm_ir]` + +Each language can have its own table that overrides the flat `[build]` settings: + +```toml +[build] +compiler = "clang" +standard = "c11" + +[build.c] +standard = "c23" +compiler = "gcc" + +[build.cxx] +standard = "c++23" +compiler = "g++" + +[build.asm] +compiler = "nasm" +flags = ["-felf64"] + +[build.llvm_ir] +compiler = "llc" +``` + +The flat `[build]` acts as fallback; per-language tables take precedence for their language. + +Example: + +```toml +[build] +language = "c++" +standard = "c23" +cxx_standard = "c++23" +compiler = "clang" +kind = "sharedlib" +cflags = ["-Wall", "-Wextra"] +opt_level = "z" +lto = true +strip = true +panic = "abort" +codegen-units = "2" +``` + +## [toolchain] + +```toml +[toolchain] +cc = "/usr/bin/clang" +cxx = "/usr/bin/clang++" +as = "/usr/bin/as" +ar = "/usr/bin/ar" +ld = "/usr/bin/ld.lld" +``` + +Raw config also supports `uic`, `moc`, `rcc` for Qt codegen. + +## [dependencies] + +See [dependencies](/docs/reference/dependencies). + +## [run] + +```toml +[run] +cmd = "./target/{profile}/{name}" +``` + +Substitutions: + +* `{version}` — package version +* `{version_major}`, `{version_minor}`, `{version_patch}`, `{version_suffix}`, `{version_suffix_dash}` — version parts +* `{profile}` — debug / release +* `{name}` — package name + +Default `cmd` = `./target/{profile}/{name}` (macOS/Windows) or `./target/\/\/\` (Linux). + +## [workspace] + +See [workspaces](/docs/reference/workspaces). + +## [archive] + +Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`). + +| Field | Required | Description | +| ------------ | -------- | ------------------------------------------------------------------------------------------- | +| `output` | yes | Image path relative to project root (`{profile}` allowed) | +| `format` | yes | `fat12`, `fat16`, or `fat32` | +| `size` | no | Image size: bytes or `K`/`KB`/`M`/`MB`/`G`/`GB` (default `1474560` ≈ 1.44 MiB) | +| `offset` | no | Byte offset of the FAT volume inside the image (default `0`) | +| `label` | no | Volume label (max 11 chars, default `VOLUME`) | +| `bootsector` | no | Path to a 512-byte boot sector written at offset 0 when `offset` is 0 (`{profile}` allowed) | +| `layout` | no | List of `{ from, to }` entries (files or globs → path inside the volume) | + +```toml +[archive] +output = "target/{profile}/disk.img" +format = "fat12" +size = "1440K" +label = "MYOS" +bootsector = "target/{profile}/boot.bin" + +[[archive.layout]] +from = "target/{profile}/kernel.bin" +to = "KERNEL.BIN" + +[[archive.layout]] +from = "assets/*" +to = "/" +``` + +Typical pairing with `kind = "flat-bin"` (NASM `-f bin`) for bootloaders and pure-ASM OS images. + +## `flat-bin` (kind) + +Produces a raw binary (default extension `bin`) for boot sectors, kernels, and freestanding payloads. + +### Assemblers + +| Tool | Language / compiler | How flat-bin is produced | +| ---- | ------------------------------------------ | -------------------------------------------- | +| NASM | `language = "asm"`, `compiler = "nasm"` | `-f bin` → `\.bin` | +| FASM | `compiler = "fasm"` | direct write (use `format binary` in source) | +| GAS | `compiler = "as"` / `"gas"` | assemble → `objcopy -O binary` | +| MASM | `compiler = "ml"` / `"ml64"` | assemble → `objcopy -O binary` | +| LLC | `language = "llvm_ir"`, `compiler = "llc"` | `-filetype=obj` → `objcopy -O binary` | + +```toml +[build] +language = "asm" +compiler = "nasm" +kind = "flat-bin" +extension = "bin" +roots = ["src/boot.asm"] +``` + +### C / C++ + +Compile all sources, link with `-nostdlib -static` (plus your `ldflags` / `ldscript`), then convert the intermediate ELF/PE with `objcopy -O binary` to `\.bin`. + +```toml +[build] +language = "c" +compiler = "clang" +kind = "flat-bin" +freestanding = true +filename = "kernel" +extension = "bin" +ldscript = "linker.ld" +ldflags = ["-T", "linker.ld"] +``` + +Notes: + +* Multi-file **ASM** packages emit one `\.bin` per source; **C/C++** emit a single project binary. +* `objcopy` tools tried in order: `llvm-objcopy`, `objcopy`, `gobjcopy`. +* Incompatible with `build.qt = true`. +* `dcr run` rejects `flat-bin` (not a host executable). diff --git a/docs-crowdin-export/uk-UA/docs/reference/dependencies.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/dependencies.mdx.mdx new file mode 100644 index 0000000..97a1a6e --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/dependencies.mdx.mdx @@ -0,0 +1,84 @@ +--- +sidebar_label: Dependencies +--- + +# Dependencies + +## Formats + +The `[dependencies]` section supports three formats: + +### String (registry) + +```toml +[dependencies] +fmt = "10.1.1" +spdlog = "1.12" +catch2 = "3.4.0" +``` + +The version string is used as-is for registry lookup. + +### Table (git) + +```toml +[dependencies] +fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" } +``` + +Fields: `git`, `branch`, `tag`, `rev`. + +### Table (path) + +```toml +[dependencies] +mylib = { path = "../mylib" } +``` + +## Registry + +DCR uses a package registry for dependency lookup by name. + +```toml +# ~/.dcr/config.toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrides the path to `index.json`. + +## Git dependencies + +Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources: + +* `branch` — switch to a branch +* `tag` — switch to a tag +* `rev` — switch to a specific commit +* `features` — feature flags (parsed, but does not affect build) + +## Path dependencies + +Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`. + +```toml +[dependencies] +mylib = { path = "/abs/path/to/lib" } +mylib = { path = "../relative/path" } +``` + +*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.* + +## dcr.lock + +Dependency lock file. Contains package names and sources. + +Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`. + +## Resolution process + +1. Load all dependencies (registry → git → path) +2. For path deps: recursively read their `dcr.toml` +3. For registry deps: search `index.json` +4. For git deps: clone to cache +5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler diff --git a/docs-crowdin-export/uk-UA/docs/reference/environment-variables.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/environment-variables.mdx.mdx new file mode 100644 index 0000000..8b75814 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/environment-variables.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Environment variables +--- + +# Environment Variables + +## DCR_COMPILER + +Overrides the compiler for all languages. **Highest priority.** + +```bash +export DCR_COMPILER=clang +dcr build +``` + +Compiler resolution priority: + +1. `DCR_COMPILER` (env) +2. `DCR_CC` / `DCR_CXX` / `DCR_AS` (env) +3. `[toolchain]` (dcr.toml) +4. `build.compiler` (dcr.toml) +5. `PATH` + +## DCR_CC / DCR_CXX / DCR_AS + +Per-language override (lower priority than `DCR_COMPILER`, higher than `[toolchain]`). + +```bash +export DCR_CC=gcc-14 +export DCR_CXX=g++-14 +export DCR_AS=arm-linux-gnueabihf-as +``` + +## DCR_LD / DCR_AR + +Override linker and archiver. + +```bash +export DCR_LD=ld.lld +export DCR_AR=llvm-ar +``` + +## DCR_DEBUG + +Enables debug mode — prints all compilation commands to stderr before execution. + +```bash +export DCR_DEBUG=1 +dcr build +``` + +## DCR_INDEX_PATH + +Overrides the path to the registry `index.json`. + +```bash +export DCR_INDEX_PATH=/custom/path/index.json +``` + +Default: `~/.dcr/index.json`. diff --git a/docs-crowdin-export/uk-UA/docs/reference/platform-support.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/platform-support.mdx.mdx new file mode 100644 index 0000000..a97eab5 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/platform-support.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Platform support +--- + +# Platform Support + +## Target Triples + +DCR normalizes target triples. Short platform names are expanded to full triples. + +### Linux + +``` +target/-unknown-linux-// +``` + +Architectures: `x86_64`, `aarch64`, `i686`, `armv7`, `riscv64` (host-detected). +Environments: `gnu` (default), `musl`. + +Artifact type: ELF. Extensions: `.so` (sharedlib), `.a` (staticlib). + +### macOS + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64` (host-detected). + +Extensions: `.dylib` (sharedlib), `.a` (staticlib). + +### Windows + +``` +target// (default) or target/// (with target) +``` + +Architectures: `x86_64`, `aarch64`. +Environments: `msvc` (default), `gnu` (MinGW). + +Extensions: `.exe` (bin), `.lib` (staticlib), `.dll` (sharedlib), `.efi` (UEFI). + +### BSD + +``` +target/-unknown-// +``` + +Supported systems: `freebsd`, `openbsd`, `netbsd`, `dragonfly`. + +## Host Detection + +DCR uses `std::env::consts::ARCH` and `std::env::consts::OS` for host platform detection. Used as fallback when `target` is not specified. diff --git a/docs-crowdin-export/uk-UA/docs/reference/workspaces.mdx.mdx b/docs-crowdin-export/uk-UA/docs/reference/workspaces.mdx.mdx new file mode 100644 index 0000000..082be1e --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/workspaces.mdx.mdx @@ -0,0 +1,88 @@ +--- +sidebar_label: Workspaces +--- + +# Workspaces + +Workspaces allow managing multiple packages in a single repository. + +## Configuration + +```toml +[workspace.lib-core] +path = "lib-core" + +[workspace.lib-utils] +path = "lib-utils" +deps = ["lib-core"] + +[workspace.app] +path = "app" +deps = ["lib-core", "lib-utils"] +main = true +``` + +### Member fields + +| Field | Description | +| ------ | ------------------------------------------------ | +| `path` | Path to the package (relative to workspace root) | +| `deps` | Dependencies on other members | +| `main` | Mark as the main package | + +## Topological sort + +DCR automatically sorts packages by dependencies: package A is built before B if B depends on A. + +Cyclic dependencies are detected and cause an error. + +## Build + +```bash +dcr build # build all packages in dependency order +dcr build --workspace app # build only app (dependencies built automatically) +``` + +When building a workspace, DCR automatically injects include and library paths of dependent workspace members: + +* **Include Paths**: Automatically resolves and injects header directories of dependencies, including the member's `src/` directory, local `include/` directory, and the packaged `target/include` directory. +* **Library Paths**: Injects compiled library search paths (`target/lib` as well as target-specific build folders) to allow automatic linking with member libraries. + +## Clean + +```bash +dcr clean # clean only root target/ +dcr clean --all # clean target/ of all packages +``` + +## Inheritance + +If a member has `inherit = true` in its `[build]` section, fields from the root `[build]` are merged into the member: + +```toml +# root dcr.toml +[build] +inherit = true +language = "c" +standard = "c17" + +# member inherits language and standard +``` + +## Workspace-only root (no build of its own) + +A workspace root can set `workspace_only = true` — it won't be built itself, and doesn't need `language` or `compiler`: + +```toml +[package] +name = "my-workspace" +version = "0.1.0" + +[build] +workspace_only = true +kind = "bin" + +[workspace] +lib-core = { path = "lib-core" } +app = { path = "app", deps = ["lib-core"] } +``` diff --git a/docs-crowdin-export/uk-UA/docs/self-update.mdx.mdx b/docs-crowdin-export/uk-UA/docs/self-update.mdx.mdx new file mode 100644 index 0000000..f9e7e88 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/self-update.mdx.mdx @@ -0,0 +1,46 @@ +--- +sidebar_label: Self Update +--- + +# Self Update + +## dcr --update + +Automatic update to the latest version. Downloads a binary (not an archive) from GitHub Releases and replaces the current executable. + +```bash +dcr --update +``` + +## How it works + +1. DCR detects the current platform and architecture +2. Fetches the latest release from `api.github.com/repos/dexoron/dcr/releases/latest` +3. Compares versions +4. Downloads the matching asset (direct binary URL, not archive) +5. Replaces the current executable via `self_replace` + +## Asset naming + +Pattern: `dcr-\` or `dcr-\.exe` + +| Platform | Asset name | +| -------------- | -------------------------------- | +| Linux x86_64 | `dcr-x86_64-unknown-linux-gnu` | +| macOS x86_64 | `dcr-x86_64-apple-darwin` | +| macOS ARM64 | `dcr-aarch64-apple-darwin` | +| Windows x86_64 | `dcr-x86_64-pc-windows-msvc.exe` | + +## AUR + +If DCR was installed via AUR, `--update` shows a warning: + +``` +Update via package manager: yay/paru -Syu {package_name} or sudo pacman -Syu {package_name} +``` + +## Errors + +* Cannot detect platform — error +* Cannot fetch release — error with URL +* No write permission — error (use `sudo` or manual install) diff --git a/docs-crowdin-export/uk-UA/docs/testing/running-tests.mdx.mdx b/docs-crowdin-export/uk-UA/docs/testing/running-tests.mdx.mdx new file mode 100644 index 0000000..934b0ed --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/testing/running-tests.mdx.mdx @@ -0,0 +1,45 @@ +--- +sidebar_label: Running tests +--- + +# Running Tests + +## Execution + +```bash +dcr test +``` + +Builds the project, then compiles and runs test files from `tests/`. + +## Profiles + +```bash +dcr test # debug (default) +dcr test --release # release +dcr test --debug # explicit debug +``` + +## Output + +``` +===================== + Testsuite summary +===================== +TOTAL: 5 +PASS: 3 +SKIP: 1 +FAIL: 1 +===================== +``` + +## Exit code + +* 0 — all tests passed (FAIL = 0) +* 1 — test failures or build error + +## What gets built + +* All `.c` files from `tests/` (`.cpp` not supported) +* Include path: `tests/` (for `dcr_test.h`) +* Linked with project if `package.type = "lib"` or `kind = "staticlib"`/`"sharedlib"` diff --git a/docs-crowdin-export/uk-UA/docs/testing/test-framework.mdx.mdx b/docs-crowdin-export/uk-UA/docs/testing/test-framework.mdx.mdx new file mode 100644 index 0000000..ae43679 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/testing/test-framework.mdx.mdx @@ -0,0 +1,69 @@ +--- +sidebar_label: Test framework (EXPECT, TEST, ...) +--- + +# Test Framework + +DCR has a built-in minimal test framework for C. + +## Macros + +### `EXPECT(expr)` + +Asserts that an expression is true. + +```c +EXPECT(1 + 1 == 2); +EXPECT(ptr != NULL); +``` + +### `SKIP(reason)` + +Skips a test with a message. + +```c +SKIP("not implemented on Windows"); +``` + +### `TEST(name)` + +Defines a test. + +```c +TEST(addition) { + EXPECT(1 + 1 == 2); + EXPECT(2 + 2 == 4); +} +``` + +### `TEST_CASE(name)` + +Registers a test case. + +```c +TEST_CASE(math) { + EXPECT(1 + 1 == 2); +} +``` + +## Initialization + +```bash +dcr test --init +``` + +Creates: + +* `tests/dcr_test.h` — framework header (do not edit) +* `tests/test.c` — template with example test + +## Structure + +``` +tests/ +├── dcr_test.h # framework (do not edit) +├── test.c # main tests +└── ... # additional .c test files +``` + +Only `.c` files are compiled (`.cpp` is not supported).