56 KiB
Changelog
[0.8.3] - 2026-08-03 "Конфигурация host target, аргументы run и нативные пути артефактов / Host Target Config, Run Args & Native Artifact Paths"
RU
Добавлено:
dcr run -- <args>...— cargo-style: всё после bare--передаётся собранному бинарнику
(dcr run --release -- --test_help). Работает и для прямого запуска, и для[run].cmd.- Интеграционные / unit-тесты — host target sections применяют
ldflagsбез--target; проброс аргументов после--; парсерsplit_double_dash.
Изменено:
- Native-сборка резолвит host triple — без
--target/ безbuild.targetконфиг-секции вида
[build.x86_64-unknown-linux-gnu](и аналоги host) снова применяются (cflags/ldflags/ toolchain).
Раньше target был «пустым», секции молча игнорировались, а артефакты уже лежали под host triple — линковка без-L/-l. - Пустой target —
normalize_target_os("")больше не warn'итUnknown target ''. dcr run --help/ mandcr-run— документирован разделитель--и forwarding args.
Исправлено:
- Нативные пути артефактов на Windows и macOS — без явного
--target/build.targetартефакты снова сохраняются вtarget/<profile>, поэтомуdcr runи flat-bin находят результат сборки. - Target-specific
ldflagsна native Linux/macOS/Windows (host triple) не доходили до линкера. - Ложный warning на пустой target string.
EN
Added:
dcr run -- <args>...— cargo-style: arguments after a bare--are forwarded to the built binary
(dcr run --release -- --test_help). Works for direct binary runs and[run].cmd.- Tests — host target sections apply
ldflagswithout CLI--target; run-arg forwarding;split_double_dashunit tests.
Changed:
- Native builds resolve the host triple — without
--target/ without packagebuild.target, host sections such as
[build.x86_64-unknown-linux-gnu](and host equivalents) apply again (cflags/ldflags/ toolchain).
Previously the target was empty, those sections were silently ignored while artifacts already used the host triple path — link failed without-L/-l(e.g. sandbox micro-lang +libsct-elf). - Empty target —
normalize_target_os("")no longer warnsUnknown target ''. dcr run --help/ mandcr-run— document--and argument forwarding.
Fixed:
- Native artifact paths on Windows and macOS — without an explicit
--target/build.target, artifacts again usetarget/<profile>, sodcr runand flat-bin find the build output. - Target-specific
ldflagson native host builds not reaching the linker. - Spurious warning for an empty target string.
[0.8.2] - 2026-07-22 "CLI Progress, archive Feature, Workspace Path Fixes / CLI Progress, archive Feature, Workspace Path Fixes"
RU
Добавлено:
- Прогресс компиляции
[N/M]— live-строкаcompile pkg v0.1.0 [12/41]на TTY (stderr), чтобы длинные mono-package сборки не выглядели «зависшими». - Свой стиль статуса build — фиксированная колонка глаголов:
project,compile,dep,ready,pack,done,run(не cargo-clone). - Cargo feature
archive—fatfsи упаковка FAT-образов опциональны (cargo build --features archive). Release CI собирает с feature; без feature[archive]даёт явную ошибку. - Интеграционные тесты —
flat_bin_nasm_build,package_build_target_used_without_cli_flag, усилен workspaceclean --all. - Расширенный CI — unit + integration на Linux/macOS/Windows, отдельный job с
--features archive, rust-cache, clippy default + all-features.
Изменено:
- CLI host triple больше не форсится — без
--targetиспользуетсяbuild.targetпакета/member (важно для bare-metal / post_steps ISO). - Relative
-I/-L/-T(и-isystem/-idirafter) в cflags/ldflags абсолютизируются относительно корня пакета (workspace CWD = root). dcr clean --all— не спамитtarget not foundпо members без локальногоtarget/(общий roottarget/).error/warn— красный / жёлтый, вывод на stderr;Подсказка:→Hint:.dcr --help/ man — добавленыadd,lint,setup; unknown command → exit code 1.- Сообщения NotFound —
linker not found: ld.lld …/{tool} not found …вместо сырогоos error 2.
EN
Added:
- Compile progress
[N/M]— live TTY linecompile pkg v0.1.0 [12/41]so long mono-package builds do not look hung. - DCR status verbs — fixed-width column:
project,compile,dep,ready,pack,done,run. - Cargo feature
archive— optionalfatfs/ FAT packing (cargo build --features archive). Release CI builds with the feature; without it[archive]errors clearly. - Integration tests —
flat_bin_nasm_build, packagebuild.targetwithout CLI flag, stricter workspaceclean --all. - Expanded CI — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features.
Changed:
- CLI no longer forces host triple — without
--target, package/memberbuild.targetis used (bare-metal / ISO post_steps). - Relative
-I/-L/-T(and-isystem/-idirafter) in flags are absolutized against the package root when workspace CWD is the root. dcr clean --all— no spam for members without a localtarget/(shared roottarget/).error/warn— red / yellow on stderr; RussianПодсказка:→Hint:.dcr --help/ man — listadd,lint,setup; unknown command exits 1.- NotFound messages —
linker not found: ld.lld …/{tool} not found …instead of rawos error 2.
[0.8.1] - 2026-07-20 "OS-Dev: flat-bin, FAT-образы / OS-Dev: flat-bin & FAT Images"
RU
Добавлено:
build.kind = "flat-bin"— сырой бинарный артефакт (расширение по умолчанию.bin):- NASM —
-f bin, прямой вывод<stem>.bin - FASM — прямой вывод (ожидается
format binaryв исходнике) - GAS / MASM / LLVM IR (
llc) — объект →objcopy -O binary→<stem>.bin - C/C++ (gcc/clang/MSVC) — compile → link (nostdlib/static) →
objcopy -O binary→<name>.bin - Требуется
llvm-objcopy/objcopy/gobjcopyв PATH (кроме NASM/FASM direct)
- NASM —
- Секция
[archive]— после успешной сборки DCR собирает образ диска (FAT12/16/32): размер, offset, volume label, опциональный bootsector иlayout. С 0.8.2 — за featurearchive. - Одиночные файлы в
build.roots— корень может быть файлом (.c,.asm, header), а не только каталогом.
Изменено:
dcr build --force/dcr run --force— force также перезапускаетbuild.stepsиbuild.post_steps.dcr runна workspace-only root — если задан[run].cmd, сначала build + run по конфигу корня; иначе делегирование члену workspace.
EN
Added:
build.kind = "flat-bin"— raw binary (default.bin) across NASM/FASM/GAS/MASM/LLC and C/C++ (objcopy where needed).[archive]section — FAT12/16/32 disk images after build (from 0.8.2 gated by featurearchive).- Single-file
build.roots.
Changed:
--forcere-runs steps/post_steps; workspace-onlydcr runprefers root[run].cmdwhen set.
[0.8.0] - 2026-07-18 "Модульный Движок Сборки, Новая Архитектура Ядра и Улучшение Workspaces / Modular Build Engine, New Core Architecture, & Workspace Improvements"
RU
Добавлено:
- Выделенное ядро сборки (Build Engine extraction) — вся логика оркестрации компиляции и сборки полностью вынесена из интерфейсного модуля
src/cli/build.rsв изолированный, переиспользуемый модуль ядраsrc/core/build/engine.rs. - Полиморфная модель языков (Трейт
Language) — введение абстрактного трейтаLanguage(src/core/build/language/mod.rs). Логика поиска файлов, сопоставления расширений и компиляторов распределена по выделенным языковым бэкендам для C, C++ (включая шаги генерации Qt), LLVM IR и ассемблера (GAS, NASM, FASM, MASM). - Абстракция сборщиков (Трейт
Builder) — введение трейтаBuilderдля полиморфного управления процессами компиляции (src/core/build/builder/mod.rs). Логика вызова компиляторов семейства GCC/Clang вынесена в общий модульbuilder/cc_common.rs, а MSVC — вbuilder/msvc/. - Поязыковая конфигурация (
[build.<lang>]) — добавлена поддержка индивидуальных настроек для каждого языка вdcr.toml(например,[build.c],[build.cpp],[build.asm]), позволяя независимо настраивать компилятор, стандарт и флаги сборки. - Интеграция путей зависимостей в Workspaces — сборщик теперь автоматически инжектирует пути заголовков (включая исходники
src/членов, папкиinclude/и директориюtarget/include) и библиотек (target/lib, а также специфичные для целевой платформы папки сборки) зависимых членов workspace при сборке. - Система событий
BuildReporter— весь вывод сборщика переведён на событийную модель (src/core/build/report.rs), что делает движок пригодным для программного встраивания (например, в IDE) без необходимости перехвата stdout/stderr. - Поддержка отмены сборки — добавлен потокобезопасный токен отмены (
Arc<AtomicBool>), позволяющий безопасно прервать выполнение компиляции на любом этапе. - Сохранение кастомных ключей TOML — парсер
dcr.tomlпереведен наtoml_edit, что гарантирует сохранение всех неизвестных/пользовательских ключей, комментариев и форматирования при перезаписи файла (например, черезdcr add). - Разрешение заголовков для локальных path-зависимостей — исправлена проблема, при которой потребители не могли найти заголовочные файлы статических/динамических библиотек, лежащие в упакованной папке
target/includeлокальных path-зависимостей. - Новая система интеграционных тестов — старый громоздкий файл
tests/cli_basic.rsразделен на изолированные и структурированные интеграционные тесты для каждой команды и фичи:cli_build.rs,cli_deps.rs,cli_lint.rs,cli_new.rs,cli_qt.rs,cli_test.rs,cli_workspace.rs.
Изменено:
- Дедупликация генерации артефактов — логика линковки бинарных файлов (ELF, PE, EXE), динамических библиотек (
.so,.dll,.dylib) и архивации статических библиотек (.a,.lib) полностью перенесена в выделенный модульsrc/core/build/builder/artifact.rs. - Запуск членов workspace из корня — команда
dcr runпри вызове из корня workspace-only проекта теперь запускает сборку выбранного пакета в контексте workspace (через флаг--workspace), исключая изолированные ошибки сборки. - Отказ от глобального состояния — все операции сборки изолированы внутри структуры
BuildContext, обеспечивая многопоточную безопасность сборщика. - Вынос логики кэширования — проверка инкрементальных изменений, отслеживание заголовков (
#include) и вычисление хэшей сборки перенесено в изолированный модульsrc/core/build/cache.rs. - Модуляризация кастомных шагов — обработка этапа
build.stepsдля препроцессоров вынесена вsrc/core/build/steps.rs.
EN
Added:
- Dedicated Build Engine (
src/core/build/engine.rs) — decoupled the build orchestration logic completely from the CLI front-end wrapper insrc/cli/build.rsto a reusable, decoupled core build engine. - Polymorphic Language Model (
Languagetrait) — introduced the abstractLanguagetrait (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 (
Buildertrait) — introduced theBuildertrait to generalize builder invocations (src/core/build/builder/mod.rs). Consolidated GCC/Clang logic intobuilder/cc_common.rsand Microsoft Visual C++ logic intobuilder/msvc/. - Per-Language Configuration overrides (
[build.<lang>]) — introduced support for configuring language-specific compiler, standard, and flags (e.g.[build.c],[build.cpp],[build.asm]) independently indcr.toml. - Automatic Workspace Dependency Injection — during workspace builds, include/lib paths of dependent workspace members (including their source headers, local
include/folders, and build targettarget/include/target/libfolders) are automatically resolved and injected. BuildReporterEvent 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<AtomicBool>) 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., indcr add). - Path Dependencies Target Include Resolution — local path dependencies configured via tables now correctly expose headers built and packaged into their
target/includefolder to consumer packages. - Modular Integration Test Suite — refactored the monolith
tests/cli_basic.rsfile 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.rsmodule. - Workspace-Aware member execution —
dcr runexecuted at the workspace root of aworkspace_onlyproject now triggers the member build inside the workspace context using the--workspaceparameter, preventing standalone build issues. - Elimination of Global State — removed global variables and states from the build core, encapsulating build logic inside isolated
BuildContextstructs 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 "Qt Поддержка, Linting и Рефакторинг Архитектуры / Qt Support, Linting, & Architecture Refactor"
RU
Добавлено:
-
Нативная поддержка Qt — добавлена автоматическая обработка мета-объектов (MOC, UIC, RCC) при включении
build.qt = trueвdcr.toml. -
Команда
dcr lint— статический анализ C/C++ черезclang-tidy. Поддерживает--fixдля автоматического исправления. Уважаетbuild.rootsиbuild.src_disableиз конфига. -
Три новых ассемблерных бэкенда:
- MASM (
compiler = "ml"/"ml64") — Microsoft Macro Assembler. - FASM (
compiler = "fasm") — Flat Assembler. - LLVM IR (
compiler = "llc") — компиляция.ll→ объектный файл.
- MASM (
-
Общий ASM-пайплайн — линковка и архивирование вынесены в
core/builder/asm.rs. Новый ассемблерный бэкенд теперь пишется за ~30 строк. -
Утилиты для файловой системы —
to_hex()иhome_dir()вынесены вutils/fs.rs. -
Утилиты для сборки —
normalize_target(),normalize_kind(),normalize_platform(),default_profile_flags()вынесены вutils/build.rs. -
Утилиты для бэкендов —
asm_lang_flag(),source_extensions(),elapsed_secs()добавлены вcore/builder/common.rs. -
Полноценная автоматизация Bare-Metal / Freestanding — добавлен конфигурационный флаг
build.freestanding = true. При его включении (или при обнаружении bare-metal таргета) DCR автоматически инжектирует флаг-ffreestandingна этапе компиляции, а также-nostdlibи-staticна этапе линковки. -
Оптимизация артефактов (LTO и Strip) — в
dcr.tomlдобавлены параметрыbuild.lto(авто-инжекция флага-fltoдля компилятора и линкера) иbuild.strip(автоматическое отсекание отладочной информации через флаг-sлинкера). -
Контроль многопоточности сборки — добавлен параметр
build.codegen-units, позволяющий жестко ограничить максимальное количество параллельных потоков сборки для кастомного движкаparallel_build. -
Управление паникой (Panic Abort) — добавлен параметр
build.panic = "abort". Для C++ проектов он автоматически отключает генерацию таблиц раскрутки стека и исключений через флаги-fno-exceptions,-fno-unwind-tablesи-fno-asynchronous-unwind-tables.
Изменено:
- Интеллектуальные дефолтные флаги (DCR Defaults) — генерация дефолтных флагов оптимизации (
-O3/-O0), отладки (-g) и предупреждений (-Wall -Wextra) теперь автоматически отключается для bare-metal и freestanding целей, если пользователь переопределилbuild.cflags. - Глобальный вынос bare-metal детектора — функция
is_bare_metal_targetвынесена в общие утилитыsrc/utils/build.rsдля сквозного использования в конвейере сборки. - Рефакторинг архитектуры:
src/config.rsпереименован вsrc/templates.rs.- Начата консолидация конфигурационной логики и оркестрации сборки.
EN
Added:
-
Native Qt support — automatic meta-object handling (MOC, UIC, RCC) added when
build.qt = trueis set indcr.toml. -
dcr lintcommand — C/C++ static analysis viaclang-tidy. Supports--fixfor automatic fixes. Respectsbuild.rootsandbuild.src_disablefrom config. -
Three new assembler backends:
- MASM (
compiler = "ml"/"ml64") — Microsoft Macro Assembler. - FASM (
compiler = "fasm") — Flat Assembler. - LLVM IR (
compiler = "llc") — compiles.llfiles viallc -filetype=obj.
- MASM (
-
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()andhome_dir()extracted toutils/fs.rs. -
Build utilities —
normalize_target(),normalize_kind(),normalize_platform(),default_profile_flags()extracted toutils/build.rs. -
Backend helpers —
asm_lang_flag(),source_extensions(),elapsed_secs()added tocore/builder/common.rs. -
Full Bare-Metal / Freestanding Automation — introduced the
build.freestanding = trueconfiguration option. When enabled (or when a bare-metal target is detected), DCR automatically injects-ffreestandingduring compilation and both-nostdliband-staticduring linking. -
Artifact Optimization (LTO & Strip) — added
build.lto(auto-injects-fltofor compiler and linker) andbuild.strip(automatically strips debug symbols via linker-sflag) options todcr.toml. -
Compilation Thread Control — added the
build.codegen-unitsoption to strictly limit the maximum number of parallel jobs utilized by the customparallel_buildworker 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 ifbuild.cflagsare overridden. - Centralized Bare-Metal Detection — relocated the
is_bare_metal_targethelper to common build utilities (src/utils/build.rs) for unified access across the building core. - Architectural Refactoring:
- Renamed
src/config.rstosrc/templates.rs. - Started consolidation of configuration and build orchestration logic.
- Renamed
[0.7.3] - 2026-06-13 "Оптимизация Зависимостей и VCS / Dependency Optimization & VCS"
RU
Добавлено:
- Параметр
--vcsдля командnewиinit— добавлена возможность явно указывать систему контроля версий через--vcs <git|none>. - Интеграция Git-информации в
--version— утилита теперь выводит текущий короткий хэш коммита и суффикс-dirty, если в репозитории DCR есть незакоммиченные изменения. - Автоматическая генерация
.gitignore— при инициализации Git-репозитория автоматически создается файл.gitignoreс исключением директории/target. - Защита от вложенных репозиториев — автоматическая инициализация Git теперь пропускается, если
dcr newилиdcr initзапускаются внутри уже существующего Git-репозитория. - Тесты для верификации VCS — добавлены интеграционные тесты
new_vcs_options_workиinit_vcs_options_workдля проверки логики инициализации репозиториев.
Изменено:
- Полный отказ от библиотеки
git2— работа с Git (клонирование зависимостей, инициализация VCS, проверка статуса) переведена на вызовы системногоgitчерезCommand. Это облегчает сборку проекта и убирает необходимость в фичахvendoredиopenssl. - Миграция с
reqwestнаureq— в модуле обновления (flag_update.rs) тяжелыйreqwestзаменен на легковесный синхронный клиентureq 2.10, что уменьшило оверхед и размер итогового бинарника.
EN
Added:
--vcsoption fornewandinitcommands — introduced explicit version control system selection via--vcs <git|none>.- Git metadata integration in
--version— the CLI now appends the current short commit hash and a-dirtysuffix if there are uncommitted changes in the DCR repository. - Automatic
.gitignoregeneration — Git repository initialization now automatically writes a.gitignorefile excluding the/targetdirectory. - Nested repository prevention — automatic Git initialization is now skipped if
dcr newordcr initis executed inside an already existing Git repository. - VCS verification tests — added
new_vcs_options_workandinit_vcs_options_workintegration tests to ensure reliable repository behavior.
Changed:
- Complete removal of
git2dependency — all Git actions (dependency fetching, VCS setup, status checks) are now delegated to the systemgitexecutable viaCommand. This simplifies compilation and drops the need forvendoredandopensslfeatures. - Migrated from
reqwesttoureq— replaced the heavyreqwestcrate inflag_update.rswith the lightweight synchronousureq 2.10client, reducing overhead and the final binary size.
[0.7.2] - 2026-06-07 "Исправление Таргетов и Линковки / Target & Linker Fixes"
RU
Добавлено:
- Учтён
target_envвdefault_target_triple()— Linux (gnu/musl) и Windows (msvc/gnu) теперь используют правильное окружение, а не хардкод.
Исправлено:
- Сборка на macOS Apple Silicon падала с
_mainundefined —--target=теперь передаётся и в ldflags, не только в cflags.default_target_triple()на macOS используетstd::env::consts::ARCHвместо хардкодаx86_64. - Бейджи GitHub Stars и GPL-3.0 не рендерились в README — блок бейджей переведён на чистый HTML.
Изменено:
- Вычисление таргета по умолчанию вынесено в общую функцию
default_target_triple()— устранено дублирование в build, run, clean.
EN
Added:
default_target_triple()now respectstarget_env— Linux (gnu/musl) and Windows (msvc/gnu) use the correct environment instead of hardcoded values.
Fixed:
- macOS Apple Silicon builds failed with
_mainundefined —--target=is now passed to ldflags, not just cflags.default_target_triple()usesstd::env::consts::ARCHon macOS instead of hardcodedx86_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 "Мультиархитектурное расширение / The Multi-Arch Expansion"
RU
Добавлено:
- Вывод
--helpдля всех команд с цветным форматированием. - man-страницы (12 штук в
man/man1/) и их установка во всех пакетах. - Валидация имен проектов в
dcr initиdcr new(только ASCII буквы, цифры,_и-). - Метаданные
documentationиhomepageвCargo.toml. - Оптимизация сборки:
opt-level = "z", LTO,codegen-units = 1,panic = "abort",strip = true. - Поддержка новых архитектур (i686, armv7, riscv64gc, aarch64) в рабочих процессах и установочных скриптах.
- Сборка пакетов
debиrpmдля всех 5 архитектур Linux черезcargo-zigbuild. - Пакеты AUR (
dcr-dev,dcr-dev-bin) и сборка Snap в CI.
Изменено:
- Функция
validate_package_nameстала публичной. - Команды
gen,tree,fmt,setupбольше не игнорируют аргументы и используют цветной вывод. - Инструкция в README изменена с
| bashна| shдля POSIX. - Отключена архитектура Windows 32-bit (GNU) из-за проблем со сборкой.
Исправлено:
dcr new <invalid-name>создаёт директорию, затем падает — валидация теперь происходит до операций с файлами.dcr initсоздаёт dcr.toml, затем падает при невалидном имени директории — то же исправление.- Man-страницы отсутствовали после установки — теперь устанавливаются через скрипты установки, пакетные менеджеры и Homebrew.
- Ложное срабатывание на букву диска в Windows — в парсинге файлов зависимостей.
- CRLF
\r\nломает парсер зависимостей — теперь обрабатываются смешанные окончания строк. - Новая строка после обратного слеша не поглощалась — в обработке escape-последовательностей
parse_d_file.
EN
Added:
--helpfor all commands with styled headers and usage lines.- Man pages (12 troff man pages in
man/man1/) and their installation across all packaging formats. - Project name validation in
dcr initanddcr new(ASCII letters, digits,_,-only). documentationandhomepagemetadata inCargo.toml.- Release profile optimizations (
opt-level = "z", LTO,codegen-units = 1,panic = "abort",strip = true). - Linux i686, armv7, riscv64gc, aarch64 architecture support in release workflows and installation scripts.
- Multi-arch
debandrpmpackage builds for all 5 Linux architectures viacargo-zigbuild. - AUR packages (
dcr-dev,dcr-dev-bin) and Snap build in CI.
Changed:
validate_package_namemade public and callable from CLI commands directly.gen.rs,tree.rs,fmt.rs,setup.rsno longer ignore arguments and use styled output.- README install instructions changed from
| bashto| shfor POSIX compatibility. - Disabled Windows 32-bit (GNU) target due to build issues.
Fixed:
dcr new <invalid-name>creates directory then fails — validation now happens before any file operations.dcr initcreates dcr.toml then fails on invalid directory name — same fix.- Man pages missing after installation — now installed via install scripts, package managers, and Homebrew.
- Windows drive letter false positive — in dependency file parsing.
- CRLF
\r\nbreaks dependency parser — now handles mixed line endings. - Newline after backslash not consumed — in
parse_d_fileescape handling.
[0.7.0] - 2026-06-02
Added:
- OpenBSD and NetBSD target support — full platform routing with dynamically generated target triples using
std::env::consts::ARCHandstd::env::consts::OS. Affectsbuild,run,clean, and the platform module. src/platform/bsd.rs— new dedicated BSD platform module shared by FreeBSD, OpenBSD, NetBSD, providingbin_path,lib_path,elf_path,efi_path, andshared_lib_path.build.out_dirconfiguration option — custom output directory that overrides the defaulttarget/<triple>/<profile>path for final artifacts. Supported inbuild,run, and config validation.dcr fmtcommand — new CLI command that formats all C/C++ source files (*.c,*.cpp,*.h,*.hpp) insrc/andtests/usingclang-format.- Incremental linking —
needs_link()function incommon.rsthat checks whether any object file is newer than the linked output, skipping unnecessary re-linking. Implemented for all backends (unix_cc,msvc,gas,nasm). build.kind = "none"and"custom"— two new project kind types for special build scenarios where no standard artifact is produced.install_bsd.sh— dedicated POSIX-compliant install script for BSD systems (FreeBSD, OpenBSD, NetBSD) with binary download and source build modes.- Linux ARM64 support in
install.sh— addedLinux:aarch64|Linux:arm64target triple detection for pre-built binary downloads. - BSD OS detection in
install.sh— FreeBSD, OpenBSD, NetBSD detection and target triple resolution. rust-toolchain.toml— explicitstablechannel toolchain pinning.- Nix support —
flake.nixfor Nix package manager. Run vianix run github:dexoron/dcror install withnix profile install github:dexoron/dcr. Contributed by community contributor. - Snapcraft publish —
dcruppublished on Snapcraft. Install withsudo snap install dcrup. - Integration tests —
build_with_target_config(verifiesbuild.target = "linux") andbuild_with_out_dir(verifies custom output directory). get_build_string_with_profilemadepub— sorun.rscan resolve custom output directory configuration.
Changed:
build.targetsemantics changed — now strictly holds the target triple (e.g.x86_64-unknown-linux-gnu) or a short name (linux,macos,windows). No longer doubles as a custom output directory — that functionality moved tobuild.out_dir.build.standardmade optional — changed fromStringtoOption<String>. Validation only enforces non-empty for non-ASM languages. Skipped indcr.tomloutput when empty.dcr runwithout_dir— now resolves target directory respectingbuild.out_dirwhen configured, viaget_build_string_with_profile()frombuild.rs.collect_sources()returns empty vec instead of error when no source files are found, allowingkind = "none"orkind = "custom"projects to have no source files.- CI/CD release workflow refactored —
git2made target-specific (no vendored-openssl on Windows), Zig-based cross-compilation for non-x86_64 Linux targets, Arch Linux package version sanitization (dashes → dots), NetBSDgmakesymlink. - README compatibility table — FreeBSD, OpenBSD, NetBSD build/runtime status upgraded from community/best-effort to officially supported.
- Documentation rewritten — available at dcr.dexoron.su/docs or in the
docs/directory. Installation guides, commands, and reference updated to reflect current CLI and config format. - Site rewritten —
dcr-sitemigrated to Docusaurus with internationalization (i18n) support, improved navigation, and updated content across all sections. - Dev channel dependency check in
install.sh— checks forpython3orjqbefore attempting dev channel installations.
Fixed:
dcr runstdout/stderr not inherited — child process output was captured and manually printed, breaking interactive programs. Fixed by switching toCommand::status().- Release CI race condition — build matrix jobs could upload assets to a release that did not yet exist. Fixed by adding a dedicated
create-releasejob. - GHA release — stable toolchain override — resolved Rust toolchain override issues in CI.
- Arch Linux package version sanitization — version strings with dashes (e.g.
0.7.0-dev) are invalid for Arch Linuxpkgver. Fixed by replacing dashes with dots. - GPG permissions after Docker — Docker operations changed GPG directory ownership. Fixed by running
chownafter Docker commands. - RPM package artifact paths — RPM artifacts placed under
rpm/x86_64/instead offedora/x86_64/. Corrected in Dexoron Packages Index workflow. install.shJSON parsing robustness — addedjqas primary parser withpython3fallback for dev channel release lookups.
Removed:
format_roots()helper — removed fromcommon.rs. Was only used by the old error path incollect_sources().- Individual per-distro artifact download steps — three separate
actions/download-artifactsteps replaced with unifiedgh release download --clobber.
[0.6.9] - 2026-05-28
Added:
-
Dexoron Packages Index — new standalone CI workflow (
.github/workflows/dexoron-packages-index.yml) that automatically updates thedexoron/packagesrepository indexes after a release. Supports Arch Linux (repo-add), Debian (dpkg-scanpackages), and Fedora (createrepo_c). Triggered byworkflow_dispatchorworkflow_runon the Release workflow. -
Arch Linux native package (
.pkg.tar.zst) build inside the release workflow — builds from source in anarchlinux:latestDocker container using a dynamically generated PKGBUILD. -
AUR publish support — new
run_aurworkflow dispatch input andpublish-aur/publish-aur-binjobs that push PKGBUILD /.SRCINFOtoaur.archlinux.org.
Changed:
-
Release workflow refactored — Linux packages (deb, rpm, snap, arch) and BSD builds now use
strategy.matrixinstead of separate jobs. A newpublish-dexoron-packagesjob collects all package artifacts and uploads them to the GitHub Release in one step. Removed standalonebuild-arch-package,build-snap,build-deb-rpmjobs. The oldrun_arch_nativeinput is nowrun_linux_packages. -
Dexoron Packages Index workflow extracted from
release.ymlinto its own file with support for Debian and RPM repository indexes in addition to Arch. -
git2 vendoring — enabled
vendored-libgit2andvendored-opensslfeatures for reproducible CI builds without system libraries. -
cargo-generate-rpm metadata — updated to the current
package.metadata.rpmformat (usesfilestable instead ofassetsarray).
Fixed:
-
--target=<triple>no longer passed to GCC — the flag is now only injected into cflags when the resolved compiler name contains"clang". GCC rejects this flag withunrecognized command-line option. -
Workspace clean test — removed assertions for member-local
target/directories. Workspace members share the roottarget/directory, so their individualsrc/<name>/target/is never created. -
Release build test path — corrected expected directory from
target/releasetotarget/x86_64-unknown-linux-gnu/release.
[0.6.8] - 2026-05-27
Added:
-
build.cxx_standard— separate C++ language standard for.cpp/.cxx/.ccfiles. When set, overridesbuild.standardfor C++ sources. Example:[build] language = ["c", "c++"] standard = "gnu11" cxx_standard = "gnu++17" -
Variable substitution for
cflags,ldflags, andincludedirectory entries. All{version},{version_major},{name},{profile}and other step variables are now available. Example:[build] cflags = ['-DPROJECT_VERSION="{version}"'] -
FreeBSD build support in CI — new
run_bsdworkflow input andbuild-bsdjob that cross-compilesx86_64-unknown-freebsdviacargo-zigbuild.
Changed:
- License changed from MIT to GPL-3.0-or-later. All source files now carry
the GPL-3.0 header. Default license in
dcr new/dcr initchanged to"GPL-3.0-or-later". README, FAQ, and CONTRIBUTING.md updated accordingly. get_list_with_profile_and_targetno longer duplicates list values wheninherit = trueand the profile/target value is identical to the base value.
Fixed:
- Multi-language
languagearray (e.g.["c", "c++", "asm"]) no longer dropsc++during internal parsing —.cxx/.cpp/.ccsource files are correctly discovered and compiled. -std=flag is no longer passed to C++ files when onlystandard(C standard) is configured — usescxx_standardwhen available, otherwise skips-std=for C++ sources, avoiding clang errorinvalid argument '-std=c11' not allowed with 'C++'.- Object file collision: source files with the same stem but different extensions
(e.g.
gdt.cxxandgdt.S) no longer overwrite each other. Object filenames now include the original source extension (e.g.gdt.cxx.o,gdt.S.o). - MSVC backend compile step now detects language per source file extension instead
of using the global
languagefield, fixing mixed C/C++ compilation with MSVC. - Assembler
-xflag inunix_cc.rsandgen.rsis now placed before the source file, as required by clang/gcc. {version}variables inbuild.cleanare now correctly substituted.
[0.6.7] - 2026-05-26
Added:
-
build.kind = "efi"— UEFI PE32+ executable support. Links with-shared -nostdlib -Wl,-dll -Wl,--subsystem,10, output viaefi_path()with.efiextension, rejected bydcr run. -
build.kind = "elf"— bare-metal ELF executable support. Useself_path()output path, rejected bydcr run, no extra linker flags. -
build.filenameandbuild.extensionindcr.toml— complete control over the final artifact name without relying onpackage.name. Example:[build] filename = "KERNEL" extension = "EFI"Produces
KERNEL.EFI(works forbin,staticlib, andsharedlib). -
Automatic injection of
--target=<build.target>into compiler flags whenbuild.targetis set indcr.toml. This greatly simplifies clang-based cross-compilation (especially for bare-metal targets likeaarch64-none-elf). -
Bare-metal targets (containing
none,-elf,eabi,baremetal) no longer receive DCR's internal default flags (-g,-Wall,-Wextra,-fno-omit-frame-pointer,-DDCR_DEBUG, etc.). Prevents unwanted sections (.comment, debug info, etc.) that break custom linker scripts wheninherit = true. -
build.ldscriptindcr.toml— linker script path passed as-T <path>to the linker. Essential for bare-metal/embedded/freestanding targets. -
dcr build --verbose— prints compiler/linker command lines (also works withDCR_DEBUGenv var). -
dcr add <name>without a source argument — if a registry is configured, DCR looks up the package by name and adds it as a version dependency.
Fixed:
build.targetdeclared indcr.tomlis now correctly used as the default target even when--targetis not passed on the command line (previously the host target was always forced for config resolution).dcr runwith--targetorbuild.targetnow correctly finds the binary in the arch-specific target directory.dcr runchecks profile-specificbuild.{profile}.kindbefore rejecting library builds (previously only checkedbuild.kind).dcr cleannow readsbuild.targetfromdcr.tomlwhen no--targetflag is given.- Linux: target directory is now consistent —
target/<arch>-unknown-linux-gnu/<profile>/(no staletarget/<profile>/). dcr.lockis now populated with all resolved dependencies (registry, path, git) instead of being always empty.- Git dependencies are now properly recognized and recorded in
dcr.lock. is_registry_depcorrectly identifies version-based registry dependency tables ({ version = "..." }) and rejects tables with unknown keys.dcr testaccepts--debug/--releaseflags (defaults todebugprofile instead of alwaysrelease).- Build fingerprint cache (
build_cache_path) now includestarget_dir— different targets no longer share a single cache entry. object_pathno longer hardcodes thesrc/prefix — works correctly with custombuild.roots(e.g.roots = ["lib"]).dcr updatenow generates.execandidates for all Windows targets, not justx86_64-pc-windows-msvc.- Compiler existence is verified before starting the build (clear error if compiler is not found in PATH).
- Consolidated duplicate
OUTPUT_MUTEXdefinitions — MSVC backend now uses the shared mutex fromcommon.rs. - Registry cache root directory is created if missing (prevents cryptic errors when
~/.dcr/does not exist).
Changed:
openssldependency is now conditional (cfg(not(windows))) — no longer pulled in on Windows, fixing Windows CI builds that lack PerlLocale::Maketext::Simple. On Linux (including musl cross-compilation) the vendored OpenSSL build is unchanged.
[0.6.6] - 2026-05-18
Fixed:
- Path dependencies now work correctly:
dcr addstores them as{ path = "./..." }tables,is_registry_depproperly distinguishes registry strings from path/git strings, anddeps/mod.rsresolves both table-form and legacy string-form path dependencies - Registry dependency paths no longer hardcoded to
project_root/dcr-index; now usepackage_root_from_registry_info()which resolves relative to the registry cache root (~/.dcr/) - Registry dependencies are now actually built:
build_project_at()is called wheninclude_dirorlib_diris missing
Added:
SIGINT/Ctrl+Chandler viactrlccrate —dcr buildnow checksBUILD_INTERRUPTEDflag at key points and aborts cleanlyutils/build.rs— extracted shared utilities:parse_version_info,normalize_target_os,resolve_compiler,primary_language,resolve_pkg_config_flagsand config helpers. Eliminates code duplication betweencli/build.rs,cli/run.rs,cli/clean.rs,cli/gen.rsutils/fs.rs::with_dir— extracted common directory-scoped executionrun_command_sync_outputinbuilder/common.rswith globalOUTPUT_MUTEX— synchronized compiler output across all backends (unix_cc, gas, nasm, msvc)- New helper functions in
deps/register.rs:get_registry_cache_root,package_root_from_registry_info,registry_include_dir,registry_lib_dir,path_from_string_dep - Unit tests for
register.rs(is_registry_dep,package_root_from_registry_info),deps/mod.rs(path_dep_path,push_default_lib_dirs),utils/build.rs(normalize_target_os,parse_version_info) dcr treecommand — visual dependency tree viewer (similar tocargo tree)
Removed:
- Removed unused dependencies
indicatifandconsolefromCargo.toml
[0.6.5] - 2026-05-13
Added:
- New dependency registry system
- Package type support (
lib,app,none) indcr.toml - Library packaging functionality: automatically generates
includeandlibdirectories intarget/forlibtype projects - Expanded CI build targets:
- Linux:
aarch64-unknown-linux-gnu,x86_64-unknown-linux-musl,aarch64-unknown-linux-musl - Windows:
aarch64-pc-windows-msvc,x86_64-pc-windows-gnu,aarch64-pc-windows-gnullvm
- Linux:
Changed:
src/core/deps/modular architecture overhaul- Native platform pathing defaults for Linux (now dynamic architecture detection)
- Improved
runcommand output handling
[0.6.0] - 2026-05-12
Added:
- Full Git dependency support in
dcr.toml- Support for
git,branch,tag, andrevfields - Automatic cloning and checkout via
git2 - Dependencies are stored in
target/<profile>/deps/git/
- Support for
- New
dcr addcommand for easy dependency management- Short syntax:
github:user/repo,gitlab:user/repo,path:/to/lib - Automatic GitHub resolution for
git:user/repo
- Short syntax:
- Visual feedback for dependency fetching with in-place status updates ("Fetching" → "Fetched")
- Modular dependency management architecture in
src/core/deps/
[0.5.1] - 2026-04-12
Fixed:
- Windows compatibility for target-specific config without --target flag
Added:
- Default host target detection for automatic target overrides
- Unit tests for target normalization
Improved:
- Config value lookup optimization
- Documentation for Windows cross-compilation
[0.5.0] - 2026-04-10
Added:
- Full inheritance system for all config sections:
build,toolchain,run,workspace,dependencies- Order:
section.target.profile→section.profile.target→section.target→section.profile→section inherit = falseto disable inheritance completely- Target-specific overrides:
[build.linux],[toolchain.windows],[run.macos], etc.
- Order:
- Cross-compilation support with
--target <triple>- Full target triples and short names (
linux,macos,windows) - Target-specific config sections:
[build.<target>],[toolchain.<target>],[run.<target>]
- Full target triples and short names (
- Workspace and dependencies support target/profile inheritance
- Multiple targets build:
[build.targets]to build for multiple targets simultaneously - Target directory structure:
target/<target>/<profile>/(native or triple) - Updated documentation with cross-compilation guide and Arch Linux examples
[0.4.0] - 2026-04-10
Added:
- Test command:
dcr testanddcr tests- Automatic compilation and linking for tests without manual configuration
dcr test --initcreates test template and header- Test framework with EXPECT/SKIP macros in
dcr_test.h
- Improved test integration: added test CLI module and basic test suite
- Documentation updates for testing functionality
[0.3.0] - 2026-03-18
Added:
dcr gencommand for IDE integration and build tool support-
dcr gen project-info: Output project metadata as JSON
-
dcr gen compile-commands: Generatecompile_commands.jsonfor clangd and clang-tidy
-
dcr gen vscode: Generate VS Code.vscode/integration (launch.json, tasks.json, settings.json)
-
dcr gen clion: Generate JetBrains CLion.idea/integration (run configurations, build targets)
- Full workspace support for all
gensubcommands
[0.2.10] - 2026-03-16
Added:
build.stepsfor pre-build generators (e.g.,moc/uic/rcc)build.pkg_configforpkg-config-driven cflags/ldflags resolution[toolchain]support foruic,moc,rcc- Step command variables (
{uic},{moc},{rcc},{cflags},{stem},{in},{out}) {profile}placeholder support for dependency paths
[0.2.9] - 2026-03-14
Added:
- Header dependency tracking for fine-grained incremental builds (rebuilds when
#includefiles change) - Complete internal rewrite of the builder module: merged duplicate compilation backends
Changed:
cflagsanddefault_flagsno longer incorrectly leak to the linker stage in GCC/Clang- Reduced builder codebase size by over 20% while increasing reliability
- Greatly expanded test suite with 34 new tests covering configuration, CLI errors, and path operations
[0.2.8] - 2026-03-06
Added:
- Workspace support (
[workspace]with deps ordering) clean --allfor workspace members Changed:- Project root discovery for
build/run/clean(searches parent dirs) - Workspace paths are excluded from root source scan
- Build output now uses a Cargo-style
Compiling <name> v<version>line - Build time now reports total time for the whole build stage (workspace included)
- Cache hits are silent (no compile line when nothing is rebuilt)
- Safer build cache: fingerprints include headers and resolved library files
[0.2.7] - 2026-03-03
Added:
- Toolchain overrides via
[toolchain]and env (DCR_*) - ASM
.Spreprocessing via GCC/Clang (-x assembler-with-cpp)
[0.2.6] - 2026-03-01
Added:
sharedlibbuild kind (shared library output)- ASM projects (
build.language = "asm") - NASM and GAS backends
build.platformarchitecture hint for-march//arch- Basic CLI integration tests
[0.2.5] - 2026-02-26
Added:
- Incremental builds (object caching by mtime)
build.kindwithstaticlibsupport- Custom output directory via
build.target
[0.2.4] - 2026-02-22
Added:
- Custom build flags:
build.cflagsandbuild.ldflags - Recursive source discovery inside
src/ - Path dependencies with auto include/lib resolution and
dcr.lockgeneration (experimental) - Add docs/index.md and docs/dcr-toml.md
[0.2.3] - 2026-02-21
Added:
- Modular builders for
gcc,clang,msvc - Platform-specific binary path generation (Linux/macOS/Windows)
Changed:
- Build configuration moved to
[build](language,standard,compiler) dcr.tomlformatting now includes the[build]section- Build uses built-in
debug/releaseflags per compiler - Build compiles all
*.c/*.cppfiles insrc/into a single binary (no incremental build) - Updated
dcr.tomlexamples in documentation
[0.2.2] - 2026-02-20
Changed:
- Reworked
dcr.tomlhandling: added read, validation, and edit throughcore::config newandinituse the new config creation logicbuildandrunnow requiredcr.tomland readcompilerandnamefrom it
[0.2.1] - 2026-02-18
Changed:
- Translated user-facing CLI messages to English
- Unified error and warning output via
utils::log::{error, warn} - Updated
--helpoutput: translated headers and examples to English, usedprintc, and appliedBOLD_*styles - Translated installer script messages in
install.shandinstall.ps1to English
[0.2.0] - 2026-02-17
Changed:
- Project migrated from Python to Rust
- CLI and commands (
new,init,build,run,clean,--help,--version,--update) ported to Rust - Updated
--updateflag: added support for GNU/Linux, Windows, macOS - Updated
README.md,CONTRIBUTING.md, andinstall.shfor the Rust implementation - Added
install.ps1for Windows - Updated
install.shfor GNU/Linux and macOS
Added:
- Added
install.ps1for Windows - Support for GNU/Linux, Windows, macOS (x86_64/arm)
Important:
- Code was ported with neural networks; future versions will include bug fixes and logic changes
[0.1.2] - 2026-02-12
Added:
- Update command
install.shinstall script and README instructions--versionflag
Changed:
- Improved CLI output, added colors, and updated
--help - Updated project run/build handling in
run.py/build.py
[0.1.1] - 2026-02-11
Changed:
- Updated
--help main.pynow runs correctly when executed directly
[0.1.0] - 2026-02-11
First public release.
Added:
- Base commands
new,init,build,run,clean - Build profiles
debugandrelease dcr.tomlandsrc/main.ctemplates