May 02, 2013
Thank you!
I will check that today. What to do about static asserts in thread.d?

On Thursday, 2 May 2013 at 14:54:44 UTC, Johannes Pfau wrote:
> Am Tue, 30 Apr 2013 22:40:32 +0200
> schrieb "Timofei Bolshakoc" <tbolsh@gmail.com>:
>
>> I was able to compile DGC to the Hello, World status for ARM using crosstools-ng 1.18 eglibc. uclibc would not work, it lack some of the functions in the library, context switching. There are several places I cheat ( to get Hello, World! ). Please advise:
>> 
>> ../gcc-4.7.2/libphobos/libdruntime/core/sys/posix/ucontext.d:274: Error: static assert  "Not implemented"
>
> Add this to ucontext.d:
> https://gist.github.com/jpf91/5502741
>
> You probably also need this for core/sys/posix/sys/stat.d
> https://gist.github.com/jpf91/5502725
>
>> 
>> I simply commented static asserts - and I do not think it will fly with any real multi threading program. All the places consider context switching and assembly-level register manipulation. Can somebody help me with that?
>
> The definition of ucontext_t should be enough. But this code is only
> for fibers real threads don't need this support code and should work
> fine without it. You probably also need the stat_t definition posted
> above to do any kind of IO.

May 02, 2013
Am Thu, 02 May 2013 18:54:28 +0200
schrieb "Timofei Bolshakov" <tbolsh@gmail.com>:

> Thank you!
> I will check that today. What to do about static asserts in
> thread.d?

Those should be fixed by the ucontext changes. The
static if(__traits( compiles, ucontext_t )) code path
will be used if we make ucontext_t available.
May 11, 2013
On Thursday, 2 May 2013 at 17:28:47 UTC, Johannes Pfau wrote:
> Am Thu, 02 May 2013 18:54:28 +0200
> schrieb "Timofei Bolshakov" <tbolsh@gmail.com>:
>
>> Thank you!
>> I will check that today. What to do about static asserts in thread.d?
>
> Those should be fixed by the ucontext changes. The
> static if(__traits( compiles, ucontext_t )) code path
> will be used if we make ucontext_t available.

