Sourcery G++ Lite for ARM GNU Linux (2009q3 67) for Mac OS X
Clone this wiki locally
If you are lazy and would rather just download the binaries, you may do so here. However, you cannot simply extract it to any directory of your choice. Please read the section Create the Final Disk Image below for instructions on how to extract it correctly.
Create a Scratch Disk Image
Some components needed to build the toolchain need to reside on a case-sensitive filesystem. The default filesystem on Mac OS X is case-insensitive. The workaround, therefore, is to create a disk image with a case-sensitive filesystem and use that as our scratch area where we will be building the toolchain.
Use the Disk Utility and create a 6GB image. The Save As field can be anything you like, but the Name field must be exactly
armx-scratch. Select Mac OS Extended (Case-sensitive, Journaled) in the Format field.
Install the Required GNU Tools
We also need to install several GNU tools. Some of the tools we will install may seem redundant since Mac OS X already ships with them (e.g.,
awk). However, the tools that ship with Mac OS X are not compatible with some of the CodeSourcery components. We will install these tools to
/usr/local. It is important to build at least the gettext library as 32-bit as explained later; however, we are choosing to build everything as 32-bit.
tar -x -C /Volumes/armx-scratch -f sed-4.2.tar.gz pushd /Volumes/armx-scratch/sed-4.2 CC='gcc -arch i386' CXX='g++ -arch i386' ./configure --prefix=/usr/local make -j4 install popd rm -rf /Volumes/armx-scratch/sed-4.2
tar -x -C /Volumes/armx-scratch -f gawk-4.0.0.tar.gz pushd /Volumes/armx-scratch/gawk-4.0.0 CC='gcc -arch i386' CXX='g++ -arch i386' ./configure --prefix=/usr/local make -j4 install popd rm -rf /Volumes/armx-scratch/gawk-4.0.0
tar -x -C /Volumes/armx-scratch -f texinfo-4.13a.tar.gz pushd /Volumes/armx-scratch/texinfo-4.13 CC='gcc -arch i386' CXX='g++ -arch i386' ./configure --prefix=/usr/local make -j4 install popd rm -rf /Volumes/armx-scratch/texinfo-4.13
tar (needed by the CodeSourcery build script itself due to the use of options like
tar -x -C /Volumes/armx-scratch -f tar-1.26.tar.gz pushd /Volumes/armx-scratch/tar-1.26 CC='gcc -arch i386' CXX='g++ -arch i386' ./configure --prefix=/usr/local make -j4 install popd rm -rf /Volumes/armx-scratch/tar-1.26
cp from coreutils (needed by the CodeSourcery build script itself due to the use of options like
tar -x -C /Volumes/armx-scratch -f coreutils-8.12.tar.gz pushd /Volumes/armx-scratch/coreutils-8.12 CC='gcc -arch i386' CXX='g++ -arch i386' ./configure --prefix=/usr/local make -j4 cp src/cp /usr/local/bin/ popd rm -rf /Volumes/armx-scratch/coreutils-8.12
readelf from binutils:
tar -x -C /Volumes/armx-scratch -f binutils-2.21.1.tar.gz pushd /Volumes/armx-scratch/binutils-2.21.1 CC='gcc -arch i386' CXX='g++ -arch i386' ./configure --prefix=/usr/local make -j4 cp binutils/readelf /usr/local/bin/ popd rm -rf /Volumes/armx-scratch/binutils-2.21.1
tar -x -C /Volumes/armx-scratch -f gettext-0.18.1.1.tar.gz pushd /Volumes/armx-scratch/gettext-0.18.1.1 CC='gcc -arch i386' CXX='g++ -arch i386' ./configure --prefix=/usr/local make -j4 install popd rm -rf /Volumes/armx-scratch/gettext-0.18.1.1
The build process within the CodeSourcery toolchain generates PDF documentation and needs a TeX distribution installed on the build machine. I was first reluctant to download a giant package just for this purpose and tried BasicTeX from TexLive only to find out that the build failed and gave me some eccentric error that I could not fix. So I gave up and installed the full MacTex distribution. Unfortunately, the latest MacTex distribution at the time of writing (MacTex 2011) is incompatible with building the PDF documentation for the binutils package include in this version of CodeSourcery distribution. So, I had to download MacTex 2010 instead. Finding older releases of MacTex turned out to be a challenge. I googled for
mactex20100907.zip and finally found it. You may want to uninstall MacTex once the toolchain is built. They have very good instructions on how to uninstall their distribution on their website.
Download CodeSourcery G++ Lite Source Tarball
Download arm-2009q3-67-arm-none-linux-gnueabi.src.tar.bz2. Extract the CodeSourcery source tarball by doing:
mkdir -p /Volumes/armx-scratch/src tar -zx -C /Volumes/armx-scratch/src --strip-components 1 -f arm-2009q3-67-arm-none-linux-gnueabi.src.tar.bz2 pushd /Volumes/armx-scratch/src tar zxvf binutils-2009q3-67.tar.bz2 tar zxvf cloog-2009q3-67.tar.bz2 tar zxvf coreutils-2009q3-67.tar.bz2 tar zxvf expat-2009q3-67.tar.bz2 tar zxvf gcc-2009q3-67.tar.bz2 tar zxvf gdb-2009q3-67.tar.bz2 tar zxvf glibc_localedef-2009q3-67.tar.bz2 tar zxvf glibc_ports-2009q3-67.tar.bz2 tar zxvf glibc-2009q3-67.tar.bz2 tar zxvf gmp-2009q3-67.tar.bz2 tar zxvf libiconv-2009q3-67.tar.bz2 tar zxvf linux-2009q3-67.tar.bz2 tar zxvf make-2009q3-67.tar.bz2 tar zxvf mpfr-2009q3-67.tar.bz2 tar zxvf ppl-2009q3-67.tar.bz2 tar zxvf zlib-2009q3-67.tar.bz2 rm binutils-2009q3-67.tar.bz2 rm cloog-2009q3-67.tar.bz2 rm coreutils-2009q3-67.tar.bz2 rm expat-2009q3-67.tar.bz2 rm gcc-2009q3-67.tar.bz2 rm gdb-2009q3-67.tar.bz2 rm glibc_localedef-2009q3-67.tar.bz2 rm glibc_ports-2009q3-67.tar.bz2 rm glibc-2009q3-67.tar.bz2 rm gmp-2009q3-67.tar.bz2 rm libiconv-2009q3-67.tar.bz2 rm linux-2009q3-67.tar.bz2 rm make-2009q3-67.tar.bz2 rm mpfr-2009q3-67.tar.bz2 rm ppl-2009q3-67.tar.bz2 rm zlib-2009q3-67.tar.bz2 popd
Apply Mac OS X Specific Patches
Download armx-2009q3-67-patches.zip. Extract the zip file to
/Volumes/armx-scratch/src. Then apply the patches by doing:
cd /Volumes/armx-scratch/src patch -N -p0 < gcc-44.patch patch -p0 < glibc_localedef-2.10.patch patch -p0 < glibc-2.10.patch
Build the Toolchain
Now clone the ARMx repository on your Mac and run the
build-2009q3-67.sh to build the repository. If everything goes well, you should find the toolchain in the
Create the Final Disk Image
For the exact same reason as before, the toolchain must not only be built on case-sensitive filesystem but reside on a case-sensitive filesystem as well. So we will deploy our toolchain to disk image with a case-sensitive filesystem.
Use the Disk Utility and create an image large enough to hold the toolchain plus any other libraries you intend to add in the future for your custom projects. I recommed selecting a minimum of 500MB. The Save As field can be anything you like, but the Name field must be exactly
arm-x. Select Mac OS Extended (Case-sensitive, Journaled) in the Format field.
Strictly speaking, the Name field does not have to be
arm-x. Doing so, however, will make it easy when we add more libraries to the image as we can simply hard-code the
/Volumes/arm-x path on our build system to deploy our future development libraries to this disk image.
Using a disk image as opposed to deploying the toolchain also has several advantages:
Users don't have to install the tools. They simply double-click the image and voila! all the needed tools become online.
Managing multiple versions of the toolchain becomes very easy. Simply make sure that the correct version is mounted at the time of performing a build to make sure that the desired version of the toolchain is used. No more changing the
The disk image will be mounted automatically once created. Deploy the toolchain to the image by doing:
tar -zx -C /Volumes/arm-x/ --strip-components 1 -f ARMx-2009q3-67.tar.bz2
Using the Disk Image
I recommend adding the
/Volumes/arm-x directory to the user's
PATH. I recommend doing the following:
cat > /etc/paths.d/ARMx <<'EOF0' /Volumes/arm-x/bin EOF0