On Monday, 6 January 2014 at 17:52:44 UTC, Sean Kelly wrote:
On Monday, 6 January 2014 at 11:47:57 UTC, Dwhatever wrote:
I'm trying to do the same, trying to compile OS free code but
I haven't so far been successful because D requires the
runtime and then also Phobos.
D doesn't require Phobos. The compiler implicitly links against
libphobos.a, but that isn't the same thing. All a D app
actually
needs is Druntime. And you can replace the GC in Druntime with
gcstub (backed by malloc) and stub out the thread API if these
aren't appropriate for your target. This still means using a
custom Druntime, but making the changes should really be pretty
straightforward in most cases. The most complicated aspect of
porting will be how you handle core.stdc, since Druntime still
relies on C library calls for various things.
I'm using LDC and unfortunately the -mtriple=arm-eabi isn't
supported so I have to use -mtriple=arm-linux which automatically
sets the "Posix" version string. I can always try to stub all the
Posix calls in the library but what I think would work is that
you have a stubbed version when there isn't any system name like
Windows or Posix. For example.
version (Windows)
{
...
}
else version (Posix)
{
...
}
else
{
//Stubbed interface
}
However, it isn't really obvious what is missing when stubbing
all the interfaces. Perhaps some stubbed interfaces should have a
reference to some function so that the programmer understands
that this must be implemented. For example malloc and free would
be obvious.