www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - LDC 0.17.0 alpha cross-compiler for Android/ARM, D 2.068.2

reply Joakim <dlang joakim.fea.st> writes:
https://github.com/joakim-noah/android/releases/tag/runners

You will need a linux/x86 host and the Android NDK, optionally 
the SDK if you want to create a GUI app.  A slightly older build 
was used to create the test runners from earlier this week.  You 
can use this cross-compiler to build command-line or GUI apps, by 
following the instructions from these sections in the wiki:

http://wiki.dlang.org/Build_LDC_for_Android#Build_a_command-line_executable
http://wiki.dlang.org/Build_LDC_for_Android#Build_a_sample_OpenGL_Android_app_ported_to_D

Make sure to set the NDK environment variable to the path of your 
Android NDK.

There are also instructions to build the cross-compiler and test 
runner from source yourself:

http://wiki.dlang.org/Build_LDC_for_Android
Nov 06 2015
next sibling parent Dan Olson <gorox comcast.net> writes:
Go mobile!
Nov 06 2015
prev sibling next sibling parent reply Jakob Ovrum <jakobovrum gmail.com> writes:
On Friday, 6 November 2015 at 11:56:35 UTC, Joakim wrote:
 https://github.com/joakim-noah/android/releases/tag/runners

 You will need a linux/x86 host and the Android NDK, optionally 
 the SDK if you want to create a GUI app.  A slightly older 
 build was used to create the test runners from earlier this 
 week.  You can use this cross-compiler to build command-line or 
 GUI apps, by following the instructions from these sections in 
 the wiki:

 http://wiki.dlang.org/Build_LDC_for_Android#Build_a_command-line_executable
 http://wiki.dlang.org/Build_LDC_for_Android#Build_a_sample_OpenGL_Android_app_ported_to_D

 Make sure to set the NDK environment variable to the path of 
 your Android NDK.

 There are also instructions to build the cross-compiler and 
 test runner from source yourself:

 http://wiki.dlang.org/Build_LDC_for_Android
Thanks for the thorough instructions! LLVM is rather massive and I'd prefer to avoid building it if I can, so I downloaded the pre-built LDC binary from the release page. However, the binary is 32-bit and depends on libconfig, which doesn't appear to have a multilib package in Arch Linux. There are of course ways around this, but would it be possible to release a pre-built 64-bit binary?
Nov 06 2015
next sibling parent reply Joakim <dlang joakim.fea.st> writes:
On Friday, 6 November 2015 at 20:10:36 UTC, Jakob Ovrum wrote:
 On Friday, 6 November 2015 at 11:56:35 UTC, Joakim wrote:
 [...]
Thanks for the thorough instructions! LLVM is rather massive and I'd prefer to avoid building it if I can, so I downloaded the pre-built LDC binary from the release page. However, the binary is 32-bit and depends on libconfig, which doesn't appear to have a multilib package in Arch Linux. There are of course ways around this, but would it be possible to release a pre-built 64-bit binary?
Maybe, I'll see. In the meantime, you can use ldmd2, which doesn't depend on libconfig.
Nov 06 2015
parent reply Jakob Ovrum <jakobovrum gmail.com> writes:
On Friday, 6 November 2015 at 20:24:18 UTC, Joakim wrote:
 On Friday, 6 November 2015 at 20:10:36 UTC, Jakob Ovrum wrote:
 On Friday, 6 November 2015 at 11:56:35 UTC, Joakim wrote:
 [...]
Thanks for the thorough instructions! LLVM is rather massive and I'd prefer to avoid building it if I can, so I downloaded the pre-built LDC binary from the release page. However, the binary is 32-bit and depends on libconfig, which doesn't appear to have a multilib package in Arch Linux. There are of course ways around this, but would it be possible to release a pre-built 64-bit binary?
Maybe, I'll see. In the meantime, you can use ldmd2, which doesn't depend on libconfig.
But ldmd2 depends on ldc2, doesn't it? It seems to be trying to invoke it.
Nov 06 2015
parent Joakim <dlang joakim.fea.st> writes:
On Friday, 6 November 2015 at 20:41:11 UTC, Jakob Ovrum wrote:
 On Friday, 6 November 2015 at 20:24:18 UTC, Joakim wrote:
 On Friday, 6 November 2015 at 20:10:36 UTC, Jakob Ovrum wrote:
 On Friday, 6 November 2015 at 11:56:35 UTC, Joakim wrote:
 [...]
Thanks for the thorough instructions! LLVM is rather massive and I'd prefer to avoid building it if I can, so I downloaded the pre-built LDC binary from the release page. However, the binary is 32-bit and depends on libconfig, which doesn't appear to have a multilib package in Arch Linux. There are of course ways around this, but would it be possible to release a pre-built 64-bit binary?
Maybe, I'll see. In the meantime, you can use ldmd2, which doesn't depend on libconfig.
But ldmd2 depends on ldc2, doesn't it? It seems to be trying to invoke it.
Oh, never tried ldmd2, just knew that it didn't link against libconfig. Away from computer now, will look into it tonight.
Nov 06 2015
prev sibling parent reply Joakim <dlang joakim.fea.st> writes:
On Friday, 6 November 2015 at 20:10:36 UTC, Jakob Ovrum wrote:
 Thanks for the thorough instructions! LLVM is rather massive 
 and I'd prefer to avoid building it if I can, so I downloaded 
 the pre-built LDC binary from the release page. However, the 
 binary is 32-bit and depends on libconfig, which doesn't appear 
 to have a multilib package in Arch Linux. There are of course 
 ways around this, but would it be possible to release a 
 pre-built 64-bit binary?
