gdc frontend for other platforms

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Sat Mar 17 04:20:15 PDT 2007


Graham wrote:
> I understand that gdc is a gcc frontend which supports various 
> platforms.  What would it take to have it compile code for PSP 
> (http://wiki.ps2dev.org/psp:toolchain) or for PS3?  (Assuming no garbage 
> collection for simplicity - incidentally - what would it take to have 
> garbage collection also?)

For one thing, it would require a GCC backend capable of compiling for 
it. Since the PSP SDK mentioned on that page seems to be GCC-based, this 
shouldn't be a problem.

The next step would be to make sure the GDC frontend is compatible with 
that backend (Is it even possible for it to be incompatible? I have no 
idea).

Then you compile a cross-compiler for PSP, with the appropriate GDC 
patch applied (and --enable-languages=d specified to configure). This 
may be a bit more tricky since getting a working cross-compiler with GDC 
isn't quite as easy as it should be IIRC.
I do seem to recall David Friedman saying that fixing this was one of 
the goals that should be accomplished before he would release a GDC 1.0, 
so I presume he's working on it.

If you do get a working cross-compiler up and running, you then need to 
port the runtime library. I haven't looked into gphobos much, but DMD's 
phobos on which it's based has a tendency to make non-portable 
assumptions. I have noticed that gphobos has some changes to fix this, 
but I'm not sure how far this goes. It may work as-is, or it may require 
some extra fixes.

To get GC working (the GC is part of (g)phobos, by the way) you'll need 
to write the OS layer for the GC to call whatever OS services the PSP 
provides (or if it doesn't provide any, do it manually).
To see what you would need to implement or port, see gclinux.d, win32.d 
or gcgcc.d in gcc/d/phobos/internal/gc/.
I'm not sure how portable the rest of the gc is, but AFAIK the 
platform-specific stuff should mostly be in those files.


More information about the D.gnu mailing list