Proposal: configuration for cross compilation

Kai Nacke via digitalmars-d-ldc digitalmars-d-ldc at
Mon May 5 03:37:30 PDT 2014

Hi all!

More and more people use LDC to cross-compile for other 
architectures. But end-to-end support is still missing. At least 
some basic tools and libraries differ: C compiler/assembler, 
linker, default druntime and phobos libraries.

Thinking about a solution, I came up with the following proposal. 
Currently, the config file is only used to define some command 
line switches. This can be extended to do a multi-level lookup 

- definitions for tools (compiler, linker) and libraries 
(druntime, phobos)
- additional definitions for each target (command line switched, 

The lookup would sue the triple. The lookup order would be triple 
including environment, triple without environment, os only and 
default. The first entry matched is used. The config file would 
look like:

### Start of ldc2.conf
     cc = gcc
     cctype = gnu
     ld = gcc
     ldtype = gnu
     switches = [ ... ]
     defaultlib = ...
     debuglib = ...
     linklibs = rt dl pthread m

     cc = clang
     linklibs = pthread m

     cc = cl
     cctype = ms
     ld = link
     ldtype = ms
     linkswitches = /NXCOMPAT /DYNAMICBASE
     linklibs = kernel32.lib user32.lib gdi32.lib

     cc = arm-unknown-linux-gnu-gcc
     ld = arm-unknown-linux-gnu-gcc

     cc = mips64-unknown-linux-gnu-gcc
     ld = mips64-unknown-linux-gnu-gcc
### End of ldc2.conf

E.g. compiling for Linux/MIPS64 (-mtriple=mips64-linux) would 
result in use of mips64-unknown-linux-gnu-gcc. Compiling for 
FreeBSD would use clang (because this is the default compiler in 
release 10). Default configuration is to use gcc for 

What do you think? Does this scheme cover the common cases 
encountered with cross compilation?


More information about the digitalmars-d-ldc mailing list