OK, I've rebuilt ldc with one small tweak: I've added the current directory to its rpath and bundled my system libconfig along with it, which is what the official ldc release does too. You shouldn't need libconfig installed by your system anymore. Please download the updated release of the Android/ARM cross-compiler and let me know if it works for you. Note that this linux/x86 ldc cross-compiler also depends on the ncurses and zlib shared libraries, so you'll have to install those if you want to run it.
Nov 07 2015
parent reply Jakob Ovrum <jakobovrum gmail.com> writes:
On Saturday, 7 November 2015 at 18:39:22 UTC, Joakim wrote:
 OK, I've rebuilt ldc with one small tweak: I've added the 
 current directory to its rpath and bundled my system libconfig 
 along with it, which is what the official ldc release does too.
  You shouldn't need libconfig installed by your system anymore.
  Please download the updated release of the Android/ARM 
 cross-compiler and let me know if it works for you.
Thanks, now compilation works! I have some unrelated issues with the NDK, so I will confirm how the end-to-end process works for me later once I solve that.
 Note that this linux/x86 ldc cross-compiler also depends on the 
 ncurses and zlib shared libraries, so you'll have to install 
 those if you want to run it.
Yeah, libconfig was the only library that I couldn't find an Arch Linux multilib package for, I already had the others. Note that the NDK clang executable also relies on ncurses, so there wouldn't be much point in eliminating that dependency.
Nov 11 2015
parent reply Jakob Ovrum <jakobovrum gmail.com> writes:
On Wednesday, 11 November 2015 at 22:43:01 UTC, Jakob Ovrum wrote:
 On Saturday, 7 November 2015 at 18:39:22 UTC, Joakim wrote:
 OK, I've rebuilt ldc with one small tweak: I've added the 
 current directory to its rpath and bundled my system libconfig 
 along with it, which is what the official ldc release does too.
  You shouldn't need libconfig installed by your system anymore.
  Please download the updated release of the Android/ARM 
 cross-compiler and let me know if it works for you.
Thanks, now compilation works! I have some unrelated issues with the NDK, so I will confirm how the end-to-end process works for me later once I solve that.
The issues I had came with using the 64-bit NDK - it worked as explained in the article once I switched to the 32-bit NDK. The issue appeared to be with the linker: /usr/bin/ld.bfd would complain that it was not configured for --sysroots. Changing to --fuse-ld=mcld revealed further issues. Perhaps the wiki article should recommend the 32-bit NDK until these issues are figured out.
Nov 11 2015
parent Joakim <dlang joakim.fea.st> writes:
On Thursday, 12 November 2015 at 02:51:46 UTC, Jakob Ovrum wrote:
 The issues I had came with using the 64-bit NDK - it worked as 
 explained in the article once I switched to the 32-bit NDK. The 
 issue appeared to be with the linker: /usr/bin/ld.bfd would 
 complain that it was not configured for --sysroots. Changing to 
 --fuse-ld=mcld revealed further issues. Perhaps the wiki 
 article should recommend the 32-bit NDK until these issues are 
 figured out.
I recently signed up for a linux/x64 VPS, so I've put a linux/x64 cross-compiler build at the above github link. You'll need to set a NDK_ARCH environment variable to x86_64, to use the 64-bit NDK with the updated ldc patch and sample commands from the wiki. I don't package libconfig with this one, so it will need to be installed in the system, along with zlib. I had no problem with the 64-bit NDK once I made these changes, let me know if this works for you. Your problem could be because it's trying to use the system linker at /usr/bin/ld.bfd, rather than the one that came with the NDK?
Nov 23 2015
prev sibling parent reply Andre Polykanine via Digitalmars-d-announce writes:
Hello Joakim,

JvDda> http://wiki.dlang.org/Build_LDC_for_Android#Build_a_sample_OpenGL_Android_app_ported_to_D

No way to do this on Windows, am I right?

-- 
With best regards from Ukraine,
Andre
Skype: Francophile
Twitter:  m_elensule; Facebook: menelion
My blog: http://menelion.oire.org/


------------ Original message ------------
From: Joakim via Digitalmars-d-announce <digitalmars-d-announce puremagic.com>
To: digitalmars-d-announce puremagic.com
Date created: , 1:56:33 PM
Subject: LDC 0.17.0 alpha cross-compiler for Android/ARM, D 2.068.2


      https://github.com/joakim-noah/android/releases/tag/runners

You will need a linux/x86 host and the Android NDK, optionally 
the SDK if you want to create a GUI app.  A slightly older build 
was used to create the test runners from earlier this week.  You 
can use this cross-compiler to build command-line or GUI apps, by 
following the instructions from these sections in the wiki:

http://wiki.dlang.org/Build_LDC_for_Android#Build_a_command-line_executable
http://wiki.dlang.org/Build_LDC_for_Android#Build_a_sample_OpenGL_Android_app_ported_to_D

Make sure to set the NDK environment variable to the path of your 
Android NDK.

There are also instructions to build the cross-compiler and test 
runner from source yourself:

http://wiki.dlang.org/Build_LDC_for_Android
Nov 07 2015
parent Joakim <dlang joakim.fea.st> writes:
On Saturday, 7 November 2015 at 12:23:18 UTC, Andre Polykanine 
wrote:
 Hello Joakim,

 JvDda> 
 http://wiki.dlang.org/Build_LDC_for_Android#Build_a_sample_OpenGL_Android_app_ported_to_D

 No way to do this on Windows, am I right?
Not using this cross-compiler build for a linux/x86 host, no. However, you can build llvm/ldc from source on Windows using the patches earlier in that wiki page and in principle, it should work on Windows too. I haven't tried it, so I can't say for sure, but I think it'd work.
Nov 07 2015