Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
July 13, 2014 Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Hello all, Is there a simple/trivial way to ensure that when I build GDC, I build not only the native target for my machine (x86_64) but also the arm-linux-gnueabi target? I decided it was time to start pulling out Adam Ruppe's embedded programming guide, and as a decidedly non-embedded programmer, the instructions here: http://wiki.dlang.org/Bare_Metal_ARM_Cortex-M_GDC_Cross_Compiler ... are not something I'm confident in just following (not least because e.g. certain scripts are provided without much indication of what they should be called, where they should be placed, or how to use them). What I'd really like is just to have arm-linux-gnueabi as another target built in the normal process of compiling and installing GDC, not something I have to organize separately from my normal GDC build. Can anyone advise? Thanks & best wishes, -- Joe |
July 13, 2014 Re: Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joseph Rushton Wakeling | Am Sun, 13 Jul 2014 12:10:28 +0200 schrieb "Joseph Rushton Wakeling via D.gnu" <d.gnu@puremagic.com>: > Hello all, > > Is there a simple/trivial way to ensure that when I build GDC, I build not only the native target for my machine (x86_64) but also the arm-linux-gnueabi target? > > I decided it was time to start pulling out Adam Ruppe's embedded programming guide, and as a decidedly non-embedded programmer, the instructions here: http://wiki.dlang.org/Bare_Metal_ARM_Cortex-M_GDC_Cross_Compiler > > ... are not something I'm confident in just following (not least because e.g. certain scripts are provided without much indication of what they should be called, where they should be placed, or how to use them). > > What I'd really like is just to have arm-linux-gnueabi as another target built in the normal process of compiling and installing GDC, not something I have to organize separately from my normal GDC build. > > Can anyone advise? > > Thanks & best wishes, > > -- Joe AFAIK that's not possible with GCC right now. One GCC build always targets one main architecture. Is there any reason why you can't use the binaries from http://gdcproject.org/downloads/ ? I assume you want a cross compiler? For native compilers on ARM machines you can just use the usual instructions: http://wiki.dlang.org/GDC/Installation/Generic For cross compilers you must build at least binutils so this is more complicated. The http://wiki.dlang.org/Bare_Metal_ARM_Cortex-M_GDC_Cross_Compiler only apply if you want an embedded compiler, i.e. you don't use linux/glibc. For linux/glibc things are even more complicated. I'll have to refer you to standard GCC-cross compiler tutorials, compiling cross-gdc is exactly the same as compiling cross-gcc. The simplest way to build such cross-compilers is with crosstool-NG: http://wiki.dlang.org/GDC/Cross_Compiler/crosstool-NG I also build the binaries at http://gdcproject.org/downloads/ with crosstool-NG. |
July 13, 2014 Re: Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johannes Pfau | On 13/07/14 12:30, Johannes Pfau via D.gnu wrote: > AFAIK that's not possible with GCC right now. One GCC build always > targets one main architecture. > > Is there any reason why you can't use the binaries from > http://gdcproject.org/downloads/ ? No, none at all. I just thought, since I build GDC from source anyway, I might as well see if I can just add an extra couple of config options and get what I want. But it's great to have the ready-made downloads. Just to know, does the 2.065 version require that I have gcc installed 4.9.0 on my system? Or is the "GCC" column just an indicator of what GCC sources the build was based on? > I assume you want a cross compiler? For native compilers on ARM > machines you can just use the usual instructions: > http://wiki.dlang.org/GDC/Installation/Generic Yes, I'm interested principally in cross-compiling, both for linux-on-ARM and bare-metal ARM. That said, t would be fun to actually have GDC running on an RPi. I remember compiling C++ code on it and the amusing horror of how terribly long it took, it will be fun to see how D compilation goes by comparison ... :-) > For cross compilers you must build at least binutils so this is more > complicated. The > http://wiki.dlang.org/Bare_Metal_ARM_Cortex-M_GDC_Cross_Compiler only > apply if you want an embedded compiler, i.e. you don't use linux/glibc. > > For linux/glibc things are even more complicated. I'll have to refer > you to standard GCC-cross compiler tutorials, compiling cross-gdc is > exactly the same as compiling cross-gcc. > > The simplest way to build such cross-compilers is with crosstool-NG: > http://wiki.dlang.org/GDC/Cross_Compiler/crosstool-NG > I also build the binaries at http://gdcproject.org/downloads/ with > crosstool-NG. Thanks, I'll have a read through these. :-) |
July 13, 2014 Re: Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joseph Rushton Wakeling | Am Sun, 13 Jul 2014 13:17:22 +0200 schrieb "Joseph Rushton Wakeling via D.gnu" <d.gnu@puremagic.com>: > On 13/07/14 12:30, Johannes Pfau via D.gnu wrote: > > AFAIK that's not possible with GCC right now. One GCC build always targets one main architecture. > > > > Is there any reason why you can't use the binaries from http://gdcproject.org/downloads/ ? > > No, none at all. I just thought, since I build GDC from source anyway, I might as well see if I can just add an extra couple of config options and get what I want. But it's great to have the ready-made downloads. > > Just to know, does the 2.065 version require that I have gcc installed 4.9.0 on my system? Or is the "GCC" column just an indicator of what GCC sources the build was based on? It marks the build gcc version and the system gcc version should not really matter. (After all you can use cross compilers on windows or other systems which don't even have a native gcc compiler) > > > I assume you want a cross compiler? For native compilers on ARM machines you can just use the usual instructions: http://wiki.dlang.org/GDC/Installation/Generic > > Yes, I'm interested principally in cross-compiling, both for linux-on-ARM and bare-metal ARM. > > That said, t would be fun to actually have GDC running on an RPi. I remember compiling C++ code on it and the amusing horror of how terribly long it took, it will be fun to see how D compilation goes by comparison ... :-) IIRC building gdc/gcc alone requires 12 hours. And you'll need swap as there's not enough ram ;-) > > > For cross compilers you must build at least binutils so this is more complicated. The http://wiki.dlang.org/Bare_Metal_ARM_Cortex-M_GDC_Cross_Compiler only apply if you want an embedded compiler, i.e. you don't use linux/glibc. > > > > For linux/glibc things are even more complicated. I'll have to refer you to standard GCC-cross compiler tutorials, compiling cross-gdc is exactly the same as compiling cross-gcc. > > > > The simplest way to build such cross-compilers is with crosstool-NG: > > http://wiki.dlang.org/GDC/Cross_Compiler/crosstool-NG > > I also build the binaries at http://gdcproject.org/downloads/ with > > crosstool-NG. > > Thanks, I'll have a read through these. :-) |
July 13, 2014 Re: Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johannes Pfau | On 13/07/14 13:31, Johannes Pfau via D.gnu wrote:
> IIRC building gdc/gcc alone requires 12 hours. And you'll need swap
> as there's not enough ram ;-)
Hmmm, I'd like to think I could build gdc-for-arm itself on my regular machine and just copy it over? ;-)
|
July 13, 2014 Re: Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joseph Rushton Wakeling | On Sunday, 13 July 2014 at 11:17:29 UTC, Joseph Rushton Wakeling via D.gnu wrote: >> The simplest way to build such cross-compilers is with crosstool-NG: >> http://wiki.dlang.org/GDC/Cross_Compiler/crosstool-NG >> I also build the binaries at http://gdcproject.org/downloads/ with >> crosstool-NG. > > Thanks, I'll have a read through these. :-) I ran into some trouble with crosstools. If you're going to do bare-metal, have a look at this thread as well to hopefully save yourself some frustration (http://forum.dlang.org/post/ftnzzsekkcepcthrjtdr@forum.dlang.org). Mike |
July 13, 2014 Re: Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joseph Rushton Wakeling | On Sunday, 13 July 2014 at 10:10:34 UTC, Joseph Rushton Wakeling via D.gnu wrote: > I decided it was time to start pulling out Adam Ruppe's embedded programming guide, and as a decidedly non-embedded programmer, the instructions here: > http://wiki.dlang.org/Bare_Metal_ARM_Cortex-M_GDC_Cross_Compiler > > ... are not something I'm confident in just following (not least because e.g. certain scripts are provided without much indication of what they should be called, where they should be placed, or how to use them). Those instructions came from my personal script that I use to build GDC from time-to-time. It's all one script. I broke it up in the wiki in an effort to explain the process so one could adapt it to their needs. Here's the entire script I use. I run it from within my ~/gdc folder and it installs to my ~/gdc-arm-none-eabi folder. ########################################### # gcc.gnu.org/install/configure.html # http://wiki.dlang.org/GDC/Cross_Compiler/Generic set -e export TARGET=arm-none-eabi export PREFIX=/home/mike/gdc-arm-none-eabi # export PATH=$PATH:$PREFIX/bin # Delete existing binutils source archive and download a new one #------------------------------------------------------------------- export BINUTILS_NAME=binutils-2.24 export BINUTILS_SOURCE_ARCHIVE=$BINUTILS_NAME.tar.bz2 rm -f $BINUTILS_SOURCE_ARCHIVE rm -rf $BINUTILS_NAME wget http://ftpmirror.gnu.org/binutils/$BINUTILS_SOURCE_ARCHIVE # Extract binutils #------------------------------------------------------------------- tar xjfv $BINUTILS_SOURCE_ARCHIVE # Create binutils build directory #------------------------------------------------------------------- export BINUTILS_BUILD_DIR=binutils-build rm -rf $BINUTILS_BUILD_DIR mkdir $BINUTILS_BUILD_DIR # Configure and build binutils #------------------------------------------------------------------- cd $BINUTILS_BUILD_DIR ../$BINUTILS_NAME/configure \ --target=$TARGET \ --prefix=$PREFIX \ --disable-nls \ --disable-multilib \ --with-gnu-as \ --with-gnu-ld \ --disable-libssp \ --disable-werror \ --enable-lto \ --enable-gold \ --enable-plugins make -j4 all make install cd .. # Download GDC #------------------------------------------------------------------- rm -rf gdc mkdir gdc git clone https://github.com/D-Programming-GDC/GDC.git gdc cd gdc # cp -r /home/mike/repositories/GDC/* . git checkout gdc-4.9 cd .. # Delete existing GCC source archive and download a new one #------------------------------------------------------------------- export GCC_NAME=gcc-4.9.0 export GCC_SOURCE_ARCHIVE=$GCC_NAME.tar.bz2 rm -f $GCC_SOURCE_ARCHIVE rm -rf $GCC_NAME wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/$GCC_NAME/$GCC_SOURCE_ARCHIVE # Extract GCC #------------------------------------------------------------------- tar xjfv $GCC_SOURCE_ARCHIVE # Turn GCC into GDC #------------------------------------------------------------------- cd gdc ./setup-gcc.sh ../$GCC_NAME cd .. # Patch GDC #------------------------------------------------------------------- # cd $GCC_NAME # cp ../issue_108.patch . # patch -p1 -i issue_108.patch # cp ../issue_114.patch . # patch -p1 -i issue_114.patch # cp ../issue_114-2.patch . # patch -p1 -i issue_114-2.patch # cd .. # Create GDC build directory #------------------------------------------------------------------- export GCC_BUILD_DIR=gcc-build rm -rf $GCC_BUILD_DIR mkdir $GCC_BUILD_DIR # Configure and build GDC #------------------------------------------------------------------- cd $GCC_BUILD_DIR ../$GCC_NAME/configure --target=$TARGET --prefix=$PREFIX \ --enable-languages=d \ --disable-bootstrap \ --disable-libssp \ --disable-libgomp \ --disable-libmudflap \ --disable-multilib \ --disable-libphobos \ --disable-decimal-float \ --disable-libffi \ --disable-libmudflap \ --disable-libquadmath \ --disable-libssp \ --disable-libstdcxx-pch \ --disable-nls \ --disable-shared \ --disable-threads \ --disable-tls \ --with-gnu-as \ --with-gnu-ld \ --with-cpu=cortex-m4 \ --with-tune=cortex-m4 \ --with-mode=thumb \ --without-headers \ --enable-lto \ --enable-gold \ --enable-plugins make -j4 all-gcc make -j4 all-target-libgcc make install-gcc make install-target-libgcc cd .. ##################################### This is for ARM Thumb (ARM Cortex-M), not ARM9, ARM11, ARM Cortex-A hardware. It is for the barest of bare-metal (no libc, no D runtime, no phobos, etc...), intended for those who want to actually create a D runtime. Mike |
July 13, 2014 Re: Building the arm-linux-gnueabi target | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joseph Rushton Wakeling | On Sunday, 13 July 2014 at 11:17:29 UTC, Joseph Rushton Wakeling via D.gnu wrote: > Yes, I'm interested principally in cross-compiling, both for linux-on-ARM and bare-metal ARM. > > You may also have a look at my minlibd: https://bitbucket.org/timosi/minlibd There is a minimun libdruntime suitable for arm and full toolset and working example for cortex-m4. There is lots of documentation in readme files and in wiki, including instructions how I build a cross gdc compiler. It should be easy to understand and use. If you find anything that is wrong or something you do not understand, please report it here or use the issue tracker there. |
Copyright © 1999-2021 by the D Language Foundation