www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Cross-compile with LDC

reply Oleg B <code.viator gmail.com> writes:
Hello all! I want to build ldc cross compiller. I found this 
instruction  
https://wiki.dlang.org/LDC_cross-compilation_for_ARM_GNU/Linux, 
but I have some doubts: will it works with ldc-1.1.0? 
Particularly interested in the patch 
https://gist.githubusercontent.com/claudemr/3367c13095b15d449b1591eb38d098d9/raw/3517a5db2228e57da9dd8880a82d6bfe6f0e38f
/ldc_1.0.0_gnu_arm. It's for ldc-1.0.0 and sources can be changed.
Maybe somewhere I found patch for ldc-1.1.0?
Maybe someone already build cross ldc for linux x86_64?))
Feb 08
parent reply kinke <noone nowhere.com> writes:
On Wednesday, 8 February 2017 at 14:57:41 UTC, Oleg B wrote:
 Hello all! I want to build ldc cross compiller. I found this 
 instruction  
 https://wiki.dlang.org/LDC_cross-compilation_for_ARM_GNU/Linux, 
 but I have some doubts: will it works with ldc-1.1.0? 
 Particularly interested in the patch 
 https://gist.githubusercontent.com/claudemr/3367c13095b15d449b1591eb38d098d9/raw/3517a5db2228e57da9dd8880a82d6bfe6f0e38f
/ldc_1.0.0_gnu_arm. It's for ldc-1.0.0 and sources can be changed.
 Maybe somewhere I found patch for ldc-1.1.0?
 Maybe someone already build cross ldc for linux x86_64?))
Hi Oleg, first of all, we have an LDC forum/NG (http://forum.dlang.org/group/ldc) which would be more appropriate for your question. The referenced LDC patch is derived from https://github.com/ldc-developers/ldc/pull/1317, which hasn't been merged yet (but will be in not-too-distant future). As you haven't explicitly specified what your target platform is, I can only assume that it's 32-bit ARM. With a vanilla LDC, cross-compiling to ARM with its double-precision reals will only work correctly if your LDC host compiler uses double-precision reals too, which isn't the case for Linux x86(_64), but for Windows. My LDC PR would make it work with a non-Windows x86(_64) host too, but only if the target (not the host) uses at most double-precision reals.
Feb 08
parent reply Oleg B <code.viator gmail.com> writes:
On Wednesday, 8 February 2017 at 16:21:49 UTC, kinke wrote:
 On Wednesday, 8 February 2017 at 14:57:41 UTC, Oleg B wrote:
 Hello all! I want to build ldc cross compiller. I found this 
 instruction  
 https://wiki.dlang.org/LDC_cross-compilation_for_ARM_GNU/Linux, but I have
some doubts: will it works with ldc-1.1.0? Particularly interested in the patch
https://gist.githubusercontent.com/claudemr/3367c13095b15d449b1591eb38d098d9/raw/3517a5db2228e57da9dd8880a82d6bfe6f0e38f
/ldc_1.0.0_gnu_arm. It's for ldc-1.0.0 and sources can be changed.
 Maybe somewhere I found patch for ldc-1.1.0?
 Maybe someone already build cross ldc for linux x86_64?))
Hi Oleg, first of all, we have an LDC forum/NG (http://forum.dlang.org/group/ldc) which would be more appropriate for your question. The referenced LDC patch is derived from https://github.com/ldc-developers/ldc/pull/1317, which hasn't been merged yet (but will be in not-too-distant future). As you haven't explicitly specified what your target platform is, I can only assume that it's 32-bit ARM. With a vanilla LDC, cross-compiling to ARM with its double-precision reals will only work correctly if your LDC host compiler uses double-precision reals too, which isn't the case for Linux x86(_64), but for Windows. My LDC PR would make it work with a non-Windows x86(_64) host too, but only if the target (not the host) uses at most double-precision reals.
Thank you, in future I create new question about ldc in special forum. Yes, my target arch is ARMv7 (rpi2 and beaglebone) and ARMv8 (rpi3). If I understand correctly with vanilla LDC I can't cross-compiling from host linux-x86_64, but with your patch I can. Right? Maximum precision for ARMv7(8) is 64bit doubles, for x86_64 is 80bit reals. If I use your patch must I use in my programs only double or I can stay real in existing code?
Feb 08
parent reply kinke <noone nowhere.com> writes:
On Wednesday, 8 February 2017 at 17:21:03 UTC, Oleg B wrote:
 If I understand correctly with vanilla LDC I can't 
 cross-compiling from host linux-x86_64, but with your patch I 
 can. Right?
Right. Joakim Noah has worked on LDC for Android and as far as I know provides some prebuilt compilers, a native one and a cross-compiler (Linux x86_64 host) including that patch. There's also a pre-built Windows -> ARM cross-compiler; see http://forum.dlang.org/thread/xzzzfvahuwvgslulifad forum.dlang.org and more ARM-related threads in our subforum.
 If I use your patch must I use in my programs only double or I 
 can stay real in existing code?
Don't worry, the reals can stay.
Feb 08
parent Joakim <dlang joakim.fea.st> writes:
On Wednesday, 8 February 2017 at 17:57:49 UTC, kinke wrote:
 On Wednesday, 8 February 2017 at 17:21:03 UTC, Oleg B wrote:
 If I understand correctly with vanilla LDC I can't 
 cross-compiling from host linux-x86_64, but with your patch I 
 can. Right?
Right. Joakim Noah has worked on LDC for Android and as far as I know provides some prebuilt compilers, a native one and a cross-compiler (Linux x86_64 host) including that patch. There's also a pre-built Windows -> ARM cross-compiler; see http://forum.dlang.org/thread/xzzzfvahuwvgslulifad forum.dlang.org and more ARM-related threads in our subforum.
That's not really a Windows build of ldc, he just used the new linux support in Windows 10. There is a build of ldc 1.1.0 for native linux/ARM, if you want to compile D code on the ARM device itself: https://github.com/ldc-developers/ldc/releases/tag/v1.1.0 If not, it's pretty straight forward to build a cross-compiler for ARM, take a look at my patches and instructions for Android: https://github.com/joakim-noah/android/releases
 If I use your patch must I use in my programs only double or I 
 can stay real in existing code?
Don't worry, the reals can stay.
The patch will make reals the same as double, ie they're all 64-bit, so it is irrelevant which one you use. If you're writing cross-platform code and care about that difference on other platforms, you may need to check for it. Take a look at std.math for examples of this, where it checks the length of the mantissa sometimes for reals.
Feb 09