digitalmars.D - ARM targetting cross-toolchain with GDC
- Dawid =?iso-8859-2?q?Ci=EA=BFarkiewicz?= <dpc ucore.info> Feb 23 2012
- Johannes Pfau <nospam example.com> Feb 23 2012
- Dawid =?iso-8859-2?q?Ci=EA=BFarkiewicz?= <dpc ucore.info> Feb 23 2012
- Dawid =?iso-8859-2?q?Ci=EA=BFarkiewicz?= <dpc ucore.info> Feb 23 2012
- Andrew Wiley <wiley.andrew.j gmail.com> Feb 23 2012
- "Timofei Bolshakov" <tbolsh gmail.com> Apr 30 2013
- Iain Buclaw <ibuclaw ubuntu.com> Feb 23 2012
- "Timofei Bolshakov" <tbolsh gmail.com> Apr 22 2013
- "Timofei Bolshakoc" <tbolsh gmail.com> Apr 30 2013
- Johannes Pfau <nospam example.com> May 02 2013
- "Timofei Bolshakov" <tbolsh gmail.com> May 02 2013
- Johannes Pfau <nospam example.com> May 02 2013
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
If anyone is interested I could upload the compiled binaries
somewhere, as the toolchain is static.
Regards,
Dawid Ciężarkiewicz
Feb 23 2012
Am Thu, 23 Feb 2012 15:25:59 +0000 (UTC) schrieb Dawid Ci=C4=99=C5=BCarkiewicz <dpc ucore.info>:Hi, =20 # Introduction =20 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: =20 2261 in /home/dpc/lab/d-cross/test-tc-1/.build/src/gcc-4.6.2/libphobos/gc/gcx.d =3D> 0x2f950 <_D2gc3gcx2GC6mallocMFkkPkZPv+648>: str r2, [r4, r9, lsl #2] =20 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.
That's issue 120: https://bitbucket.org/goshawk/gdc/issue/120/fsection-anchors-broken-on-arm=20 # How to compile =20 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. =20 I've pushed the forked crosstools-ng here: =20 https://bitbucket.org/xdpcx/crosstool-ng-dlang/ =20 (I prefer git, but original crosstools-ng is using hg, so I sticked with it). =20 Grab that code and learn to how to use ct-ng. =20 Basically installing crosstool-ng it's just a metter of downloading and doing: =20 ./bootstrap ./configure make make install =20 (I use `./configure --prefix=3D"$HOME/opt"` for home-local configuration.) =20 This will give you `ct-ng` command that you can use in any directory =20 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 =20 I attach the mentioned config. =20 Actually, as I don't know how to attach it I've put it here: http://pastebin.ca/2121043
Integrating GDC with crosstools is nice. If you find the time, could you please add a page to the GDC wiki on how to setup/use crosstool-ng?If anyone is interested I could upload the compiled binaries somewhere, as the toolchain is static. =20 Regards, Dawid Ci=C4=99=C5=BCarkiewicz
Feb 23 2012
Dnia Thu, 23 Feb 2012 19:41:53 +0000, Iain Buclaw napisał(a):Does crosstools allow you to build a cross compiler for architecture X?
Yes, exactly. Canadian cross-compilers too. So other architectures could potenatially work, too. I don't have equipement to test them. -- Dawid Ciężarkiewicz
Feb 23 2012
Dnia Thu, 23 Feb 2012 19:03:46 +0100, Johannes Pfau napisał(a):That's issue 120: https://bitbucket.org/goshawk/gdc/issue/120/fsection-anchors-broken-on-
Thanks. Must try without -O2 now.Integrating GDC with crosstools is nice. If you find the time, could you please add a page to the GDC wiki on how to setup/use crosstool-ng?
Quick re-edition of my post is now here: https://bitbucket.org/goshawk/gdc/wiki/crosstool-ng I don't know if I should link the page anywhere. -- Dawid Ciężarkiewicz
Feb 23 2012
2012/2/23 Dawid Ci=EA=BFarkiewicz <dpc ucore.info>:Dnia Thu, 23 Feb 2012 19:03:46 +0100, Johannes Pfau napisa=B3(a):That's issue 120: https://bitbucket.org/goshawk/gdc/issue/120/fsection-anchors-broken-on-
Thanks. Must try without -O2 now.
-O2 is fine as long as you also use -fno-section-anchors.
Feb 23 2012
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" ../gcc-4.7.2/libphobos/libdruntime/core/thread.d:3409: Error: static assert "Not implemented" ../gcc-4.7.2/libphobos/libdruntime/core/thread.d:4237: Error: static assert "Not implemented" 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?
Apr 30 2013
On 23 February 2012 18:03, Johannes Pfau <nospam example.com> wrote:Am Thu, 23 Feb 2012 15:25:59 +0000 (UTC) schrieb Dawid Ci=C4=99=C5=BCarkiewicz <dpc ucore.info>: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: =C2=A0 =C2=A0 =C2=A0 =C2=A02261 =C2=A0 =C2=A0in /home/dpc/lab/d-cross/test-tc-1/.build/src/gcc-4.6.2/libphobos/gc/gcx.d =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D> 0x2f950 <_D2gc3gcx2GC6mallocMFkkPkZPv+64=
[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.
That's issue 120: https://bitbucket.org/goshawk/gdc/issue/120/fsection-anchors-broken-on-ar=
# 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: =C2=A0 =C2=A0 =C2=A0 =C2=A0./bootstrap =C2=A0 =C2=A0 =C2=A0 =C2=A0./configure =C2=A0 =C2=A0 =C2=A0 =C2=A0make =C2=A0 =C2=A0 =C2=A0 =C2=A0make install (I use `./configure --prefix=3D"$HOME/opt"` for home-local configuration.) This will give you `ct-ng` command that you can use in any directory =C2=A0 =C2=A0 =C2=A0 cd ~/my/toolchain/buildir =C2=A0 =C2=A0 =C2=A0 mkdir src =C2=A0 =C2=A0 =C2=A0 cp ~/config/that/i/prepared/for/you/config .config =C2=A0 =C2=A0 =C2=A0 ct-ng menuconfig =C2=A0 =C2=A0 =C2=A0 ct-ng build =C2=A0 =C2=A0 =C2=A0 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
Integrating GDC with crosstools is nice. If you find the time, could you please add a page to the GDC wiki on how to setup/use crosstool-ng?If anyone is interested I could upload the compiled binaries somewhere, as the toolchain is static. Regards, Dawid Ci=C4=99=C5=BCarkiewicz
Does crosstools allow you to build a cross compiler for architecture X? --=20 Iain Buclaw *(p < e ? p++ : p) =3D (c & 0x0f) + '0';
Feb 23 2012
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!Regards, Dawid Ciężarkiewicz
Apr 22 2013
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" ../gcc-4.7.2/libphobos/libdruntime/core/thread.d:3409: Error: static assert "Not implemented" ../gcc-4.7.2/libphobos/libdruntime/core/thread.d:4237: Error: static assert "Not implemented" 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?
Apr 30 2013
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/5502725I 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
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/5502725I 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 02 2013









Dawid =?iso-8859-2?q?Ci=EA=BFarkiewicz?= <dpc ucore.info> 