Many thanks for your answer!
I am using compiler for several weeks already - and today I've seen that I did not thank you.
So, all what you have said works and works fine!
June 13, 2013
On Monday, 22 April 2013 at 17:22:50 UTC, Timofei Bolshakov wrote:
> Hi, Dawid!
>
> On Thursday, 23 February 2012 at 15:25:59 UTC, Dawid Ciężarkiewicz wrote:
>> Hi,
>>
>> # Introduction
>>
>> I've started some initial work to get a working GDC crosscompiler
>> targeting ARM platforms. Currently I'm able to compile the
>> toolchain and produce a working "Hello World!" binary that I'm
>> able to execute on my BeagleBoard developement platform with
>> ArchLinux installed. The generated assembly looks sane,
>> unfortunately the program hangs, but I'm able to debug it in gdb
>> and I see it loops somewhere at:
>>
>>       2261    in
>> /home/dpc/lab/d-cross/test-tc-1/.build/src/gcc-4.6.2/libphobos/gc/gcx.d
>>       => 0x2f950 <_D2gc3gcx2GC6mallocMFkkPkZPv+648>:  str     r2,
>> [r4, r9, lsl #2]
>>
>> I'm going to investigate this and possibly fix with time. Anyone
>> interested in getting this to work seamlessly is kindly requested
>> to join efforts and share the results.
>>
>>
>> # How to compile
>>
>> There's a crosstool-ng tool that is a great way to assemble and
>> build (cross-)toolchains. I've added some hacks to integrate the
>> gdc repository and thus add a gdc support.
>>
>> I've pushed the forked crosstools-ng here:
>>
>> https://bitbucket.org/xdpcx/crosstool-ng-dlang/
>>
>> (I prefer git, but original crosstools-ng is using hg, so I
>> sticked with it).
>>
>> Grab that code and learn to how to use ct-ng.
>>
>> Basically installing crosstool-ng it's just a metter of
>> downloading and doing:
>>
>>       ./bootstrap
>>       ./configure
>>       make
>>       make install
>>
>> (I use `./configure --prefix="$HOME/opt"` for home-local
>> configuration.)
>>
>> This will give you `ct-ng` command that you can use in any
>> directory
>>
>>      cd ~/my/toolchain/buildir
>>      mkdir src
>>      cp ~/config/that/i/prepared/for/you/config .config
>>      ct-ng menuconfig
>>      ct-ng build
>>      ls arm-none-linux-eabi
>>
>> I attach the mentioned config.
>>
>> Actually, as I don't know how to attach it I've put it here:
>> http://pastebin.ca/2121043
>
> I tried to do that and build failed:
>
> [DEBUG]    ==> Executing: 'sh' './gcc/d/setup-gcc.sh'
> [ALL  ]    This version of GCC (4.4) is not supported.
>
> do you have somewhere corrected code / config?
>
>>
>> If anyone is interested I could upload the compiled binaries
>> somewhere, as the toolchain is static.
>
> I will greatly appreciate that!
>
>>

I have the same trouble.
And I don't know how resolve it..
I tried to change config "/$HOME/opt/lib/ct-ng.hg+../config/cc/gcc.in" by added gcc 4.7.0 support, but this way compile has another errors:

[INFO ]  Installing C library
[INFO ]  Installing C library: done in 441.77s (at 17:52)
[INFO ]  =================================================================
[INFO ]  Installing final compiler
[WARN ]    Building d language(s) is not yet supported. Will try...
[ERROR]    configure: error:
[ERROR]
[ERROR]  >>
[ERROR]  >>  Build failed in step 'Installing final compiler'
[ERROR]  >>        called in step '(top-level)'
[ERROR]  >>
[ERROR]  >>  Error happened in: CT_DoExecLog[scripts/functions@172]
[ERROR]  >>        called from: do_cc_backend[scripts/build/cc/gcc.sh@753]
[ERROR]  >>        called from: do_cc[scripts/build/cc/gcc.sh@525]
[ERROR]  >>        called from: main[scripts/crosstool-NG.sh@597]
[ERROR]  >>


June 13, 2013
Am Thu, 13 Jun 2013 16:28:19 +0200
schrieb "Andrey" <vangelisforever@yandex.ru>:

> 
> I have the same trouble.
> And I don't know how resolve it..

If you want to build a cross compiler targeting ARM/Linux follow these instructions: http://gdcproject.org/wiki/Cross%20Compiler/crosstool-NG

This way you don't need to patch crosstool-NG and you can use the latest crosstool-NG release. Make sure to use gcc-4.7 (gcc-4.8 will work as well as soon as crosstool-NG supports it).

I don't have a ready to use config though.
June 13, 2013
On Thursday, 13 June 2013 at 16:00:34 UTC, Johannes Pfau wrote:
> Am Thu, 13 Jun 2013 16:28:19 +0200
> schrieb "Andrey" <vangelisforever@yandex.ru>:
>
>> 
>> I have the same trouble.
>> And I don't know how resolve it..
>
> If you want to build a cross compiler targeting ARM/Linux follow these
> instructions:
> http://gdcproject.org/wiki/Cross%20Compiler/crosstool-NG
>
> This way you don't need to patch crosstool-NG and you can use the
> latest crosstool-NG release. Make sure to use gcc-4.7 (gcc-4.8 will
> work as well as soon as crosstool-NG supports it).
>
> I don't have a ready to use config though.
Thank you for answer.

The compilation of GDC for ARMv5TE has been done without any errors, and now I can't find native ARM libphobos to make my small ARM test. What shall I do? Сould you help me?

Thanks.
June 15, 2013
Am Thu, 13 Jun 2013 22:19:10 +0200
schrieb "Andrey" <vangelisforever@yandex.ru>:

> On Thursday, 13 June 2013 at 16:00:34 UTC, Johannes Pfau wrote:
> > Am Thu, 13 Jun 2013 16:28:19 +0200
> > schrieb "Andrey" <vangelisforever@yandex.ru>:
> >
> >> 
> >> I have the same trouble.
> >> And I don't know how resolve it..
> >
> > If you want to build a cross compiler targeting ARM/Linux
> > follow these
> > instructions:
> > http://gdcproject.org/wiki/Cross%20Compiler/crosstool-NG
> >
> > This way you don't need to patch crosstool-NG and you can use
> > the
> > latest crosstool-NG release. Make sure to use gcc-4.7 (gcc-4.8
> > will
> > work as well as soon as crosstool-NG supports it).
> >
> > I don't have a ready to use config though.
> Thank you for answer.
> 
> The compilation of GDC for ARMv5TE has been done without any errors, and now I can't find native ARM libphobos to make my small ARM test. What shall I do? Сould you help me?
> 
> Thanks.

The linked howto explicitly disables phobos and druntime. To build phobos and druntime do not use the "--disable-libphobos" switch as said in the howto.

However libphobos currently doesn't build for ARM, this patch is needed: https://github.com/D-Programming-Language/druntime/pull/521

Once it's accepted into upstream I'll backport it to gdc but this might take some time. You could of course apply these changes by yourself, then remove the --disable-libphobos switch and you should get a basically working phobos.

June 15, 2013
On Saturday, 15 June 2013 at 19:15:51 UTC, Johannes Pfau wrote:
> However libphobos currently doesn't build for ARM, this patch is
> needed:

I independently did pretty much the same thing earlier today to build an arm cross compiler and got a working druntime (two more minor changes too, making a const object.toString and toHash was required to link, not sure why though)

working ...except for one thing: throwing exceptions just ends the program with "Aborted". It is possible I still did something wrong, since I built the druntime piece by piece after the fact instead of with crosstool-ng, but have you experienced this before?

June 16, 2013
nvm, I figured it out. I didn't pass the right ABI version when building runtime, so my fault.

This is pretty exciting though, D is working and it wasn't really *that* much effort!
June 16, 2013
On 16 June 2013 01:05, Adam D. Ruppe <destructionator@gmail.com> wrote:
> nvm, I figured it out. I didn't pass the right ABI version when building runtime, so my fault.
>
> This is pretty exciting though, D is working and it wasn't really *that* much effort!

It's been a few years in the making.  And there are still one or two things that need to be pushed upstream to the D front end.

The last few months has been hugely beneficial for being architecture agnostic code generation.   So every problem you encounter when targeting a new platform would hopefully be in relation to the druntime C interface, which if you have patches for please send my way.  ;)

--
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';