I think my cross-compile LDC is fine.
I tried to build this D program:
/// loire.d
int main()
{
return 42;
}
However, the run-time is not (neither is phobos), most of the
linker issues come from the druntime. So...
I wrote my own druntime. Here's the code:
/// dummyruntime.d
// from rt/sections_elf_shared.d, probably don't need it right
now...
extern(C) void _d_dso_registry(void* data)
{
}
// from rt/dmain2.d, just call my D main(), ignore args...
private alias extern(C) int function(char[][] args) MainFunc;
extern (C) int _d_run_main(int argc, char **argv, MainFunc
mainFunc)
{
return mainFunc(null);
}
I built everything:
# Compilation
./bin/ldc2 -mtriple=arm-none-linux-gnueabi -c loire.d
./bin/ldc2 -mtriple=arm-none-linux-gnueabi -c dummyruntime.d
# Link
/opt/arm-2009q1/bin/arm-none-linux-gnueabi-gcc loire.o
dummyruntime.o -o loire
And I ran it successfully on my ARM target:
$> loire
$> echo $?
42
So now I know I have a proper LDC cross-compiler! :)
I'm jut missing a proper druntime and phobos for GNU/Linux ARM.