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.

Reply via email to