mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-21 17:29:36 +00:00
- `build.kind = "efi"` — UEFI PE32+ executable support. Links with `-shared -nostdlib -Wl,-dll -Wl,--subsystem,10`, output via `efi_path()` with `.efi` extension, rejected by `dcr run`.
- `build.kind = "elf"` — bare-metal ELF executable support. Uses `elf_path()` output path, rejected by `dcr run`, no extra linker flags.
Fixed:
- `dcr run` with `--target` or `build.target` now correctly finds the binary in the arch-specific target directory.
- `dcr run` checks profile-specific `build.{profile}.kind` before rejecting library builds (previously only checked `build.kind`).
- `dcr clean` now reads `build.target` from `dcr.toml` when no `--target` flag is given.
- Linux: target directory is now consistent — `target/<arch>-unknown-linux-gnu/<profile>/` (no stale `target/<profile>/`).
- `dcr.lock` is 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_dep` correctly identifies version-based registry dependency tables (`{ version = "..." }`) and rejects tables with unknown keys.
- `dcr test` accepts `--debug`/`--release` flags (defaults to `debug` profile instead of always `release`).
- Build fingerprint cache (`build_cache_path`) now includes `target_dir` — different targets no longer share a single cache entry.
- `object_path` no longer hardcodes the `src/` prefix — works correctly with custom `build.roots` (e.g. `roots = ["lib"]`).
- `dcr update` now generates `.exe` candidates for all Windows targets, not just `x86_64-pc-windows-msvc`.
- Compiler existence is verified before starting the build (clear error if compiler is not found in PATH).
- Consolidated duplicate `OUTPUT_MUTEX` definitions — MSVC backend now uses the shared mutex from `common.rs`.
- Registry cache root directory is created if missing (prevents cryptic errors when `~/.dcr/` does not exist).
3.2 KiB
3.2 KiB
dcr build
Builds the project in debug or release profile.
Usage
dcr build
dcr build --debug
dcr build --release
dcr build --target linux --release
dcr build --release --force
dcr build --debug --clean
What build does
- Checks that
dcr.tomlexists and is valid. - Reads build settings from
[build]. - Resolves path dependencies from
[dependencies]. - Creates required output directories.
- Recursively compiles sources from
src/. - Links final artifact (binary or library).
Config values used
package.namebuild.filenamebuild.extensionbuild.compilerbuild.languagebuild.standardbuild.kindbuild.targetbuild.platformbuild.cflagsbuild.ldflagsbuild.ldscriptbuild.debug/build.releasebuild.excludebuild.includebuild.pkg_configbuild.stepsbuild.post_stepsbuild.generatedbuild.expectbuild.clean
Source selection
language = "c"->*.clanguage = "c++" | "cpp" | "cxx"->*.cpp,*.cxx,*.cclanguage = "asm"->*.s,*.S,*.asm- Mixed languages are supported with arrays, for example
language = ["c", "asm"]. - By default sources are searched in
src/; usebuild.rootsandbuild.src_disableto override.
Notes
- Profile flag (
--debug/--release) can appear in any argument position (duplicates are rejected). - Unknown profile flags return an error.
--target <triple>builds for specified target (short names:linux,macos,windows).--verboseprints the compiler/linker command lines to stderr (also works viaDCR_DEBUGenv var).- If no
--target, builds forbuild.targetsor native. - Incremental rebuild checks source/object mtime and tracked header dependencies.
--forceskips build cache checks and recompiles.--cleanremovestarget/<profile>andbuild.cleanpaths before building.build.filename+build.extensionallow full control over the final artifact name (e.g.KERNEL.BINinstead of usingpackage.name). Whenbuild.kind = "efi", the output is a PE32+ executable with.efiextension.build.kind = "efi"links with-shared -nostdlib -Wl,-dll -Wl,--subsystem,10for UEFI PE32+ format. Usebuild.filenameandbuild.extensionfor full control over the artifact name.build.kind = "elf"produces a bare-metal ELF executable. Linking flags are user-controlled viabuild.ldflags(no PIE/CRT defaults are added).- Default GCC/Clang profile flags:
debug->-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG,release->-O3 -DNDEBUG. These defaults are not applied for bare-metal targets (e.g.aarch64-none-elf, targets containingnone/-elf/eabi). - For
language = "asm"withcompiler = "as"/"gas", use.sfiles (no preprocessing). For.S, usegccorclang. - In workspace root,
dcr buildbuilds all members in dependency order. build.excluderemoves paths from source/header collection;build.includere-allows matching paths and has priority overexclude.build.stepsrun before compilation;build.post_stepsrun after linking.build.generatedis cleaned whenbuild.stepsneed to rerun;build.expectis verified after post-steps.