On Saturday, 22 February 2020 at 13:20:40 UTC, IGotD- wrote:
I'm trying to find information how to port D, especially the D runtime to a proprietary OS. The OS support seems to be scattered around several files with a lot version (OS) switches. This makes kind of hard to understand what you have to implement. Also, what happens if you only have partial support, for example networking is completely left out.

Will there be a future improvement of this so that OS specific support can be moved to separate files and selected on module level instead? For example.

void DSpecificLibraryFunction(...)
{
    OSDependentLibraryFunction(...)
}

so that there are predefined OS specific functions that are selected on module level. Also version() switches where everything is consolidated into one file makes it more difficult to merge.

Do we have any guide for OS porting?

Best place to start would be without druntime at all, just a minimal object module, and extern(C) main, then work your way up, introducing each module one at a time to make sure that it all works.

There are a few core components that you need to port in order to get things working, or at least, you need to isolate and verify that it works, as if they don't then you'll get some very hard to debug issues.

The two main ones to pay close attention to are rt.sections and core.thread. If exception handling is not dwarf-based, then you'll have to implement your own rt.deh too.

Reply via email to