mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-21 16:59:42 +00:00
- Toolchain overrides via `[toolchain]` and env (`DCR_*`) - ASM `.S` preprocessing via GCC/Clang (`-x assembler-with-cpp`)
2.1 KiB
2.1 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. - Each source is compiled to
target/<profile>/obj/<relative-path>.o(.objon MSVC). - Recompile happens when source mtime is newer than object mtime.
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 -DDEBUGrelease:-O3 -DNDEBUG -march=native
MSVC:
debug:/Od /Zi /W4 /DDEBUG /Oy-release:/O2 /DNDEBUG
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)
Environment overrides (highest priority):
DCR_COMPILER(all languages)DCR_CC,DCR_CXX,DCR_AS,DCR_AR,DCR_LD
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.