Ehem, ARM
Chris
wendlec at tcd.ie
Tue Nov 26 01:53:06 PST 2013
On Monday, 25 November 2013 at 22:32:26 UTC, Joakim wrote:
> On Monday, 25 November 2013 at 11:32:56 UTC, Chris wrote:
>> On Monday, 25 November 2013 at 10:38:24 UTC, Joakim wrote:
>>> Next step, get dmd to do the same with a "hello world" native
>>> Android app. I'll update this thread as I go, for anyone
>>> who's interested.
>>
>> Thanks, I'm interested.
> I just spent a couple hours trying to get dmd to compile a
> "hello world" app on linux/x86 without druntime and phobos, so
> I might as well document it here. After looking at a bunch of
> old newsgroup posts and some druntime source, I came up with
> the following foo.d:
>
> extern (C) void puts(const char*);
> extern (C) int main() {puts("Booya cuddie!\n");return 0;}
>
> I compiled foo.d with a local, unpatched build of dmd from git
> as of 10 days ago, dmd compiled by clang++:
>
> ./src/dmd -v foo.d -betterC -defaultlib=
>
> No good, it wants an object.d, despite being a better C:
>
> Error: cannot find source code for runtime library file
> 'object.d'
> dmd might not be correctly installed. Run 'dmd -man' for
> installation instructions.
> Specify path to file 'object.d' with -I switch
>
> So I copied object.di from druntime into the same directory,
> but it turns out that simply placing an empty file called
> object.di there also works. :)
>
> Next error, it doesn't link:
>
> foo.o:(.text.d_dso_init[.data.d_dso_rec]+0x33): undefined
> reference to `_d_dso_registry'
> collect2: error: ld returned 1 exit status
> --- errorlevel 1
>
> So I checked the symbols from the object file it did build:
>
>> nm foo.o
> 00000000 t
> U _GLOBAL_OFFSET_TABLE_
> U _d_dso_registry
> 00000000 T main
>
> It turns out that there's a weak reference to _d_dso_registry
> for ELF object files, but it was recently made a requirement on
> linux only. I got rid of that requirement by changing the
> REQUIRE_DSO_REGISTRY define to this line in
> ./src/backend/elfobj.c:
>
> #define REQUIRE_DSO_REGISTRY (DMDV2 && TARGET_RLINUX)
>
> Recompile dmd and foo.d now builds and runs. :) Obviously, this
> patch shouldn't be necessary if you're not on linux.
>
> Next, getting this minimal app running on Android/x86. It
> turns out there is some support for building executables
> directly in the Android NDK, just undocumented, though the docs
> are fairly bad generally.
Interesting. Johannes mentioned that the main app should always
be in Java so it goes through Dalvik. I've done some JNI-D stuff
already (only a proof-of-concept command line app though). I
wonder what's the best way of porting D to mobile OS's (mainly
Android and iOS).
More information about the Digitalmars-d
mailing list