Hitchikers Guide to Porting Phobos / D Runtime to other architectures
Adam D. Ruppe
destructionator at gmail.com
Tue Jan 7 17:57:21 PST 2014
On Wednesday, 8 January 2014 at 00:21:15 UTC, Mike wrote:
> I'm sorry I can't share my code at the moment; I haven't
> decided yet where to put it. I was studying Adam Ruppe's
> minimal X86 port last night and found it most useful (Thumbs
> Up!), but with a 2000 line object.d, it's stretching the word
> "minimal", at least when compared with C. But if you really
> want all the cool stuff D has to offer, this is probably what
> will be required in the end.
Sorry if I'm late to reply, I'm barely following this thread,
just poking in when I see me mentioned :)
But I started with a truly minimal D: the standalone file here
was my first go <http://arsdnet.net/dcode/minimal.d> but indeed,
that hits limits fast. I'd be ok with it as a "better C"... and
the 3KB statically linked elf executable was awesome, but not
even structs work, which takes a lot of fun out of things.
So I started adding stuff. Note that about 500 lines of the
object.d in there aren't strictly needed, but since I had a
custom druntime, I wanted to play a bit :)
Some things are needed so the compiler doesn't complain. Some
stuff, typeinfo especially, are there so the linker doesn't
complain.
Then classes and exceptions were a lot of code (which I
copy/pasted from druntime). About line 900 - line 2000 are these.
You could cut a *lot* of that out if you didn't want to use
exceptions, but I like them so I wanted that to work. But
exceptions need stack unwinding (BTW gdc uses a totally different
stack unwinding thing, at least on ARM/raspberry pi. This is
dmd's code) and classes so it kinda ballooned the size a bit.
I just fixed this to work with newer dmd btw.
http://arsdnet.net/dcode/minimal.zip
The executable was ~30 KB statically linked, and a good majority
of the language worked. So I was pretty happy with that trade
off. A lot of lines, but not a huge amount of bloat.
Anywho, let me get it back to the whole "minimal" thing....
But put a single struct and it complains
Error: TypeInfo not found. object.d may be incorrectly installed
or corrupt, compile with -v switch
even with -betterC :-( :-( :-(
I don't even care about typeinfo; doing my own runtime, I'd be ok
with any function that needs it to simply fail to compile. I can
do it myself with templates.
Basic structs should really work regardless.
> Even the switch...case statement seems to be, at least
> partially, implemented in the runtime
Yea, for strings. My thing did a stupid loop for string cases :P
If you don't try to use a string switch though, those references
aren't emitted at all.
More information about the Digitalmars-d
mailing list