D for Android

Elvis Zhou via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 23 19:09:57 PDT 2014


On Thursday, 24 July 2014 at 01:17:44 UTC, Joakim wrote:
> On Thursday, 8 May 2014 at 16:16:22 UTC, Joakim wrote:
>> Well, Android/x86 for now.  I've been plugging away at getting 
>> D running on Android/x86 and got all of the druntime modules' 
>> unit tests and 37 of 50 phobos modules' unit tests to pass. I 
>> had to hack dmd into producing something like packed TLS for 
>> ELF, my patch is online here:
>>
>> http://164.138.25.188/dmd/packed_tls_for_elf.patch
>>
>> I simply turned off all TLS flags for ELF and spliced in the 
>> el_picvar patch from OS X to call ___tls_get_addr.  Somebody 
>> who knows dmd better than me should verify to make sure this 
>> is right.
>>
>> I've also put online preliminary pulls for druntime and phobos:
>>
>> https://github.com/D-Programming-Language/druntime/pull/784
>> https://github.com/D-Programming-Language/phobos/pull/2150
>>
>> Now that a significant chunk of D is working on Android/x86, 
>> I'm looking for others to pitch in.  We really need to get D 
>> on mobile, and Android/x86 is an ideal place to start.  Dan 
>> Olson has done some nice work getting D on iOS using ldc, I'm 
>> sure he could use help too:
>>
>> http://forum.dlang.org/thread/m2txc2kqxv.fsf@comcast.net
>> http://forum.dlang.org/thread/m2d2h15ao3.fsf@comcast.net
>>
>> Stuff remaining to be done:
>>
>> 1. Fix all phobos unit tests.  Those who know the failing 
>> modules better would be best equipped to get them to work.
>>
>> 2. I tried creating an Android app, ie an apk, which is really 
>> just a shared library called from the Dalvik JVM, as opposed 
>> to the standalone executables I've been running from the 
>> Android command line so far.  The apk enters the D code and 
>> then segfaults in the new TLS support, I'll debug that next.
>>
>> 3. Use ldc/gdc to build for Android/ARM.
>>
>> 4. Start translating various headers on Android so they can be 
>> called from D, ie EGL, OpenGL ES, sensors, etc.
>>
>> 5. Integrate the D compilers into the existing Makefile-based 
>> build system of the Android NDK.  Right now, I extract the 
>> necessary compiler and linker commands and run them by hand 
>> when necessary.
>>
>> All you need to get going is to download the latest Android 
>> NDK (http://developer.android.com/tools/sdk/ndk/index.html) 
>> and run Android/x86 (http://www.android-x86.org/, I recommend 
>> the 4.3 build) in a VM.  I'll put up some basic setup and 
>> build instructions if someone is interested.
>
> An update on the porting effort: I just got most modules' unit 
> tests to pass as part of an Android/x86 app, a native "apk," ie 
> a D shared library called from a small C wrapper, no Java 
> required. :)
>
> All druntime/phobos modules but one, std.datetime, passed their 
> tests on the Android/x86 command-line a couple months ago.  
> Three of those modules segfault when run as part of the tests 
> in an apk- core.thread, std.parallelism, and std.socket- going 
> to look at those next.  I'm guessing the first two might be 
> related to the C wrapper also calling pthreads, as they passed 
> on the command-line.
>
> This means most of 1. and 2. above can be crossed off the list.
>  I'll start cleaning up my fairly simple build process and 
> document it on the wiki, so that others can easily play with D 
> on Android/x86.  Most of the patches so far have been merged 
> into git master, with the dmd patch above now a PR:
>
> https://github.com/D-Programming-Language/dmd/pull/3643
>
> Only small tweaks were needed beyond that, which I'll submit as 
> PRs in the coming days.  Looking forward to help on 3., 4., and 
> 5. above, and to seeing what others do with this new platform.

Congratulations! I'll definitely give it a try when Android/Arm 
get ready and I think your great efforts will give D a new life 
as the best programming language for mobile platform.D may be 
another ObjC once it runs on Android/iOS stably.


More information about the Digitalmars-d mailing list