mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-21 13:28:30 +00:00
- `sharedlib` build kind (shared library output) - ASM projects (`build.language = "asm"`) - NASM and GAS backends - `build.platform` architecture hint for `-march` / `/arch` - Basic CLI integration tests
1.7 KiB
1.7 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)
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.