-
Notifications
You must be signed in to change notification settings - Fork 5
Sourcery G++ Lite for ARM GNU Linux (2009q3 67) for Mac OS X
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.
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.
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., sed
and 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.
sed:
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
awk:
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
texinfo:
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 --owner=0 --group=0
):
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 -d
):
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
gettext:
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 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
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
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 /Volumes/armx-scratch/pkg/
directory.
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
PATH
variable!
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
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