mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-21 13:38:30 +00:00
- Updated build and run commands to accept a --target option for specifying target platforms. - Enhanced documentation to include cross-compilation usage and supported targets. - Modified configuration to allow target-specific settings and toolchains. - Introduced a new test command to run project tests with specified profiles and targets. - Improved handling of target directories and output structure for different platforms. - Added support for multiple targets in the configuration file. - Implemented inheritance for workspace and dependencies based on target and profile.
2.6 KiB
2.6 KiB
Compilers & linking
Compiler backend selection
DCR picks a backend from build.compiler:
- contains
clang-cl-> MSVC backend - equals
asor containsgas-> GAS backend (standalone assembler) - contains
gccorg++-> GCC backend - contains
clangorclang++-> Clang backend - equals
clor containsmsvc-> MSVC backend - contains
nasm-> NASM backend - otherwise -> Clang backend fallback
Compilation model
- Source files are found recursively in
src/based onbuild.language. build.rootsandbuild.src_disablecan replace the defaultsrc/root.- Mixed language builds use arrays, for example
build.language = ["c", "asm"]. - Each source is compiled to
target/<target>/<profile>/obj/<relative-path>.o(.objon MSVC, where<target>isnativeor target triple). - Recompile happens when source mtime is newer than object mtime.
build.excluderemoves paths from source/header collection;build.includere-allows matching paths and has priority overexclude.
Default build flags
These flags are applied automatically based on profile and compiler backend.
GCC/Clang:
debug:-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUGrelease:-O3 -DNDEBUG
MSVC:
debug:/Od /Zi /W4 /DDCR_DEBUG /Oy-release:/O2 /DNDEBUG
Note: If custom cflags are set in dcr.toml, default profile flags are disabled to allow full control.
Platform hint
If build.platform is set, DCR passes it as an architecture hint:
- GCC/Clang:
-march=<platform> - MSVC: maps to
/arch:*for known values (x86,i386,i486,i586,i686,sse2,avx,avx2)
Toolchain overrides
If [toolchain] is set, DCR uses its values to override compiler/linker tools:
cc,cxx,asoverride compilers for C/C++/ASMaroverrides the archiver (used forstaticlib)ldoverrides the linker (used by GCC/Clang/NASM/GAS backends)uic,moc,rccoverride Qt tools used inbuild.steps
Environment overrides (highest priority):
DCR_COMPILER(all languages)DCR_CC,DCR_CXX,DCR_AS,DCR_AR,DCR_LDDCR_DEBUGenables verbose build logging
Linking
For kind = "bin":
- Object files are linked into executable artifact.
- Dependency lib dirs and library names are passed to linker.
build.ldflagsare appended to link command.
For kind = "staticlib":
- Linux/macOS (GCC/Clang):
ar rcscreates.aarchive. - Windows (MSVC):
libcreates.libarchive.
For kind = "sharedlib":
- Linux (GCC/Clang):
-sharedwith output.so. - macOS (Clang):
-dynamiclibwith output.dylib. - Windows (MSVC):
/LDwith output.dll.