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..8a63429 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/README.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: Introduction +--- + +# DCR — C/C++ Build Tool & Package Manager + +
+Quick reference + +```bash +# Installation (dcrup) +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable + +# 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..645cf7c --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/changelog.mdx.mdx @@ -0,0 +1,230 @@ +--- +sidebar_label: Changelog +--- + +# Changelog + +## 0.8.3 (2026-08-03) + +### Added + +* **`dcr run -- \...`** — cargo-style argument forwarding after a bare `--`\ + (`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`. +* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests. + +### Changed + +* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\ + `[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\ + Previously the target was empty and those sections were ignored while artifacts already used the host triple path. +* **Empty target** — no more `Unknown target ''` warning. +* **`dcr run --help` / man `dcr-run`** — document `--` forwarding. + +### Fixed + +* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\`, so `dcr run` and flat-bin find the build output. +* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`). +* Spurious empty-target warning. + +## 0.8.2 (2026-07-22) + +### Added + +* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung. +* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`. +* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message. +* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`. +* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`). + +### Changed + +* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths). +* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds. +* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`). +* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`). +* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1. +* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`. + +## 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** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`. +* **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. + +## 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..615c9a8 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/contributing.mdx.mdx @@ -0,0 +1,52 @@ +--- +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 (see `.github/workflows/ci.yml`): + +* `cargo fmt --check` +* `cargo clippy` (default + `--all-features`) +* `cargo check --all-targets --all-features` +* Unit + integration tests on Linux, macOS, Windows +* Extra Linux job with `--features archive` (FAT images) +* Tools on runners: clang, nasm, clang-format/tidy (Linux) 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..79fc081 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,135 @@ +--- +sidebar_label: Installation +--- + +# Installation + +## dcrup (recommended) + +Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source). + +### Linux / macOS / BSD / Windows (bash) + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable +``` + +Non-interactive install of DCR in one shot: + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- install stable +export PATH="$HOME/.dcr/bin:$PATH" +``` + +### Windows (PowerShell) + +```powershell +irm https://ps1.dcr-tool.ru | iex +# or download then run: +# irm https://ps1.dcr-tool.ru -OutFile dcrup.ps1 +# powershell -File .\dcrup.ps1 self-install +# $env:Path += ";$env:USERPROFILE\.dcr\bin" +dcrup install stable +``` + +Optional cmd bootstrap (if you prefer `curl` of the cmd shim): + +```bat +curl -fsSL -o dcrup.cmd https://cmd.dcr-tool.ru +``` + +After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`): shims live in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows `dcrup.cmd`). + +### Common dcrup commands + +```sh +dcrup install stable # latest stable prebuilt +dcrup install 0.8.2 # pin → 0.8.2@stable +dcrup install 0.8.2@dev +dcrup install stable --libc musl # Linux: musl asset (default: gnu) +dcrup install stable --build # cargo build --features archive +dcrup install night # always build from branch dev HEAD +dcrup default 0.8.2 +dcrup update +dcrup list +dcrup show +dcrup which +``` + +Layout: `~/.dcr/toolchains/\/dcr` and `~/.dcr/bin/dcr` → active version. + +--- + +## 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 +``` + +> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`. + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or: + +```sh +cargo install dcr --features archive +``` + +## From source + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr +cargo build --release --features archive +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +# or manage versions with dcrup install night / --build +``` + +## Post-install + +```bash +dcr --version +dcrup show # if installed via dcrup +``` + +Man pages (package installs / release assets): + +```bash +man dcr +man dcr-build +``` + +Registry (optional) — `~/.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..bb9be20 --- /dev/null +++ b/docs-crowdin-export/de-DE/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,263 @@ +--- +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]`). + +Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature. + +| 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..8a63429 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/README.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: Introduction +--- + +# DCR — C/C++ Build Tool & Package Manager + +
+Quick reference + +```bash +# Installation (dcrup) +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable + +# 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..645cf7c --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/changelog.mdx.mdx @@ -0,0 +1,230 @@ +--- +sidebar_label: Changelog +--- + +# Changelog + +## 0.8.3 (2026-08-03) + +### Added + +* **`dcr run -- \...`** — cargo-style argument forwarding after a bare `--`\ + (`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`. +* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests. + +### Changed + +* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\ + `[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\ + Previously the target was empty and those sections were ignored while artifacts already used the host triple path. +* **Empty target** — no more `Unknown target ''` warning. +* **`dcr run --help` / man `dcr-run`** — document `--` forwarding. + +### Fixed + +* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\`, so `dcr run` and flat-bin find the build output. +* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`). +* Spurious empty-target warning. + +## 0.8.2 (2026-07-22) + +### Added + +* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung. +* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`. +* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message. +* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`. +* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`). + +### Changed + +* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths). +* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds. +* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`). +* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`). +* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1. +* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`. + +## 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** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`. +* **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. + +## 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..615c9a8 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/contributing.mdx.mdx @@ -0,0 +1,52 @@ +--- +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 (see `.github/workflows/ci.yml`): + +* `cargo fmt --check` +* `cargo clippy` (default + `--all-features`) +* `cargo check --all-targets --all-features` +* Unit + integration tests on Linux, macOS, Windows +* Extra Linux job with `--features archive` (FAT images) +* Tools on runners: clang, nasm, clang-format/tidy (Linux) 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..79fc081 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,135 @@ +--- +sidebar_label: Installation +--- + +# Installation + +## dcrup (recommended) + +Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source). + +### Linux / macOS / BSD / Windows (bash) + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable +``` + +Non-interactive install of DCR in one shot: + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- install stable +export PATH="$HOME/.dcr/bin:$PATH" +``` + +### Windows (PowerShell) + +```powershell +irm https://ps1.dcr-tool.ru | iex +# or download then run: +# irm https://ps1.dcr-tool.ru -OutFile dcrup.ps1 +# powershell -File .\dcrup.ps1 self-install +# $env:Path += ";$env:USERPROFILE\.dcr\bin" +dcrup install stable +``` + +Optional cmd bootstrap (if you prefer `curl` of the cmd shim): + +```bat +curl -fsSL -o dcrup.cmd https://cmd.dcr-tool.ru +``` + +After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`): shims live in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows `dcrup.cmd`). + +### Common dcrup commands + +```sh +dcrup install stable # latest stable prebuilt +dcrup install 0.8.2 # pin → 0.8.2@stable +dcrup install 0.8.2@dev +dcrup install stable --libc musl # Linux: musl asset (default: gnu) +dcrup install stable --build # cargo build --features archive +dcrup install night # always build from branch dev HEAD +dcrup default 0.8.2 +dcrup update +dcrup list +dcrup show +dcrup which +``` + +Layout: `~/.dcr/toolchains/\/dcr` and `~/.dcr/bin/dcr` → active version. + +--- + +## 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 +``` + +> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`. + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or: + +```sh +cargo install dcr --features archive +``` + +## From source + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr +cargo build --release --features archive +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +# or manage versions with dcrup install night / --build +``` + +## Post-install + +```bash +dcr --version +dcrup show # if installed via dcrup +``` + +Man pages (package installs / release assets): + +```bash +man dcr +man dcr-build +``` + +Registry (optional) — `~/.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..bb9be20 --- /dev/null +++ b/docs-crowdin-export/pl-PL/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,263 @@ +--- +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]`). + +Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature. + +| 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..99d652f --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/README.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: Введение +--- + +# DCR — Инструмент сборки C/C++ & Пакетный менеджер + +
+Быстрая справка + +```bash +# Installation (dcrup) +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable + +# 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 +``` + +
+ +## Содержание + +| Раздел | Описание | +| --------------------------------------------------- | -------------------------------------------- | +| [Начало работы](/docs/getting-started/installation) | Установка и первые шаги | +| [Команды](/docs/commands/project-commands) | Все CLI-команды DCR | +| [Ссылка](/docs/reference/dcr-toml) | Конфигурация, сборка, зависимости, платформы | +| [Тестирование](/docs/testing/test-framework) | Встроенный фреймворк тестирования | +| [Рецепты](/docs/recipes/cross-to-windows) | Типовые сценарии | +| [Интеграция с IDE](/docs/ide-integration) | VS Code, CLion, compile_commands.json | +| [Автоматическое обновление](/docs/self-update) | Автообновление | +| [Часто задаваемые вопросы](/docs/faq) | Частые вопросы | +| [Журнал изменений](/docs/changelog) | История версий | +| [Лицензия](/docs/license) | Лицензии DCR и вендорных библиотек | +| [Внести свой вклад](/docs/contributing) | Разработка DCR | + +## Особенности + +* **Инкрементальная сборка** — mtime + `.d` headers + SHA256 fingerprint +* **Параллельная компиляция** — thread::scope, атомарная очередь задач +* **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 (linux, windows, macos) и полные triples +* **Профили** — debug / release с переопределением любого поля +* **Workspaces** — мультипакетные проекты с топологической сортировкой +* **Registry + Git + Path** — три механизма зависимостей +* **Генерация IDE** — VS Code, CLion, compile_commands.json, JSON metadata +* **pkg-config** — автоматический поиск системных библиотек +* **Команда `--help` для каждой команды** — `dcr build --help`, `dcr new --help` и т. д. +* **Справочные страницы** — `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..6e26360 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/changelog.mdx.mdx @@ -0,0 +1,230 @@ +--- +sidebar_label: Список изменений +--- + +# Список изменений + +## 0.8.3 (2026-08-03) + +### Добавлено: + +* **`dcr run -- \...`** — cargo-style argument forwarding after a bare `--`\ + (`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`. +* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests. + +### Изменено: + +* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\ + `[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\ + Previously the target was empty and those sections were ignored while artifacts already used the host triple path. +* **Empty target** — no more `Unknown target ''` warning. +* **`dcr run --help` / man `dcr-run`** — document `--` forwarding. + +### Исправлено: + +* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\`, so `dcr run` and flat-bin find the build output. +* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`). +* Spurious empty-target warning. + +## 0.8.2 (2026-07-22) + +### Добавлено + +* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung. +* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`. +* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message. +* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`. +* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`). + +### Изменено + +* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths). +* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds. +* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`). +* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`). +* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1. +* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`. + +## 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** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`. +* **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. + +## 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. + +### Исправлено + +* **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 (02.06.2026) + +### Added + +* **`--help` для всех команд** — `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`. Во всех результатах вывода используются стилизованные заголовки (зелёного цвета) и строки с информацией об использовании (голубого цвета). +* **Справочные страницы** — 12 страниц в формате troff в каталоге `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`. +* **Справочные страницы во всех пакетах** — install.sh, install_bsd.sh, PKGBUILD из AUR, + Debian (cargo-deb), RPM (cargo-generate-rpm), Nix (postInstall), Homebrew + (ресурс), Snap, ресурсы релизов GitHub. +* **Проверка имени проекта** — команды `dcr init` и `dcr new` теперь проверяют имена перед созданием файлов + . Допускаются только буквы ASCII, цифры, символы `_` и `-`. +* **Поля `documentation` и `homepage`** — добавлены в файл `Cargo.toml`. +* **Оптимизации профиля релиза** — `opt-level = "z"`, LTO, `codegen-units = 1`, + `panic = "abort"`, `strip = true` для уменьшения размера бинарных файлов. +* **Платформы Linux i686, armv7, riscv64** — добавлены в рабочий процесс выпуска и скрипты установки. +* **Платформы Linux musl i686 и armv7** — скомпилированы с помощью zigbuild в системе непрерывной интеграции (CI). +* **Пакеты AUR** — рабочий процесс публикации `dcr-dev`, `dcr-dev-bin`. +* **Публикация Snap** — автоматическая публикация Snapcraft в рамках непрерывной интеграции (CI). +* **Значок Snap** — в файле README. + +### Changed + +* **`validate_package_name` стал общедоступным** — его можно вызывать из команд CLI. +* **Таблица платформы README** — реорганизована: варианты libc вынесены в отдельные строки по ОС, + удалены лишние столбцы. Обновлен список архитектур Linux. +* **Вывод `gen.rs` без аргументов** — теперь используется стилизованный вывод вместо необработанного `eprintln!`. +* **`tree.rs`, `fmt.rs` и `setup.rs`** — теперь поддерживают аргументы для опции `--help`. +* **Команды установки из файла README** — `| bash` → `| sh` для обеспечения совместимости с POSIX. + +### Fixed + +* **`dcr new \` создает каталог, а затем завершается с ошибкой** — теперь проверка + выполняется до начала любых операций с файлами. +* **`dcr init` при указании недопустимого имени каталога** — то же исправление. +* **Отсутствующие справочные страницы в установленных пакетах** — теперь поставляются во всех форматах. +* **Ложное срабатывание по букве диска Windows** — в модуле анализа файлов зависимостей. +* **CRLF (`\r\n`) вызывает сбой в работе парсера зависимостей** — теперь поддерживается обработка смешанных символов окончания строк. +* **Новая строка после обратного слеша не обработана** — при обработке экранирующих символов в функции `parse_d_file`. + +## 0.7.0 (01.06.2026) + +### Added + +* **Поддержка целевых платформ OpenBSD и NetBSD** — полная маршрутизация по платформам с динамически генерируемыми тройками целевых параметров с использованием `std::env::consts::ARCH` и `std::env::consts::OS`. Затрагивает команды `build`, `run`, `clean` и модуль платформы. +* **`src/platform/bsd.rs`** — новый специальный модуль платформы BSD, общий для FreeBSD, OpenBSD и NetBSD, предоставляющий `bin_path`, `lib_path`, `elf_path`, `efi_path` и `shared_lib_path`. +* **`Параметр конфигурации build.out_dir`** — настраиваемый каталог вывода, который переопределяет путь по умолчанию `target/\/\` для конечных артефактов. Поддерживается в `build`, `run` и при проверке конфигурации. +* **Команда `dcr fmt`** — новая команда CLI, которая форматирует все исходные файлы C/C++ (`*.c`, `*.cpp`, `*.h`, `*.hpp`) в `src/` и `tests/` с помощью `clang-format`. +* **Инкрементальная компоновка** — функция `needs_link()` в `common.rs`, которая проверяет, не является ли какой-либо объектный файл более новым, чем скомпонованный результат, пропуская ненужную повторную компоновку. Реализовано для всех бэкэндов (`unix_cc`, `msvc`, `gas`, `nasm`). +* **`build.kind = «none»` и `«custom»`** — два новых типа проектов для специальных сценариев сборки, при которых не создается стандартный артефакт. +* **`install_bsd.sh`** — специальный скрипт установки, совместимый с POSIX, для систем BSD (FreeBSD, OpenBSD, NetBSD) с режимами загрузки бинарных файлов и сборки из исходного кода. +* **Поддержка Linux ARM64 в `install.sh`** — добавлено определение целевой тройки `Linux:aarch64|Linux:arm64` для загрузки готовых бинарных файлов. +* **Обнаружение ОС BSD в `install.sh`** — обнаружение FreeBSD, OpenBSD, NetBSD и определение целевой тройки. +* **`rust-toolchain.toml`** — явное привязывание инструментария к каналу `stable`. +* **Интеграционные тесты** — `build_with_target_config` (проверяет `build.target = «linux»`) и `build_with_out_dir` (проверяет настраиваемый каталог вывода). +* **`get_build_string_with_profile` стал `pub`** — чтобы `run.rs` мог определять конфигурацию настраиваемого каталога вывода. + +### Changed + +* **Изменена семантика `build.target`** — теперь строго содержит тройку целей (например, `x86_64-unknown-linux-gnu`) или короткое имя (`linux`, `macos`, `windows`). Больше не используется в качестве пользовательского каталога вывода — эта функциональность перенесена в `build.out_dir`. +* **`build.standard` стал опциональным** — изменен с `String` на `Option\`. Проверка обеспечивает только непустоту для языков, отличных от ASM. Пропускается в выводе `dcr.toml`, если пуст. +* **`dcr run` с `out_dir`** — теперь определяет целевой каталог с учетом `build.out_dir`, если он настроен, через `get_build_string_with_profile()` из `build.rs`. +* **`collect_sources()` возвращает пустой вектор** вместо ошибки, если не найдено ни одного исходного файла, что позволяет проектам с `kind = «none»` или `kind = «custom»` не иметь исходных файлов. +* **Рефакторинг рабочего процесса выпуска CI/CD** — `git2` стал целевым (без vendored-openssl на Windows), кросс-компиляция на основе Zig для целей Linux, отличных от x86_64, очистка версий пакетов Arch Linux (тире → точки), символьная ссылка `gmake` для NetBSD. +* **Таблица совместимости README** — статус сборки/работы на FreeBSD, OpenBSD, NetBSD повышен с «сообщество/по возможности» до «официально поддерживается». +* **Обновлена документация** — `build-section.md` описывает новые поля `build.target` и `build.out_dir`. `target-directory.md` переписан для уточнения различия. + +### Fixed + +* **stdout/stderr `dcr run` не наследуются** — вывод дочернего процесса захватывался и выводился вручную, что приводило к сбоям интерактивных программ. Исправлено путем перехода на `Command::status()`. +* **Условие гонки в CI релиза** — задания матрицы сборки могли загружать ресурсы в релиз, который еще не существовал. Исправлено добавлением специального задания `create-release`. +* **Релиз GHA — переопределение стабильного набора инструментов** — устранены проблемы с переопределением набора инструментов Rust в CI. +* **Очистка версий пакетов Arch Linux** — строки версий с дефисами (например, `0.7.0-dev`) являются недопустимыми для `pkgver` в Arch Linux. Исправлено путем замены дефисов точками. +* **Права доступа GPG после Docker** — операции Docker изменяли владельца каталога GPG. Исправлено путем запуска `chown` после команд Docker. +* **Пути к артефактам пакетов RPM** — артефакты RPM размещались в `rpm/x86_64/` вместо `fedora/x86_64/`. Исправлено в рабочем процессе Dexoron Packages Index. +* **Надежность разбора JSON в `install.sh`** — добавлен `jq` в качестве основного парсера с резервным вариантом `python3` для поиска релизов в канале dev. + +### Удалено: + +* **Вспомогательная функция `format_roots()`** — удалена из `common.rs`. Использовалась только старым путем обработки ошибок в `collect_sources()`. +* **Отдельные шаги загрузки артефактов для каждой дистрибуции** — три отдельных шага `actions/download-artifact` заменены на унифицированный `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..6ff4321 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/build-commands.mdx.mdx @@ -0,0 +1,47 @@ +--- +sidebar_label: Команды сборки (build, run, clean) +--- + +# Команды сборки + +## `dcr build` + +Собирает проект по `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 +``` + +Артефакты: `target/\/\/\` (Linux с явным целевым объектом). + +With `[archive]` in `dcr.toml`, a FAT disk image is packed after a successful build. + +## `dcr run` + +Собирает (если исходники новее артефакта) и запускает бинарник. + +```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` + +Удаляет директорию `target/`(или `target/\/\`). + +```bash +dcr clean +dcr clean --release # очистить target/release/ +dcr clean --target windows # очистить target/x86_64-pc-windows-msvc/ +dcr clean --all # очистить все пакеты workspace +``` 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..079c4ec --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/dependency-commands.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Команды зависимостей (add, tree) +--- + +# Команды зависимостей + +## `dcr add \ [source]` + +Добавляет зависимость в `dcr.toml`. + +```bash +dcr add fmt # поиск в реестре +dcr add mylib ../path/to/lib # путь как источник +dcr add mylib path:./lib # явный префикс пути +dcr add mylib git:https://github.com/user/repo # явный префикс git +dcr add mylib github:user/repo # сокращённая запись GitHub +dcr add mylib gitlab:user/repo # сокращённая запись GitLab +``` + +Префиксы источника: + +* `path:` — локальный путь +* `git:` — URL адрес git-репозитория +* `github:` — расширение `https://github.com/\/\` +* `gitlab:` — расширение `https://gitlab.com/\/\` +* `http://` / `https://` / `git@` — полный URL + +Флаги: + +* `--branch \` — git ветка +* `--tag \` — git tag +* `--rev \` — git commit + +Если источник не указан — DCR выполняет поиск в подключенных реестрах. + +## `dcr tree` + +Показывает дерево зависимостей проекта. + +```bash +dcr tree +``` + +Пример вывода: + +``` +my-app v0.1.0 +├── fmt (registry) +│ └── spdlog (registry) +└── catch2 (registry) +``` + +В случае path зависимостей, рекурсивно отображает их собственные зависимости (из файла `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..c4cd7a3 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/gen-commands.mdx.mdx @@ -0,0 +1,73 @@ +--- +sidebar_label: Gen команды (vscode, clion, ...) +--- + +# Gen команды + +## `dcr gen \` + +Генерирует файл интеграции с IDE. + +### vscode + +```bash +dcr gen vscode +``` + +Создаёт: + +* `.vscode/tasks.json` — `build` задача (dcr build) +* `.vscode/launch.json` — конфигурация запуска отладки +* `.vscode/settings.json` — настройки C/C++ (clangd пути, includes) +* `.vscode/extensions.json` — рекомендуемые расширения (vscode-clangd, vscode-lldb) + +### clion + +```bash +dcr gen clion +``` + +Создаёт: + +* `.idea/externalTools.xml` — внешние инструменты (build, run, clean, test) +* `.idea/customTargets.xml` — пользовательские цели сборки +* `.idea/misc.xml` — настройки C/C++ проекта +* `.idea/runConfigurations/\.xml` — конфигурация запуска + +### compile-commands + +```bash +dcr gen compile-commands +``` + +Генерирует `compile_commands.json` — стандартный формат для clangd, cpptools, статических анализаторов. + +### project-info + +```bash +dcr gen project-info +``` + +Выводит JSON с метаданными проекта: + +```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..b21def0 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/project-commands.mdx.mdx @@ -0,0 +1,40 @@ +--- +sidebar_label: Команды проекта (new, init) +--- + +# Команды проекта + +## `dcr new \` + +Создает новый проект со стандартной структурой и `dcr.toml`. Аргумент `name` является обязательным. + +В названии проекта допускаются только ASCII буквы, цифры и подчеркивания `_` и дефисы `-`. + +```bash +dcr new my-app +dcr new my-app --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +Генерирует: + +* `dcr.toml` с базовыми полями +* `src/main.c` с основным шаблоном + +## `dcr init` + +Инициализирует проект DCR в текущем (пустом) каталоге. + +```bash +dcr init +dcr init --vcs none +``` + +Flags: + +* `--vcs \` — Initialize version control system (defaults to `git` if available, or `none`). + +Название проекта взято из имени текущего каталога. Имя каталога должно соответствовать тем же правилам именования, что и в `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..7c53a2a --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/quality-commands.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Команды качества (test, fmt) +--- + +# Команды качества + +## `dcr test` + +Запускает тесты. + +```bash +dcr test # debug профиль +dcr test --release # release профиль +dcr test --debug # явный debug +dcr test --help # подробная справка +``` + +Перед первым запуском нужно инициализировать тесты: + +```bash +dcr test --init +``` + +Это создаёт `tests/dcr_test.h` (фреймворк) и `tests/test.c` (шаблон). + +Что делает `dcr test`: + +1. Собирает проект +2. Собирает файлы `tests/*.c` (только `.c`, не `.cpp`) +3. Компилирует и линкует каждый файл теста +4. Запускает каждый бинарник тестов +5. Вывод сводки: TOTAL, PASS, SKIP, FAIL +6. Возвращает ненулевой код при наличии FAIL + +## `dcr fmt` + +Форматирует исходный код C/C++ через `clang-format`. + +```bash +dcr fmt +``` + +Процессы: `src/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}` и `tests/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}`. + +Использует `.clang-format` в корне проекта (если таковой имеется), иначе стиль clang-format по умолчанию. + +## `dcr lint` + +Выполняет `clang-tidy` на C/C++ исходных файлах для статического анализа. + +```bash +dcr lint # отобразить диагностику +dcr lint --fix # автоматически применить исправления +dcr lint --help # подробная справка +``` + +Процессы: `src/**/*.{c,cpp,cxx,cc}` и `tests/**/*.{c,cpp,cxx,cc}`. + +Без параметра `--fix` clang-tidy выдает предупреждения и ошибки, не внося изменений в файлы. +При параметре `--fix` clang-tidy автоматически вносит предложения по исправлениям на месте. 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..32ebb84 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/commands/system-commands.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: Системные команды (setup, --help, ...) +--- + +# Системные команды + +## `dcr setup` + +`~/.dcr/config.toml` — конфигурация реестров + +```bash +dcr setup +``` + +Если файл `~/.dcr/config.toml` не найден, DCR возвращает ошибку. Создайте его вручную: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +## `dcr --help` + +Отображает справку по всем командам. + +```bash +dcr --help +``` + +## `dcr --version` + +Отображает версию и целевую платформу. + +```bash +dcr --version # dcr 0.7.0 (x86_64-unknown-linux-gnu) +``` + +## `dcr --update` + +Автоматическое обновление. Загружает последнюю версию бинарного файла из раздела «Релизы» на GitHub и заменяет текущую версию. + +```bash +dcr --update +``` + +Возможности: + +* Определяет платформу и архитектуру автоматически +* Выдает предупреждение при установке через AUR (вместо этого используйте пакетный менеджер) +* Работает на 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..a65b231 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/contributing.mdx.mdx @@ -0,0 +1,52 @@ +--- +sidebar_label: Вклад +--- + +# Вклад + +## Настройка + +```bash +git clone https://github.com/dexoron/dcr +cd dcr +cargo build +``` + +## Стиль написания кода + +Весь код форматируется через `cargo fmt`: + +```bash +формат груза +``` + +## Линтер + +```bash +cargo clippy --all-targets -- -D warnings +``` + +## Тесты + +```bash +тест cargo --all-targets +``` + +## Процесс связей с общественностью + +1. Форкните репозиторий +2. Создайте ветку: `git checkout -b feature/description` +3. Внесите изменения +4. Запустите `cargo fmt && cargo clippy --all-targets -- -D warnings && cargo test --all-targets` +5. Откройте Pull Request + +## CI + +CI runs (see `.github/workflows/ci.yml`): + +* `cargo fmt --check` +* `cargo clippy` (default + `--all-features`) +* `cargo check --all-targets --all-features` +* Unit + integration tests on Linux, macOS, Windows +* Extra Linux job with `--features archive` (FAT images) +* Tools on runners: clang, nasm, clang-format/tidy (Linux) 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..fb811b9 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/faq.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: Часто задаваемые вопросы +--- + +# Часто задаваемые вопросы + +## Реестр не найден + +``` +Ошибка: реестр не найден +``` + +**Решение:** Убедитесь, что файл `~/.dcr/config.toml` существует: + +```toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +Если реестр кастомный, проверьте `DCR_INDEX_PATH`: + +```bash +echo $DCR_INDEX_PATH +``` + +## Компилятор не найден + +``` +Ошибка: компилятор не найден +``` + +**Решение:** Убедитесь, что компилятор установлен и доступен в PATH. + +```bash +какой gcc +какой clang +``` + +Или укажите явно через `[toolchain]` или `DCR_COMPILER`. + +## Ctrl+C во время сборки + +DCR корректно обрабатывает SIGINT: прерывает текущую компиляцию и завершает процесс с ненулевым кодом. + +## Как создать библиотеку? + +[Library Recipe](/docs/recipes/library-project). + +## Как выполнить кросс-компиляцию для Windows? + +См. [Cross-Compile Recipe](/docs/recipes/cross-to-windows). + +## Как сделать мультипакетный проект? + +См. [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-файл устарел + +При изменении зависимостей `dcr.lock` автоматически обновляется при следующем `dcr add`. Если нужно принудительно обновить — удалите `dcr.lock` и выполните `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..de693fd --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/getting-started/first-steps.mdx.mdx @@ -0,0 +1,79 @@ +--- +sidebar_label: Первые шаги +--- + +# Первые шаги + +## Создать проект + +```bash +dcr new my-app +cd my-app +``` + +Будет создана структура: + +``` +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" +``` + +## Сборка + +```bash +dcr build +``` + +Результат — `target/\/debug/my-app` (Linux) или `target/debug/my-app.exe` (Windows). + +Профиль сборки: + +```bash +dcr build --release # release сборка +dcr build --debug # debug (по умолчанию) +``` + +## Запустить + +```bash +dcr run +``` + +Собирает (если нужно) и запускает бинарник. + +## Первый тест + +```bash +dcr test --init # создать шаблон теста +dcr test # запустить тесты +``` + +## Форматирование + +```bash +dcr fmt # clang-format по .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..397932b --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,135 @@ +--- +sidebar_label: Установка +--- + +# Установка + +## dcrup (recommended) + +Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source). + +### Linux / macOS / BSD / Windows (bash) + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable +``` + +Non-interactive install of DCR in one shot: + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- install stable +export PATH="$HOME/.dcr/bin:$PATH" +``` + +### Windows (PowerShell) + +```powershell +irm https://ps1.dcr-tool.ru | iex +# or download then run: +# irm https://ps1.dcr-tool.ru -OutFile dcrup.ps1 +# powershell -File .\dcrup.ps1 self-install +# $env:Path += ";$env:USERPROFILE\.dcr\bin" +dcrup install stable +``` + +Optional cmd bootstrap (if you prefer `curl` of the cmd shim): + +```bat +curl -fsSL -o dcrup.cmd https://cmd.dcr-tool.ru +``` + +After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`): shims live in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows `dcrup.cmd`). + +### Common dcrup commands + +```sh +dcrup install stable # latest stable prebuilt +dcrup install 0.8.2 # pin → 0.8.2@stable +dcrup install 0.8.2@dev +dcrup install stable --libc musl # Linux: musl asset (default: gnu) +dcrup install stable --build # cargo build --features archive +dcrup install night # always build from branch dev HEAD +dcrup default 0.8.2 +dcrup update +dcrup list +dcrup show +dcrup which +``` + +Layout: `~/.dcr/toolchains/\/dcr` and `~/.dcr/bin/dcr` → active version. + +--- + +## Arch Linux (AUR) + +```sh +ура -S dcr +``` + +## macOS / Linux (Homebrew) + +```sh +brew tap dexoron/dexoron +brew install dcr +``` + +## Snap (Linux) + +```sh +sudo snap install dcrup +``` + +> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`. + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or: + +```sh +cargo install dcr --features archive +``` + +## Из источника + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr +cargo build --release --features archive +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +# or manage versions with dcrup install night / --build +``` + +## После установки + +```bash +dcr --version +dcrup show # if installed via dcrup +``` + +Man pages (package installs / release assets): + +```bash +man dcr +man dcr-build +``` + +Registry (optional) — `~/.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..dea2252 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/ide-integration.mdx.mdx @@ -0,0 +1,51 @@ +--- +sidebar_label: Интеграция с IDE +--- + +# Интеграция с IDE + +## VS Code + +```bash +dcr gen vscode +``` + +Генерирует в `.vscode/`: + +| Файл | Назначение | +| ----------------- | ------------------------------------------- | +| `tasks.json` | Задача `build` (dcr build) | +| `launch.json` | Debug-запуск бинарника | +| `settings.json` | clangd/IntelliSense: include пути, стандарт | +| `extensions.json` | Рекомендует clangd, C/C++ | + +## CLion + +```bash +dcr gen clion +``` + +Генерирует в `.idea/`: + +| Файл | Назначение | +| ----------------------------------------- | ------------------------------------------------ | +| `externalTools.xml` | Build, Run, Clean, Test как внешние инструменты | +| `customTargets.xml` | Кастомные цели сборки | +| `misc.xml` | Настройки C/C++ проекта | +| `runConfigurations/dcr_build_and_run.xml` | Конфигурации запуска для каждого бинарного файла | + +## compile_commands.json + +```bash +dcr gen команды компиляции +``` + +Генерирует `compile_commands.json` в корне проекта. Стандартный формат для: + +## информация о проекте + +```bash +dcr gen info-проекта +``` + +Выводит JSON с метаданными проекта (см. [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..a1533a4 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/license.mdx.mdx @@ -0,0 +1,33 @@ +--- +sidebar_label: Лицензия +--- + +# Лицензия + +## DCR + +DCR распространяется под лицензией [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html). + +> **Важно:** DCR — инструмент сборки, а не библиотека. GPL распространяется только на исходный код самого DCR. Проекты, собранные с помощью DCR, не подпадают под лицензию DCR — их лицензирование определяется исключительно их собственным кодом и зависимостями. + +## Rust-зависимости + +DCR написан на Rust. Ниже перечислены основные статически связываемые крейты: + +| Крейт | Лицензия | +| ------------------------------------------------------- | ------------------ | +| [`ureq`](https://crates.io/crates/ureq) | MIT ИЛИ Apache-2.0 | +| [`serde`](https://crates.io/crates/serde) | MIT ИЛИ Apache-2.0 | +| [`toml`](https://crates.io/crates/toml) | MIT ИЛИ 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 ИЛИ Apache-2.0 | +| [`sha2`](https://crates.io/crates/sha2) | MIT ИЛИ Apache-2.0 | +| [`glob`](https://crates.io/crates/glob) | MIT ИЛИ Apache-2.0 | +| [`self-replace`](https://crates.io/crates/self-replace) | MIT ИЛИ Apache-2.0 | +| [`ctrlc`](https://crates.io/crates/ctrlc) | MIT ИЛИ Apache-2.0 | + +Full dependency tree is available in [`Cargo.lock`](https://github.com/dexoron/dcr/blob/main/Cargo.lock). Подавляющее большинство имеют двойную лицензию MIT OR Apache-2.0. + +## Дополнительные благодарности + +* Дизайн CLI и модель проектов DCR вдохновлены [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..c982a8d --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/recipes/cross-to-windows.mdx.mdx @@ -0,0 +1,47 @@ +--- +sidebar_label: Кросс-компиляция для Windows +--- + +# Кросс-компиляция для Windows на Linux + +Сборка Windows-бинаря на Linux с использованием mingw-w64. + +## Установка toolchain + +```bash +# Ubuntu/Debian +sudo apt install mingw-w64 + +# Fedora +sudo dnf install mingw64-gcc mingw64-binutils +``` + +## Конфигурация + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "app" + +[build] +language = "c" +standard = "c17" +target = "windows" +``` + +## Сборка + +```bash +dcr build --target windows --release +``` + +Артефакт: `target/x86_64-pc-windows-gnu/release/my-app.exe`. + +## Кастомный 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..db31aaa --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/recipes/library-project.mdx.mdx @@ -0,0 +1,70 @@ +--- +sidebar_label: Проект библиотеки +--- + +# Проект библиотеки + +Создание статической библиотеки и её использование в другом проекте. + +## Шаг 1: Создать библиотеку + +```bash +dcr new my-lib +``` + +`dcr.toml`: + +```toml +[package] +name = "my-lib" +version = "0.1.0" +type = "lib" + +[build] +language = "c" +standard = "c17" +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; } +``` + +## Шаг 2: Собрать + +```bash +cd my-lib +dcr build --release +``` + +Артефакты: + +* `target/release/libmy-lib.a` (Linux/macOS) +* `target/release/my-lib.lib` (Windows) +* `target/include/` — заголовочные файлы + +## Шаг 3: Использовать в проекте + +```bash +dcr new my-app +cd my-app +dcr add ../my-lib +``` + +Автоматически: + +* Добавляется include path на `target/include/` библиотеки +* Добавляется lib path на `target/release/` +* Линкуется `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..b1b596f --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/recipes/multi-package-workspace.mdx.mdx @@ -0,0 +1,103 @@ +--- +sidebar_label: Рабочая область с несколькими пакетами +--- + +# Рабочая область с несколькими пакетами + +Проект из трёх пакетов: библиотека, утилита и основной бинарник. + +## Структура + +``` +workspace/ +├── dcr.toml # корневой workspace +├── lib-core/ +│ ├── dcr.toml +│ └── src/lib.rs +├── lib-utils/ +│ ├── dcr.toml +│ └── src/utils.c +└── app/ + ├── dcr.toml + └── src/main.c +``` + +## Корневой 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 +``` + +## Пакеты + +`lib-core/dcr.toml`: + +```toml +[package] +name = "lib-core" +version = "0.1.0" +type = "lib" + +[build] +kind = "staticlib" +``` + +`lib-utils/dcr.toml`: + +```toml +[package] +name = "lib-utils" +version = "0.1.0" +type = "lib" + +[build] +kind = "staticlib" +``` + +`app/dcr.toml`: + +```toml +[package] +name = "app" +version = "0.1.0" +type = "app" + +[build] +kind = "bin" +``` + +## Сборка + +```bash +cd workspace +dcr build # собирает всё в правильном порядке +dcr build --workspace app # только app (lib-core и lib-utils собираются как зависимости) +dcr run # собирает и запускает main-пакет +``` + +Порядок сборки (топологическая сортировка): + +1. `lib-core` +2. `lib-utils` (зависит от lib-core) +3. `app` (зависит от 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..d98c699 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/build-profiles.mdx.mdx @@ -0,0 +1,82 @@ +--- +sidebar_label: dcr build --profile lto +--- + +# Встроенные профили + +Профили позволяют переопределять любые поля секции `[build]` для конкретного режима сборки. + +## Конфигурация + +```toml +[build] +language = "c" +standard = "c17" +cflags = ["-Wall"] + +[build.debug] +cflags = ["-O0", "-g"] + +[build.release] +cflags = ["-O3", "-flto"] +``` + +## Правила + +Поля из `[build.\]` **мержатся поверх** `[build]` + +* **Скалярные поля** (строки, числа, логические значения) — заменены +* Массивы (`cflags`, `ldflags`, ...) **заменяются полностью**, а не дополняются + +Установите `inherit = false`, чтобы отключить наследование массивов (будут использоваться только собственные массивы профиля). + +## Кастомные профили + +Флаги по умолчанию для каждого профиля формируются из трёх полей конфигурации: + +| Поле | Default cflags | Профили сборки | +| ---------------- | ------------------ | -------------- | +| `opt_level` | `-O0 -g` | `"3"` | +| `debug` | `true` | `false` | +| `предупреждения` | `["all", "extra"]` | `[]` | + +Которые генерируют соответствующие флаги компилятора: + +| Профиль | Действующие флаги | +| ------- | ---------------------------------------------------------- | +| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` | +| `релиз` | `-O3 -DNDEBUG` | + +Дополнительные параметры сборки можно включать или отключать для каждого профиля: + +```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 профили + +```toml +[build.linux] +cflags = ["-DLINUX"] + +[build.windows.debug] +cflags = ["-DWIN32", "-O0", "-g"] +``` + +Порядок применения (в порядке убывания приоритета): + +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..10d157c --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/build-system.mdx.mdx @@ -0,0 +1,136 @@ +--- +sidebar_label: Система сборки +--- + +# Система сборки + +## Бэкенды компилятора + +DCR поддерживает 4 бэкенда компиляции. Выбор происходит автоматически на основе расширения файла и target triple. + +| Бэкенд | Файлы | Когда используется | +| --------- | --------------------------------------- | ------------------------------------- | +| `unix_cc` | `.c`, `.cpp`, `.cxx`, `.cc`, `.s`, `.S` | gcc/clang на Linux/macOS/BSD | +| `msvc` | `.c`, `.cpp`, `.cxx`, `.cc` | Windows (cl, clang-cl) | +| `газ` | `.s`, `.S` | ARM/ARM64 ассемблер | +| `nasm` | `.asm`, `.s` | x86/x86_64 ассемблер | +| `masm` | `.asm` | MASM (ml/ml64) в Windows | +| `fasm` | `.asm`, `.fasm` | Сборщик плоских деталей | +| `llvm_ir` | `.ll` | LLVM IR с помощью `llc -filetype=obj` | + +## Поддержка Qt + +DCR обеспечивает встроенную поддержку Qt для автоматической обработки метаобъектов (MOC, UIC, RCC). + +Чтобы включить эту функцию, установите значение `build.qt = true` в файле `dcr.toml`. DCR автоматически обнаружит файлы, связанные с Qt (`.ui`, `.qrc`, `.h` с `Q_OBJECT`), и обработает их. + +```toml +[build] +qt = true +``` + +*Примечание: Требуется установка модулей `qt6` (Core, Widgets, Gui, Svg) с помощью `pkg-config`.* + +Если требуется специальная обработка, по-прежнему можно выполнить расширенную настройку с помощью файла `build.steps`: + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +### Unix CC + +* Компилятор определяется через `resolve_compiler()`: CC/CXX из [toolchain], DCR_COMPILER/env, PATH +* Поддерживает генерацию `.d` файлов для header dependency tracking +* Флаги: `-std=`, `-MMD -MF`, `-c -o`, `-I`, `-L`, `-l` +* Условные флаги, зависящие от настроек: + * `freestanding` или целевая среда «bare-metal»: `-ffreestanding` (компиляция), `-nostdlib -static` (линковка) + * `lto`: `-flto` (компиляция + линковка) + * `panic = "abort"`: `-fno-exceptions` (только для C++), `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables` + +### MSVC + +* Поддерживает cl.exe и clang-cl.exe +* Флаги: `/std:`, `/Fo:`, `/Fe:`, `/I`, `/link` + +### GAS / NASM + +* 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: ` \` (путь вывода — объектный файл) +* LLVM IR: `-filetype=obj -o \` + +## Инкрементные сборки + +Три уровня инкрементальности: + +1. **mtime** — если выходной файл новее всех входных, файл не перекомпилируется +2. **`.d` files** — отслеживание изменений в заголовочных файлах (включая транзитивные) +3. **SHA256 fingerprint** — если флаги компиляции изменились, файл перекомпилируется (fingerprint хранится в `.dcr_fingerprint`) + +## Параллельная компиляция + +* Используется `thread::scope` для создания пула потоков +* Атомарная очередь задач (`AtomicU64`) +* Мьютекс на запись в stdout (`OUTPUT_MUTEX`) +* Количество потоков = `available_parallelism()`, ограниченное значением `build.codegen-units`, если оно задано + +## Типы сборок + +| Тип | Тип | Путь (пример для Linux) | +| ------------------ | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `bin` | Исполняемый файл | `target/\/\` (.exe) | +| `staticlib` | Статическая библиотека | `target/\/lib\.a` (.lib) | +| `sharedlib` | Динамическая библиотека | `target/\/lib\.so` (.dll/.dylib) | +| `efi` | UEFI приложение | `target/\/\.efi` | +| `эльф` | ELF без стандартной библиотеки | `target/\/\` | +| `нет` | Только компиляция, без линковки | — | +| `пользовательский` | Полный контроль filename + extension | `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). + +## Этапы сборки + +DCR поддерживает pre-build и post-build шаги через Qt codegen: + +* `build.steps` — команды, выполняемые перед компиляцией +* `build.post_steps` — команды, выполняемые после компиляции + +Подстановки: `{stem}`, `{in}`, `{out}`. + +`rcc` — Resource Compiler: `{stem}.qrc → qrc_{stem}.cpp` + +```toml +[build.steps] +moc = "moc {in} -o {out}" +``` + +## pkg-config + +Автоматический поиск (чтение из исходного файла конфигурации): + +```toml +[build] +pkg_config = ["sdl2", "gl"] +``` + +DCR вызывает `pkg-config --cflags sdl2 gl` и `pkg-config --libs sdl2 gl` и добавляет результат в флаги компиляции/линковки. + +## Подстановка переменных + +Поддерживаемые переменные: + +| Переменная | Описание | +| ----------------------- | ----------------------------------------- | +| `{version}` | Версия пакета | +| `{version_major}` | Часть, обозначающая основную версию | +| `{version_minor}` | Часть, обозначающая второстепенную версию | +| `{version_patch}` | Переменная | +| `{version_suffix}` | Суффикс (например, `-rc1`) | +| `{version_suffix_dash}` | Суффикс с тире | +| `{profile}` | Имя профиля (debug/release/...) | +| `{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..dbac4ba --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/cross-compilation.mdx.mdx @@ -0,0 +1,64 @@ +--- +sidebar_label: Кросс-компиляция +--- + +# Кросс-компиляция + +## Сокращённые названия + +DCR поддерживает короткие имена платформ, которые автоматически раскрываются в полные triples: + +| Краткое название | Полный тройной | +| ---------------- | -------------------------- | +| `linux` | `x86_64-unknown-linux-gnu` | +| `macos` | `x86_64-apple-darwin` | +| `windows` | `x86_64-pc-windows-msvc` | + +```bash +dcr build --target windows +``` + +## Полные тройки + +```bash +dcr build --target aarch64-unknown-linux-gnu +dcr build --target x86_64-pc-windows-gnu +dcr build --target armv7-unknown-linux-gnueabihf +``` + +## clang --target + +При использовании clang DCR автоматически inject-ит `--target=\` в CFLAGS/CXXFLAGS. + +```toml +[build] +compiler = "clang" +target = "aarch64-unknown-linux-gnu" +# Авто: cflags = ["--target=aarch64-unknown-linux-gnu"] +``` + +## Bare-Metal + +Для целевых платформ, содержащих значения `none`, `-elf`, `eabi` или `baremetal`, DCR автоматически: + +1. Для none/elf/eabi/bare-metal target-ов отключаются DCR default флаги (нет `-I` системных путей, нет `-l` libc). +2. **Вставляет `-ffreestanding`** на этапе компиляции и `-nostdlib -static` на этапе линковки + +Кроме того, можно явно включить автономный режим: + +```toml +[build] +freestanding = true +``` + +```bash +dcr build --target aarch64-none-elf +``` + +## Целевой каталог + +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..6f577ca --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,263 @@ +--- +sidebar_label: Обзор dcr.toml +--- + +# Обзор dcr.toml + +Основной конфигурационный файл проекта. Располагается в корне проекта. + +## Структура + +```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 +``` + +## [пакет] + +| Поле | Обязательное | Описание | +| ---------- | ------------ | ------------------------------------------- | +| `имя` | да | Имя проекта | +| `версия` | да | Семантическая версия | +| `тип` | no | `app`, `lib`, `none` (defaults to `"none"`) | +| `лицензия` | нет | SPDX-идентификатор лицензии | +| `автор` | нет | Автор | + +```toml +[package] +name = "my-app" +version = "0.1.0" +type = "app" +license = "MIT" +author = "John Doe" +``` + +## [сборка] + +... + +* `build.qt` — (bool) Включить автоматическую обработку метаобъектов Qt (MOC, UIC, RCC). Требуется установка модулей `qt6` с помощью `pkg-config`. + +| Поле | По умолчанию | Описание | +| ------------------------ | ------------- | --------------------------------------------------------------------------------------------------------- | +| `язык` | `"c"` | `"c"`, `"c++"`, `"cpp"`, `"cxx"`, `"asm"`, `"llvm_ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to `"c"`) | +| `стандартный` | `"c11"` | Стандарт C (`c11`, `c17`, `c23`) | +| `cxx_standard` | — | Стандарт C++ (`c++17`, `c++20`, `c++23`) | +| `компилятор` | `cxxflags` | Preferred compiler (optional, defaults to `"clang"`) | +| `тип` | `"bin"` | `bin`, `staticlib`, `sharedlib`, `efi`, `elf`, `none`, `custom`, `flat-bin` | +| `target` | хост | Target triple для кросс-компиляции | +| `платформа` | `"нативный"` | `native`, `efi`, `freestanding` | +| `cflags` | `[]` | Дополнительные флаги C++ | +| `ldflags` | `[]` | Дополнительные флаги линковки | +| `имя файла` | `""` | Кастомное имя выходного файла | +| `расширение` | `""` | Custom file extension (for `flat-bin`, default is `bin`) | +| `корни` | `["src"]` | Source roots: directories and/or individual source/header files | +| `exclude` | `[]` | Паттерны исключений | +| `include` | `[]` | Дополнительные include-директории | +| `src_disable` | `false` | Отключить автоматический поиск источников | +| `наследовать` | `false` | Наследовать build от корня workspace | +| `clean` | `[]` | Шаблоны Glob для настраиваемых чистых путей | +| `out_dir` | `""` | Пользовательский каталог для вывода данных | +| `только рабочая область` | `false` | Workspace-only, not built standalone (no `language`/`compiler` required) | +| `отдельно стоящий` | `false` | Компилировать в автономном режиме (`-ffreestanding` + `-nostdlib -static`) | +| `opt_level` | — | Optimization level: `0`-`3`, `"s"`, `"z"` (derived from profile if omitted) | +| `ldscript` | profile-based | Emit debug symbols (`-g`): `true` in debug, `false` in release | +| `lto` | `false` | Оптимизация на этапе компоновки (`-flto` как для компилятора, так и для компоновщика) | +| `asflags` | `false` | Удалить символы из вывода (опция `-s` в ldflags) | +| `true` | `[]` | Warning flags (e.g. `"all"`, `"extra"`, `"pedantic"`); engine adds `-Wall -Wextra` in debug if empty | +| `panic` | `""` | Стратегия «Паника»: `"abort"` отключает исключения и таблицы развертки | +| `codegen-units` | `""` | Максимальное количество параллельных заданий компиляции (`"0"` = автоматически) | +| `qt` | `false` | Включить автоматическую обработку метаобъектов Qt (MOC, UIC, RCC) | + +Параметры из исходного файла конфигурации (не в виде типизированной структуры): + +* Пакеты для pkg-config +* Путь к linker script +* `build.steps` / `build.post_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. + +Пример: + +```toml +[build] +language = ["cpp", "c"] +standard = "c17" +standard = "c23" +cxx_standard = "c++23" +compiler = "clang" +kind = "sharedlib" +cflags = ["-Wall", "-Wextra"] +pkg_config = ["sdl2", "gl"] +``` + +## [набор инструментов] + +```toml +[toolchain] +cc = "/usr/bin/clang" +cxx = "/usr/bin/clang++" +as = "/usr/bin/as" +ar = "/usr/bin/ar" +ld = "/usr/bin/ld.lld" +uic = "/usr/bin/uic" # Qt +moc = "/usr/bin/moc" # Qt +rcc = "/usr/bin/rcc" # Qt +``` + +Raw config также поддерживает `uic`, `moc` и `rcc` для генерации кода Qt. + +## [зависимости] + +См. [dependencies](/docs/reference/dependencies). + +## [запустить] + +```toml +[запустить] +cmd = "./target/{profile}/{name}" +``` + +Подстановки: + +* `{version}` — версия из [package] +* `pkg_config` +* `{profile}` — отладочная / релизная версия +* `{name}` — имя из [package] + +По умолчанию `cmd` вычисляется как `./target/{profile}/{name}`. + +## [рабочая область] + +См. [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]`). + +Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature. + +| 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..b574740 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/dependencies.mdx.mdx @@ -0,0 +1,88 @@ +--- +sidebar_label: Зависимости +--- + +# Зависимости + +## Форматы + +В секции `[dependencies]` поддерживаются три формата: + +### Строка (реестр) + +```toml +[dependencies] +fmt = "10.1.1" +spdlog = "^1.12" +catch2 = ">=3.0,<4.0" +``` + +Строка версии используется без изменений для поиска в реестре. + +### Табличный (git) + +```toml +[dependencies] +fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" } +``` + +Поля: `git`, `branch`, `tag`, `rev`, `features`. + +### Табличный (path) + +```toml +[dependencies] +mylib = { path = "../mylib" } +``` + +## Реестр + +## RegistryDCR использует реестр пакетов для поиска зависимостей по имени.```toml +# ~/.dcr/config.toml +[registry] +main = { url = "https://github.com/dcr-ports/dcr-index", priority = 1 } +``` + +```toml +# ~/.dcr/config.toml +[registry.default] +url = "https://index.dcr.pm" +priority = 1 +``` + +Приоритет реестра: порядок в файле `config.toml`. Переменная `DCR_INDEX_PATH` переопределяет путь к index.json. + +## Git-зависимости + +Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources: + +* `branch` — переключиться на ветку +* `tag` — переключиться на тег +* `rev` — переключиться на конкретный коммит +* `features` — флаги функций (проанализированы, но не влияют на сборку) + +## 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..0ac98f7 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/environment-variables.mdx.mdx @@ -0,0 +1,60 @@ +--- +sidebar_label: Переменные среды +--- + +# Переменные среды + +## DCR_COMPILER + +Переопределяет компилятор для всех языков. **Наивысший приоритет.** + +```bash +export DCR_COMPILER=clang +dcr build +``` + +Приоритет разрешения компилятора: + +1. `DCR_COMPILER` (переменная среды) +2. `DCR_CC` / `DCR_CXX` / `DCR_AS` (переменная среды) +3. `[toolchain]` (dcr.toml) +4. `build.compiler` (dcr.toml) +5. `PATH` + +## DCR_CC / DCR_CXX / DCR_AS + +Приоритет: `[toolchain]` > `DCR_COMPILER` > `DCR_CC` > `PATH`. + +```bash +export DCR_CC=gcc-14 +export DCR_CXX=g++-14 +export DCR_AS=arm-linux-gnueabihf-as +``` + +## DCR_LD / DCR_AR + +Переопределить линкер и архиватор. + +```bash +export DCR_LD=ld.lld +export DCR_AR=llvm-ar +``` + +## DCR_DEBUG + +Включает режим отладки — печатает все команды компиляции перед выполнением. + +```bash +export DCR_DEBUG=1 +dcr build +``` + +## DCR_INDEX_PATH + +Переопределяет путь к index.json реестра. + +```bash +export DCR_INDEX_PATH=/custom/path/index.json +``` + +По умолчанию: `~/.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..aeac65c --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/platform-support.mdx.mdx @@ -0,0 +1,53 @@ +--- +sidebar_label: Поддержка платформ +--- + +# Поддержка платформ + +## Тройные цели + +DCR нормализует target triple через `platform_triple::normalize_triple()`. Если задано имя платформы (short name), оно раскрывается в triple. + +### Linux + +``` +target/-unknown-linux-// +``` + +Architectures: `x86_64`, `aarch64`, `i686`, `armv7`, `riscv64` (host-detected). +Environments: `gnu` (default), `musl`. + +Тип артефакта: ELF. Расширения: `.so` для sharedlib, `.a` для staticlib + +### macOS + +``` +target// (default) or target/// (with target) +``` + +Поддержка архитектур: `x86_64`, `aarch64`. + +`.dylib` для sharedlib, `.a` для staticlib + +### Windows + +``` +target// (default) or target/// (with target) +``` + +Поддержка архитектур: `x86_64`, `aarch64`. +Environments: `msvc` (default), `gnu` (MinGW). + +Расширения: `.exe` (бинарный файл), `.lib` (статическая библиотека), `.dll` (общая библиотека), `.efi` (UEFI). + +### BSD + +``` +target/-unknown-// +``` + +Поддерживаемые системы: `freebsd`, `openbsd`, `netbsd`. + +## Определение хоста + +`platform_triple::host_triple()` возвращает тройку текущей системы. Используется как fallback, если `target` не указан. 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..3672689 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/reference/workspaces.mdx.mdx @@ -0,0 +1,80 @@ +--- +sidebar_label: Рабочие пространства +--- + +# Рабочие пространства + +Workspaces позволяют управлять несколькими пакетами в одном репозитории. + +## Конфигурация + +```toml +[workspace] +members = [ + { path = "pkg-a" }, + { path = "pkg-b", deps = ["pkg-a"] }, + { path = "pkg-c", deps = ["pkg-a", "pkg-b"], main = true }, +] +``` + +### Поля member + +| Поле | Описание | +| ------ | -------------------------------------------- | +| `path` | Путь к пакету (относительно корня workspace) | +| `deps` | Зависимости от других member-ов | +| `main` | Пометить как главный пакет | + +## Топологическая сортировка + +DCR автоматически сортирует пакеты по зависимостям: пакет A собирается раньше B, если B зависит от A. + +Циклические зависимости обнаруживаются и приводят к ошибке. + +## Сборка + +```bash +dcr build # собрать все пакеты +dcr build --workspace pkg-a # собрать только pkg-a +``` + +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. + +## Очистка + +```bash +dcr clean # очистить только корневой target/ +dcr clean --all # очистить target/ всех пакетов +``` + +## Наследование + +Если у member-а нет своей секции `[build]`, а в корневом `[build]` указано `inherit = true`: + +```toml +[build] +inherit = true +language = "c" +standard = "c17" +``` + +## 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..106e6e0 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/self-update.mdx.mdx @@ -0,0 +1,46 @@ +--- +sidebar_label: Автоматическое обновление +--- + +# Автоматическое обновление + +## dcr --update + +Автоматическое обновление до последней версии. Загружает бинарный файл (не архив) из раздела «Релизы» на GitHub и заменяет им текущий исполняемый файл. + +```bash +dcr --update +``` + +## Как это работает + +1. DCR определяет текущую платформу и архитектуру +2. Загружает последнюю версию с `api.github.com/repos/dexoron/dcr/releases/latest` +3. Сравнивает версии +4. Загружает соответствующий ресурс (прямой URL-адрес двоичного файла, а не архива) +5. Заменяет текущий исполняемый файл + +## Названия активов + +Шаблон: `dcr-\.\ ` + +| Платформа | Название актива | +| -------------- | ------------------------------------- | +| Linux x86_64 | `dcr-x86_64-unknown-linux-gnu.tar.gz` | +| macOS x86_64 | `dcr-x86_64-apple-darwin.tar.gz` | +| macOS ARM64 | `dcr-aarch64-apple-darwin.tar.gz` | +| Windows x86_64 | `dcr-x86_64-pc-windows-msvc.zip` | + +## AUR + +Если DCR установлен через AUR, `--update` выводит предупреждение: + +``` +Обновление через менеджер пакетов: yay/paru -Syu {package_name} или sudo pacman -Syu {package_name} +``` + +## Ошибки + +* Не удалось определить платформу — ошибка +* Не удалось скачать релиз — ошибка с URL +* Нет прав на запись бинарника — ошибка (нужен `sudo` или ручная установка) 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..e59b9ba --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/testing/running-tests.mdx.mdx @@ -0,0 +1,45 @@ +--- +sidebar_label: Запуск тестов +--- + +# Запуск тестов + +## Выполнение + +```bash +Тест DCR +``` + +Выполняет сборку проекта, а затем компилирует и запускает тестовые файлы из каталога `tests/`. + +## Профили + +```bash +dcr test # debug (по умолчанию) +dcr test --release # release +dcr test --debug # явно debug +``` + +## Вывод + +``` +===================== + Сводка результатов набора тестов +===================== +ИСПОЛЬЗОВАНО: 5 +ПРОЙДЕНО: 3 +ПРОПУЩЕНО: 1 +НЕ ПРОЙДЕНО: 1 +===================== +``` + +## Код возврата + +* 0 — все тесты пройдены (FAIL = 0) +* 1 — есть упавшие тесты + +## Что строится + +* Все C/C++ файлы из `tests/` +* Include path: `tests/` (для `dcr_test.h`) +* Линкуется с основным проектом (если `type = "lib"`) 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..08f1581 --- /dev/null +++ b/docs-crowdin-export/ru-RU/docs/testing/test-framework.mdx.mdx @@ -0,0 +1,69 @@ +--- +sidebar_label: Тестовая инфраструктура (EXPECT, TEST, ...) +--- + +# Тестовая инфраструктура + +DCR имеет встроенный минималистичный фреймворк для тестирования на C/C++. + +## Макросы + +### `EXPECT(expr, ...)` + +Проверяет, что выражение истинно. + +```c +EXPECT(1 + 1 == 2); +EXPECT(ptr != NULL, "ptr should not be NULL"); +``` + +### `SKIP(...)` + +Пропускает тест с опциональным сообщением. + +```c +SKIP("not implemented on Windows yet"); +``` + +### `TEST(имя)` + +Определяет тест. + +```c +TEST(сложение) { + EXPECT(1 + 1 == 2); + EXPECT(2 + 2 == 4); +} +``` + +### `TEST_CASE(name, ...)` + +Регистрирует тестовый случай. + +```c +TEST_CASE(math, a, b) { + EXPECT(a + b == b + a); +} +``` + +## Инициализация + +```bash +dcr test --init +``` + +Создаются файлы: + +* `tests/dcr_test.h` — заголовочный файл фреймворка +* `tests/test.c` — шаблон с примером теста + +## Структура tests/ + +``` +tests/ +├── dcr_test.h # фреймворк (не редактировать) +├── test.c # основные тесты +└── ... # дополнительные .c файлы с тестами +``` + +Компилируются только файлы с расширением `.c` (файлы с расширением `.cpp` не поддерживаются). 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..8a63429 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/README.mdx.mdx @@ -0,0 +1,66 @@ +--- +sidebar_label: Introduction +--- + +# DCR — C/C++ Build Tool & Package Manager + +
+Quick reference + +```bash +# Installation (dcrup) +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable + +# 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..645cf7c --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/changelog.mdx.mdx @@ -0,0 +1,230 @@ +--- +sidebar_label: Changelog +--- + +# Changelog + +## 0.8.3 (2026-08-03) + +### Added + +* **`dcr run -- \...`** — cargo-style argument forwarding after a bare `--`\ + (`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`. +* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests. + +### Changed + +* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\ + `[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\ + Previously the target was empty and those sections were ignored while artifacts already used the host triple path. +* **Empty target** — no more `Unknown target ''` warning. +* **`dcr run --help` / man `dcr-run`** — document `--` forwarding. + +### Fixed + +* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\`, so `dcr run` and flat-bin find the build output. +* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`). +* Spurious empty-target warning. + +## 0.8.2 (2026-07-22) + +### Added + +* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung. +* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`. +* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message. +* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`. +* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`). + +### Changed + +* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths). +* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds. +* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`). +* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`). +* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1. +* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`. + +## 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** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`. +* **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. + +## 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..615c9a8 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/contributing.mdx.mdx @@ -0,0 +1,52 @@ +--- +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 (see `.github/workflows/ci.yml`): + +* `cargo fmt --check` +* `cargo clippy` (default + `--all-features`) +* `cargo check --all-targets --all-features` +* Unit + integration tests on Linux, macOS, Windows +* Extra Linux job with `--features archive` (FAT images) +* Tools on runners: clang, nasm, clang-format/tidy (Linux) 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..79fc081 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/getting-started/installation.mdx.mdx @@ -0,0 +1,135 @@ +--- +sidebar_label: Installation +--- + +# Installation + +## dcrup (recommended) + +Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source). + +### Linux / macOS / BSD / Windows (bash) + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install +export PATH="$HOME/.dcr/bin:$PATH" +dcrup install stable +``` + +Non-interactive install of DCR in one shot: + +```sh +curl -fsSL https://sh.dcr-tool.ru | sh -s -- install stable +export PATH="$HOME/.dcr/bin:$PATH" +``` + +### Windows (PowerShell) + +```powershell +irm https://ps1.dcr-tool.ru | iex +# or download then run: +# irm https://ps1.dcr-tool.ru -OutFile dcrup.ps1 +# powershell -File .\dcrup.ps1 self-install +# $env:Path += ";$env:USERPROFILE\.dcr\bin" +dcrup install stable +``` + +Optional cmd bootstrap (if you prefer `curl` of the cmd shim): + +```bat +curl -fsSL -o dcrup.cmd https://cmd.dcr-tool.ru +``` + +After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`): shims live in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows `dcrup.cmd`). + +### Common dcrup commands + +```sh +dcrup install stable # latest stable prebuilt +dcrup install 0.8.2 # pin → 0.8.2@stable +dcrup install 0.8.2@dev +dcrup install stable --libc musl # Linux: musl asset (default: gnu) +dcrup install stable --build # cargo build --features archive +dcrup install night # always build from branch dev HEAD +dcrup default 0.8.2 +dcrup update +dcrup list +dcrup show +dcrup which +``` + +Layout: `~/.dcr/toolchains/\/dcr` and `~/.dcr/bin/dcr` → active version. + +--- + +## 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 +``` + +> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`. + +## Nix (flake) + +```sh +nix run github:dexoron/dcr +nix profile install github:dexoron/dcr +``` + +## Cargo (crates.io) + +```sh +cargo install dcr +``` + +Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or: + +```sh +cargo install dcr --features archive +``` + +## From source + +```sh +git clone https://github.com/dexoron/dcr.git +cd dcr +cargo build --release --features archive +ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr +# or manage versions with dcrup install night / --build +``` + +## Post-install + +```bash +dcr --version +dcrup show # if installed via dcrup +``` + +Man pages (package installs / release assets): + +```bash +man dcr +man dcr-build +``` + +Registry (optional) — `~/.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..bb9be20 --- /dev/null +++ b/docs-crowdin-export/uk-UA/docs/reference/dcr-toml.mdx.mdx @@ -0,0 +1,263 @@ +--- +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]`). + +Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature. + +| 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).