blob: 6e73784c107916f768a8c11d877f58c3d40ce719 [file] [log] [blame] [edit]
\input texinfo @c -*-texinfo-*-
@c %**start of header
@c makeinfo and texinfo.tex ignore all text before @setfilename.
@c
@c Ordinarily, the setfilename argument ends with .info. But
@c texinfo.info-13 is too long for 14-character filesystems.
@setfilename how-to-build-toolchain.info
@include version.texi
@settitle How To Build Toolchain
@paragraphindent asis
@c %**end of header
@copying
Copyright @copyright{} 2012-@value{CURRENT_YEAR} ARM Ltd.
@end copying
@finalout
@smallbook
@titlepage
@title The Build Process
@subtitle of @value{VERSION_PACKAGE}
@subtitle @value{CURRENT_YEAR}-@value{CURRENT_MONTH}
@c The following two commands start the copyright page
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@c Output the table of contents at the beginning.
@contents
@ifnottex
@node Top
@top How To Build Toolchain
@insertcopying
@end ifnottex
@node Preface
@unnumbered Preface
This manual provides a step-by-step guide to help you build
@samp{GNU Tools for Arm Embedded Processors} on a newly installed
Ubuntu 14.04 LTS 64-bit operating system.
@noindent
Note that the steps below may most likely also work on an Ubuntu which is
not newly installed or version other than 14.04 LTS, but it is not guaranteed.
In this case please go through @ref{Known Issues} before you go, and
you need to solve any other problems you may encounter by yourself. We
highly appreciate if you could share the problems and solutions with us.
@node Ubuntu
@chapter Build GNU Tools for Linux and Windows Platforms
@node Install Ubuntu
@section Install Ubuntu
@c Use '@/' to allow break inside a URL
Ubuntu 14.04.5 ISO image is available from
@uref{http://releases.ubuntu.com@//14.04@//ubuntu-14.04.5-desktop-amd64.iso}.
You can install it as a native system or a virtual machine.
@page
@node Install Dependencies
@section Install Dependencies
@node Install dependencies available in Ubuntu's repositories
@subsection Install dependencies available in Ubuntu's repositories
Execute the commands in this section to install the tools needed to build the
toolchain. Lines starting with '$' denote commands that need to be input as is
while lines starting with '#' are comments and as such do not need to be typed
in.
@noindent
Please note that the "Ignoring Provides line" and "unknown Multi-Arch type"
warnings when executing @code{apt-get update} are harmless and can thus safely
be ignored. Similarly, the warning about @code{update-alternatives} skipping
the creation of symbolic links when executing @code{apt-get install} is also
harmless and can therefore safely be ignored.@*
@smallformat
@codequoteundirected on
@group
@verbatim
# Start root session
$ sudo su
@end verbatim
@end group
@group
@verbatim
# Add extra repositories to be used by APT
$ apt-get install software-properties-common
$ add-apt-repository universe
$ cat >/etc/apt/sources.list.d/xenial.list <<EOF
deb http://archive.ubuntu.com/ubuntu xenial main universe
deb-src http://archive.ubuntu.com/ubuntu xenial main universe
deb http://security.ubuntu.com/ubuntu xenial-security main
EOF
@end verbatim
@end group
@group
@verbatim
# Ensure package for Ubuntu Trusty are chosen by default
$ echo 'APT::Default-Release "trusty";' > /etc/apt/apt.conf.d/00default
@end verbatim
@end group
@group
@verbatim
# Enable use of 32bit packages
$ dpkg --add-architecture i386
$ apt-get update
@end verbatim
@end group
@group
@verbatim
# Install packages
$ apt-get install -y -t xenial \
gcc-mingw-w64-i686 g++-mingw-w64-i686 binutils-mingw-w64-i686
$ apt-get -f install -y \
build-essential \
autoconf \
autogen \
bison \
dejagnu \
flex \
flip \
gawk \
git \
gperf \
gzip \
nsis \
openssh-client \
p7zip-full \
perl \
python-dev \
libisl-dev \
scons \
tcl \
texinfo \
tofrodos \
wget \
zip \
texlive \
texlive-extra-utils
@end verbatim
@end group
@group
@verbatim
# End root session
$exit
@end verbatim
@end group
@codequoteundirected off
@end smallformat
@page
@node Build GNU Tools for Arm Embedded Processors
@section Build GNU Tools for Arm Embedded Processors
@noindent
You are now ready to build the toolchain. Just follow the below instructions,
substituting @code{~/toolchain} by the directory in which you wish to build
the toolchain. Note that if you are not interested in the Windows toolchain,
you can speed up the build by passing the option @code{--skip_steps=mingw32}
to @strong{all} of install-sources.sh, build-prerequisites.sh and
build-toolchain.sh.
@smallexample
@group
@set txicodequoteundirected
# Create a directory in which to build the toolchain and copy the source
# release package into it.
$ mkdir ~/toolchain
$ cp @value{PKG_NAME}-src.tar.bz2 ~/toolchain
# Untar the source tarball.
$ cd ~/toolchain
$ tar -xjf @value{PKG_NAME}-src.tar.bz2
$ cd ./@value{PKG_NAME}
$ ./install-sources.sh
# Build the toolchain(s).
$ cd ../
$ ./build-prerequisites.sh
$ ./build-toolchain.sh
@clear txicodequoteundirected
@end group
@end smallexample
@noindent
Once the build completes you can find the binary and source tarballs in
@* @samp{~/toolchain/@value{PKG_NAME}/pkg}
along with the md5 checksum.
@node Mac
@chapter Build GNU Tools on Mac OS X
In addition to the build on Ubuntu, the build scripts in same source
package can also be used on Mac OS X to natively build a tool chain
whose host is Mac OS X and target is arm-none-eabi. In this step we
will describe how to install required software components and how to
execute the build scripts. After this step you should be able to
generate a same tool chain with the one released. Due to resource
limit, this build process is only tested against Mac OS X 10.7.3 along
with components listed below.
@node Prepare a Mac OS X environment
@section Prepare a Mac OS X environment
The hardware should be an x86-based Mac machine like iMac. The installed
OS should be Mac OS X which is updated to 10.7.3. The way to find out
the Mac OS X version information is to click the @strong{Apple} menu and
choose @strong{About This Mac}.
@sp 1
@center @image{click-apple-menu,,,,.png}
@page
@noindent
For the environment we are using, it looks as below:
@sp 1
@center @image{about-this-mac,,,,.png}
@node Install the Command Line Tools for Xcode
@section Install the Command Line Tools for Xcode
This component is originally part of Apple Xcode but can be installed
separately without Xcode. It can be freely obtained from Apple's official
website @uref{https://developer.apple.com@//downloads/index.action}.
A valid Apple ID is required to login and download. The one we are using
is in the item named @samp{Command Line Tools (OS X Lion) for Xcode - April 2013}.
After the download finishes, just double click the @samp{.dmg} file and
follow the instructions to install it.
@node Build a native version of gcc
@section Build a native version of gcc
Download and install MacPorts for Mac OS X Lion following the steps on MacPorts
website @uref{https://www.macports.org/install.php#installing}.
Then use MacPorts to install gcc5 with the following commands:
Install gcc 5.
@smallexample
$ sudo port install gcc5
@end smallexample
Make sure the newly installed gcc is the one reachable by PATH.
@smallexample
$ sudo ln -s /opt/local/bin/@{x86_64-apple-darwin11-gcc-5.*,gcc@}
$ sudo ln -s /opt/local/bin/@{g++-mp-5,g++@}
$ export PATH=/opt/local/bin:$PATH
@end smallexample
On the Mac, in general, C++ programs need to be built with the system's
exception unwinder which libgcc currently overrides. To make sure we use the
system unwinder, libgcc needs to be overridden. This needs a patched
gcc. Instructions to build such a patched gcc are given below.
Fetch gcc 7 sources.
@smallexample
$ mkdir gcc-7-patched
$ cd gcc-7-patched
$ wget https://ftp.gnu.org/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.xz
@end smallexample
Fetch the unwinder patch.
@smallexample
$ wget https://gcc.gnu.org/ml/gcc-patches/2017-09/txtd196Be63lt.txt -O /tmp/p.txt
@end smallexample
Untar and patch gcc 7.
@smallexample
$ tar xf gcc-7.2.0.tar.xz
$ cd gcc-7.2.0
$ patch -p1 < /tmp/p.txt
@end smallexample
Build gcc 7.
@smallexample
$ mkdir -p ../gcc-7-build/install ../gcc-7-build/obj && cd ../gcc-7-build/obj
$ ../../gcc7.2.0/configure --prefix=$PWD/../install --disable-nls \
--enable-languages=c,c++ --enable-checking=release \
--with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt-local \
--with-isl=/opt/local/ --with-libiconv-prefix=/opt/local/
$ make && make install
@end smallexample
Once the build finishes, put the patched gcc 7 in the path.
@smallexample
$ export PATH=/path/to/gcc-7-build/install/bin:$PATH
@end smallexample
@node Install MacTeX to build PDF format documents
@section Install MacTeX to build PDF format documents
This is an optional step and can be skipped if PDF format documents aren't
needed. The build process will use TeX engineer provided by MacTeX-2012 to
generate PDF format documents. This component can be freely obtained from
its official FTP server
@uref{ftp://ftp.tug.org/historic/systems/mactex/2012/MacTeX.pkg}.
Its original size is approximately 2.1G. Once downloaded, just double click
on the @samp{MacTeX.pkg} file and follow the instructions to install it. By
default the related TeX executable files won't be installed into the default
path like @samp{/usr/bin}, so the Terminal need to be restarted before running
the build scripts.
@node Build the tool chain under Mac OS X
@section Build the tool chain under Mac OS X
With all the dependent packages installed, we can start to natively
build the tool chain on Mac OS. Following are the commands and steps we are
using:
@smallexample
@set txicodequoteundirected
# Copy the src release package into ~/mac-build/ directory
$ cp @value{PKG_NAME}-src.tar.bz2 ~/mac-build
# Prepare source codes
$ cd ~/mac-build
$ tar xjf @value{PKG_NAME}-src.tar.bz2
$ cd ./@value{PKG_NAME}
$ ./install-sources.sh
# Start building the toolchain.
$ ./build-prerequisites.sh
$ ./build-toolchain.sh
@clear txicodequoteundirected
@end smallexample
@node Known Issues
@appendix Known Issues
@itemize @bullet
@item
If you are using different build environment and tools, you might run
into a problem where binutils can not be successfully built. This is
probably caused by binutils bug 13036.
For more information, please refer to
@uref{http://sourceware.org/bugzilla/show_bug.cgi?id=13036}.
@item
Some shell scripts in gcc and other packages are incompatible with
the dash shell, which is the default /bin/sh for Ubuntu 14.04 LTS.
You must make /bin/sh a symbolic link to one of the supported shells:
saying bash. Here on Ubuntu 14.04 LTS system, this can be done by
running following command:
@smallexample
$ sudo dpkg-reconfigure -plow dash
@end smallexample
Then choose @samp{No} in the @samp{Configuring dash} popup dialog and
press enter. You can run following command and check that /bin/sh
points to @samp{bash}:
@smallexample
$ ls -l /bin/sh
...... /bin/sh -> bash
@end smallexample
@bye