On Friday, 15 July 2016 at 15:24:36 UTC, Kai Nacke wrote:
There is a reason why we do not distribute a binary version of
LDC with all LLVM targets enabled. LDC still uses the real
format of the host. This is different on ARM (80bit on
Linux/x86 vs. 64bit on Linux/ARM). Do not expect that
applications using real type work correctly.
(The Windows version of LDC uses 64bit reals. The binary build
has the ARM target enabled.)
Regards,
Kai
Hello Kai,
Thanks for your answer.
From the link https://wiki.dlang.org/Build_LDC_for_Android , I
did exactly the same steps described in section "Compile LLVM"
(patch applied).
At section "Build ldc for Android/ARM", I did it quite the same.
I applied the patch ldc_1.0.0_android_arm, but changed
runtime/CMakeList.txt, instead of using Android specific stuff, I
did:
Line 15:
set(D_FLAGS -w;-mtriple=arm-none-linux-gnueabi
CACHE STRING "Runtime build flags, separated by ;")
Line 505:
#
# Set up build targets.
#
set(RT_CFLAGS "-g")
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER
/opt/arm-2009q1/bin/arm-none-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER
/opt/arm-2009q1/bin/arm-none-linux-gnueabi-c++)
On the command line, I aliased DMD to /usr/bin/dmd and runt cmake
as described...
Afterwards, I ran make for ldc2, phobos2-ldc an druntime-ldc, but
I did not apply the patches on phobos and runtime. It looked like
the path introduced some static compilation towards Android, so I
thought it would not apply to my needs.
So here' what I get if I do a "ldc2 -version":
LDC - the LLVM D compiler (1.0.0):
based on DMD v2.070.2 and LLVM 3.8.1
built with DMD64 D Compiler v2.071.1
Default target: x86_64-unknown-linux-gnu
Host CPU: westmere
http://dlang.org - http://wiki.dlang.org/LDC
Registered Targets:
arm - ARM
armeb - ARM (big endian)
thumb - Thumb
thumbeb - Thumb (big endian)
I can strictly compile a "hello world" program:
./bin/ldc2 -mtriple=arm-none-linux-gnueabi test.d
I get the expected "test.o"
But I don't know how to link it. I don't have "clang". I tried to
link it with the gcc from the gnu ARM toolchain with
libdruntime-ldc.a, libldc.a and libphobos2-ldc.a, but it fails
miserably: many undefined symbols (pthread, and some other os
related stuff).