1402 lines
55 KiB
Plaintext

RTEMS Source Builder
====================
:doctype: book
:toc2:
:toclevels: 5
:icons:
:numbered:
image:images/rtemswhitebg.jpg["RTEMS",width="30%"]
Chris Johns <chrisj@rtems.org>
1.0, February 2013
RTEMS Tools From Source
-----------------------
The RTEMS Source Builder is a tool to aid building packages from source. It is
not a package manager. It helps consolidate the details you need to know to
build a package from source in a controlled and verifiable way. The tool is
mainly aimed at developers of software who use tool sets for embedded type
development. Embedded development typically uses cross-compiling tool chains,
debuggers, and debugging aids. Together we call these a tool set. The RTEMS
Source Builder is not limited to this role but designed to fit with-in this
specific niche. It can be used outside of the RTEMS project and we welcome this
happening in other open source or commercial projects.
The RTEMS Source Builder is typically used to build a set of tools or a _build
set_. A _build set_ is a collection of packages and a package is a specific
tool, for example gcc or gdb. The RTEMS Source Builder attempts to support any
host environment that runs Python and you can build the package on. It is not
some sort of magic that can take any piece of source code and make it
build. Someone at some point in time has figured out how to build that package
from source and taught this tool. The RTEMS Source Builder has been tested on:
. FreeBSD
. MacOS (Mountain Lion)
. Ubuntu
. Centos
. Fedora
. Raspbian
Windows support is being added how-ever there are issues with the Python
threading used in the RTEMS Source Builder and the MinGW project's MSYS process
handling of make.
The RTEMS Source Builder has two types configuration data. The first is the
_build set_. A _build set_ describes a collection of packages that define a set
of tools you would use when developing software for RTEMS. For example the
basic GNU tool set is binutils, gcc, and gdb and is the typical base suite of
tools you need for an embedded cross-development type project. The second type
of configuration data is the configuration files and they define how a package
is built. Configuration files are scripts based on the RPM spec file format
and detail the steps needed to build a package. The steps are 'preparation',
'building', and 'installing'. The script support macros, shell expansion,
logic, includes and many more featured need to build packages.
The RTEMS Source Builder does not interact with any host package management
system. There is no automatic dependence checking between various packages you
build or packages or software your host system may have installed. We assume
the build sets and configuration files you are using have been created by
developers who do.
Quick Start
-----------
The quick start will show you how to build a set of RTEMS tools for a supported
architecture.
There is no need to become root or the administrator and we recommend you avoid
doing this. You can build and install the tools anywhere on the host's file
system you as a standard user have read and write access. I recommend you use
your home directory and work under the directory +~/development+. The
examples shown here will do this.
You can use the build _prefix_ to install and maintain different versions of
the tools. Doing this lets you try a new set of tools while not touching your
proven working production set of tools. Once you have proven the new tools are
working rebuild with the _producion_ prefix switching your development to them.
I also suggest you keep your environment to the bare minimum, particularly the
path variable. Using environment variables has been proven over the years to be
difficult to manage in production systems.
Setup
~~~~~
Setup a development work space:
-------------------------------------------------------------
$ cd
$ mkdir -p development/rtems/src
$ cd development/rtems/src
-------------------------------------------------------------
The RTEMS Source Builder is distributed as source. It is Python code so all you
need to do is head over to the RTEMS GIT repository and clone the code directly
from git:
-------------------------------------------------------------
$ git clone git://git.rtems.org/chrisj/rtems-source-builder.git
$ cd rtems-source-builder
-------------------------------------------------------------
Checking
~~~~~~~~
The next step is to check if your host is set up correctly. The RTEMS Source
Builder provides a tool to help:
-------------------------------------------------------------
$ source-builder/sb-check
warning: exe: absolute exe found in path: (__objcopy) /usr/local/bin/objcopy <1>
warning: exe: absolute exe found in path: (__objdump) /usr/local/bin/objdump
error: exe: not found: (_xz) /usr/local/bin/xz <2>
RTEMS Source Builder environent is not correctly set up
$ source-builder/sb-check
RTEMS Source Builder environent is ok <3>
-------------------------------------------------------------
<1> A tool is in the environment path but does not match the shown path.
<2> The executable 'xz' is not found.
<3> The host's environment is set up correct.
The checking tool will output a list of executables not found if problems are
detected. Locate those executables and install them. You may also be given a
list of warnings about executables not in the expected location how-ever the
executable was located somewhere in your environment's path. You will need to
check each tool to determine if this is an issue. An executable not in the
standard location may indicate it is not the host operating system's standard
tool. It maybe ok or it could be buggy.
The <<_host_setups,Host Setups>> section lists packages you should install for
common host operating systems. It maybe worth checking if you have those
installed.
Build Sets
~~~~~~~~~~
The RTEMS tools can be built within the RTEMS Source Builder's source tree. We
recommend you do this so lets change into the RTEMS directory in the RTEMS
Source Builder package:
-------------------------------------------------------------
$ cd rtems
-------------------------------------------------------------
If you are unsure how to specify the build set for the architecure you wish to
build ask the tool:
-------------------------------------------------------------
$ ../source-builder/sb-set-builder --list-bsets <1>
RTEMS Source Builder - Set Builder, v0.1
Examining: config <2>
Examining: ../source-builder/config <2>
4.11/rtems-all.bset <3>
4.11/rtems-arm.bset <4>
4.11/rtems-avr.bset
4.11/rtems-bfin.bset
4.11/rtems-h8300.bset
4.11/rtems-m32c.bset
4.11/rtems-m32r.bset
4.11/rtems-m68k.bset
4.11/rtems-microblaze.bset
4.11/rtems-mips.bset
4.11/rtems-moxie.bset
4.11/rtems-nios2.bset
4.11/rtems-powerpc.bset
4.11/rtems-sh.bset
4.11/rtems-sparc.bset
gnu-tools-4.6.bset
rtems-4.11-base.bset
unstable/4.11/rtems-all.bset <5>
unstable/4.11/rtems-arm.bset
unstable/4.11/rtems-avr.bset
unstable/4.11/rtems-bfin.bset
unstable/4.11/rtems-h8300.bset
unstable/4.11/rtems-m32c.bset
unstable/4.11/rtems-m32r.bset
unstable/4.11/rtems-m68k.bset
unstable/4.11/rtems-microblaze.bset
unstable/4.11/rtems-mips.bset
unstable/4.11/rtems-moxie.bset
unstable/4.11/rtems-powerpc.bset
unstable/4.11/rtems-sh.bset
unstable/4.11/rtems-sparc.bset
-------------------------------------------------------------
<1> Only option needed is +--list-bsets+
<2> The paths inspected. See <<X1,+_configdir+>> variable.
<3> Build all the architectures.
<4> The build set for the ARM architecture.
<5> Unstable tool sets are used by RTEMS developers to test new tool sets. You
are welcome to try them but you must remember they are unstable, can change
at point in time and your application may not work. If you have an issue
with a production tool it may pay to try the unstable tool to see if it has
been resolved.
Building
~~~~~~~~
In this quick start I will build an SPARC tool set.
-------------------------------------------------------------
$ ../source-builder/sb-set-builder --log=l-sparc.txt <1> \
--prefix=$HOME/development/rtems/4.11 <2> 4.11/rtems-sparc <3>
Source Builder - Set Builder, v0.1
Build Set: 4.11/rtems-sparc
config: expat-2.1.0-1.cfg <4>
package: expat-2.1.0-x86_64-freebsd9.1-1
building: expat-2.1.0-x86_64-freebsd9.1-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11 <5>
config: tools/rtems-binutils-2.22-1.cfg <6>
package: sparc-rtems4.11-binutils-2.22-1
building: sparc-rtems4.11-binutils-2.22-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11
config: tools/rtems-gcc-4.7.2-newlib-1.20.0-1.cfg <7>
package: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
building: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11
config: tools/rtems-gdb-7.5.1-1.cfg <8>
package: sparc-rtems4.11-gdb-7.5.1-1
building: sparc-rtems4.11-gdb-7.5.1-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11
cleaning: expat-2.1.0-x86_64-freebsd9.1-1 <9>
cleaning: sparc-rtems4.11-binutils-2.22-1
cleaning: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
cleaning: sparc-rtems4.11-gdb-7.5.1-1
Build Set: Time 0:13:43.616383 <10>
-------------------------------------------------------------
<1> Providing a log file redirects the build output into a file. Logging the
build output provides a simple way to report problems.
<2> The prefix is the location on your file system the tools are installed
into. Provide a prefix to a location you have read and write access. You
can use the prefix to install different version or builds of tools. Just
use the path to the tools you want to use when building RTEMS.
<3> The build set. This is the SPARC build set.
<4> The SPARC build set build the expat library that is used in GDB. This is the
expat configuration.
<5> Installing the expat package to the install prefix.
<6> The binutils build configuration.
<7> The GCC and Newlib build configuration.
<8> The GDB build configuration.
<9> All the packages built are cleaned at the end. If the build fails all the
needed files are present. You may have to clean up by deleting the build
directory.
<10> The time to build the package. This lets you see how different host
hardware or configurations perform.
Your SPARC RTEMS 4.11 tool set will be installed and ready to build RTEMS and
RTEMS applications. When the build runs you will notice the tool fetch the
source code from the internet. These files are cached in a directory called
+source+. If you run the build again the cached files are used.
-------------------------------------------------------------
$ ls $HOME/development/rtems/4.11
bin include lib libexec share sparc-rtems4.11
$ ls $HOME/development/rtems/4.11/bin
sparc-rtems4.11-addr2line sparc-rtems4.11-cpp
sparc-rtems4.11-gcc-ar sparc-rtems4.11-gprof
sparc-rtems4.11-objdump sparc-rtems4.11-size
sparc-rtems4.11-ar sparc-rtems4.11-elfedit
sparc-rtems4.11-gcc-nm sparc-rtems4.11-ld
sparc-rtems4.11-ranlib sparc-rtems4.11-strings
sparc-rtems4.11-as sparc-rtems4.11-g++
sparc-rtems4.11-gcc-ranlib sparc-rtems4.11-ld.bfd
sparc-rtems4.11-readelf sparc-rtems4.11-strip
sparc-rtems4.11-c++ sparc-rtems4.11-gcc
sparc-rtems4.11-gcov sparc-rtems4.11-nm
sparc-rtems4.11-run xmlwf
sparc-rtems4.11-c++filt sparc-rtems4.11-gcc-4.7.2
sparc-rtems4.11-gdb sparc-rtems4.11-objcopy
sparc-rtems4.11-sis
$ $HOME/development/rtems/4.11/bin/sparc-rtems4.11-gcc -v
Using built-in specs.
COLLECT_GCC=/home/chris/development/rtems/4.11/bin/sparc-rtems4.11-gcc
COLLECT_LTO_WRAPPER=/usr/home/chris/development/rtems/4.11/bin/../ \
libexec/gcc/sparc-rtems4.11/4.7.2/lto-wrapper
Target: sparc-rtems4.11
Configured with: ../gcc-4.7.2/configure
--prefix=/home/chris/development/rtems/4.11
--bindir=/home/chris/development/rtems/4.11/bin
--exec_prefix=/home/chris/development/rtems/4.11
--includedir=/home/chris/development/rtems/4.11/include
--libdir=/home/chris/development/rtems/4.11/lib
--libexecdir=/home/chris/development/rtems/4.11/libexec
--mandir=/home/chris/development/rtems/4.11/share/man
--infodir=/home/chris/development/rtems/4.11/share/info
--datadir=/home/chris/development/rtems/4.11/share
--build=x86_64-freebsd9.1 --host=x86_64-freebsd9.1 --target=sparc-rtems4.11
--disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --verbose --with-newlib
--with-system-zlib --disable-nls --without-included-gettext
--disable-win32-registry --enable-version-specific-runtime-libs --disable-lto
--enable-threads --enable-plugin --enable-newlib-io-c99-formats
--enable-newlib-iconv --enable-languages=c,c++
Thread model: rtems
gcc version 4.7.2 20120920 (RTEMS) (GCC)
-------------------------------------------------------------
Installing and Tar Files
~~~~~~~~~~~~~~~~~~~~~~~~
The RTEMS Source Builder can install the built packages directly and optionally it can
create a build set tar file or a tar file per package built. The normal and
default behaviour is to let the RTEMS Source Builder install the tools. The
source will be downloaded, built, installed and cleaned up.
The tar files are created with the full build prefix present. This can cause
problems if you are installing on a host you do not have super user or
administrator rights on if the prefix path references part you do not have
write access t0o. You can use the +--strip-components+ if you tar file has the
option to remove the parts you do not have write access too or you may need to
unpack the tar file somewhere and copy the file tree from the level you have
write access from. Embedding the full prefix path in the tar files lets you know
what the prefix is.
A build set tar file can created by adding +--bset-tar-file+ option to the
+sb-set-builder+ command.
-------------------------------------------------------------
$ ../source-builder/sb-set-builder --log=l-sparc.txt \
--prefix=$HOME/development/rtems/4.11 \
--bset-tar-file <1> 4.11/rtems-sparc
Source Builder - Set Builder, v0.1
Build Set: 4.11/rtems-sparc
config: expat-2.1.0-1.cfg
package: expat-2.1.0-x86_64-freebsd9.1-1
building: expat-2.1.0-x86_64-freebsd9.1-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11 <2>
config: tools/rtems-binutils-2.22-1.cfg
package: sparc-rtems4.11-binutils-2.22-1
building: sparc-rtems4.11-binutils-2.22-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11
config: tools/rtems-gcc-4.7.2-newlib-1.20.0-1.cfg
package: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
building: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11
config: tools/rtems-gdb-7.5.1-1.cfg
package: sparc-rtems4.11-gdb-7.5.1-1
building: sparc-rtems4.11-gdb-7.5.1-1
installing: rtems-4.11-sparc-rtems4.11-1 -> /home/chris/development/rtems/4.11
tarball: tar/rtems-4.11-sparc-rtems4.11-1.tar.bz2 <3>
cleaning: expat-2.1.0-x86_64-freebsd9.1-1
cleaning: sparc-rtems4.11-binutils-2.22-1
cleaning: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
cleaning: sparc-rtems4.11-gdb-7.5.1-1
Build Set: Time 0:15:25.92873
-------------------------------------------------------------
<1> The option to create a build set tar file.
<2> The installation still happens.
<3> Creating the build set tar file.
You can also suppress installing the files using the +--no-install+ option to
the +sb-set-builder+.
-------------------------------------------------------------
$ ../source-builder/sb-set-builder --log=l-sparc.txt \
--prefix=$HOME/development/rtems/4.11 \
--bset-tar-file --no-install <1> 4.11/rtems-sparc
Source Builder - Set Builder, v0.1
Build Set: 4.11/rtems-sparc
config: expat-2.1.0-1.cfg
package: expat-2.1.0-x86_64-freebsd9.1-1
building: expat-2.1.0-x86_64-freebsd9.1-1
config: tools/rtems-binutils-2.22-1.cfg
package: sparc-rtems4.11-binutils-2.22-1
building: sparc-rtems4.11-binutils-2.22-1
config: tools/rtems-gcc-4.7.2-newlib-1.20.0-1.cfg
package: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
building: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
config: tools/rtems-gdb-7.5.1-1.cfg
package: sparc-rtems4.11-gdb-7.5.1-1
building: sparc-rtems4.11-gdb-7.5.1-1
tarball: tar/rtems-4.11-sparc-rtems4.11-1.tar.bz2 <2>
cleaning: expat-2.1.0-x86_64-freebsd9.1-1
cleaning: sparc-rtems4.11-binutils-2.22-1
cleaning: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
cleaning: sparc-rtems4.11-gdb-7.5.1-1
Build Set: Time 0:14:11.721274
$ ls tar
rtems-4.11-sparc-rtems4.11-1.tar.bz2
-------------------------------------------------------------
<1> The option to supressing installing the packages.
<2> Create the build set tar.
A package tar file can be created by adding the +--pkg-tar-files+ to the
+sb-set-builder+ command. This creates a tar file per package built in the
build set.
-------------------------------------------------------------
$ ../source-builder/sb-set-builder --log=l-sparc.txt \
--prefix=$HOME/development/rtems/4.11 \
--bset-tar-file --pkg-tar-files <1> --no-install 4.11/rtems-sparc
Source Builder - Set Builder, v0.1
Build Set: 4.11/rtems-sparc
config: expat-2.1.0-1.cfg
package: expat-2.1.0-x86_64-freebsd9.1-1
building: expat-2.1.0-x86_64-freebsd9.1-1
config: tools/rtems-binutils-2.22-1.cfg
package: sparc-rtems4.11-binutils-2.22-1
building: sparc-rtems4.11-binutils-2.22-1
config: tools/rtems-gcc-4.7.2-newlib-1.20.0-1.cfg
package: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
building: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
config: tools/rtems-gdb-7.5.1-1.cfg
package: sparc-rtems4.11-gdb-7.5.1-1
building: sparc-rtems4.11-gdb-7.5.1-1
tarball: tar/rtems-4.11-sparc-rtems4.11-1.tar.bz2
cleaning: expat-2.1.0-x86_64-freebsd9.1-1
cleaning: sparc-rtems4.11-binutils-2.22-1
cleaning: sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1
cleaning: sparc-rtems4.11-gdb-7.5.1-1
Build Set: Time 0:14:37.658460
$ ls tar
expat-2.1.0-x86_64-freebsd9.1-1.tar.bz2 sparc-rtems4.11-binutils-2.22-1.tar.bz2
sparc-rtems4.11-gdb-7.5.1-1.tar.bz2 <2> rtems-4.11-sparc-rtems4.11-1.tar.bz2 <3>
sparc-rtems4.11-gcc-4.7.2-newlib-1.20.0-1.tar.bz2
-------------------------------------------------------------
<1> The option to create packages tar files.
<2> The GDB package tar file.
<3> The build set tar file. All the others in a single tar file.
Why Build from Source ?
-----------------------
The RTEMS Source Builder is not a replacement for the binary install systems
you have with commercial operating systems or open source operating system
distributions. Those products and distributions are critically important and
are the base that allows the Source Builder to work. The RTEMS Source Builder
sits somewhere between you manually entering the commands to build a tool set
and a tool such as +yum+ or +apt-get+ to install binary packages made
specifically for your host operating system. Building manually or installing a
binary package from a remote repository are valid and real alternatives while
the Source Builder is attempting to provide a specific service of repeatably
being able to build tool sets from source code.
If you are developing a system or product that has a long shelf life or is used
in a critical piece of infastructure that has a long life cycle being able to
build from source is important. It insulates the project from the fast ever
changing world of the host development machines. If your tool set is binary and
you have lost the ability to build it you have lost a degree of control and
flexibility open source gives you. Fast moving host environments are
fantastic. We have powerful multi-core computers with huge amounts of memory
and state of the art operating systems to run on them how-ever the product or
project you are part of may need to be maintained well past the life time of
these host. Being able to build from source an important and critical part of
this process because you can move to a newer host and create an equivalent tool
set.
Building from source provides you with control over the configuration of the
package you are building. If all or the most important dependent parts are
built from source you limit the exposure to host variations. For example the
GNU C compiler (gcc) currently uses a number of 3rd party libraries internally
(gmp, mpfr, etc). If your validated compiler generating code for your target
processor is dynamically linked against the host's version of these libraries
any change in the host's configuration may effect you. The changes the host's
package management system makes may be perfectly reasonible in relation to the
distribution being managed how-ever this may not extend to you and your
tools. Building your tools from source and controlling the specific version of
these dependent parts means you are not exposing yourself to unexpected and
often difficult to resolve problems. On the other side you need to make sure
your tools build and work with newer versions of the host operating
sytem. Given the stability of standards based libraries like 'libc' and ever
improving support for standard header file locations this task is becoming
easier.
The RTEMS Source Builder is designed to be audited and incorporated into a
project's verifcation and validation process. If your project is developing
critical applications that needs to be traced from source to executable code in
the target, you need to also consiser the tools and how to track them.
If your IT department maintains all your computers and you do not have suitable
rights to install binary packages, building from source lets you create your
own tool set that you install under your home directory. Avoiding installing
any extra packages as a super user is always helpful in maintaining a secure
computing environment.
Configuration
-------------
The RTEMS Source Builder has two types of configuration data:
. Build Sets
. Package Build Configurations
By default these files can be located in two separate directories and
searched. The first directory is +config+ in your current working directory
(+_topdir+) and the second is +config+ located in the base directory the RTEMS
Source Builder command you run (+_sbdir+). The RTEMS directory +rtems+ located
at the top of the RTEMS Source Builder source code is an example of a specific
build configuration directory. You cane create custom or private build
configurations and if you run the RTEMS Source Builder command from that
directory your configurations will be used.
[[X1]] The configuration search path is the macro variable and is reference as
+%\{_configdir\}+. It's default is defined as:
-------------------------------------------------------------
_configdir : dir optional %{_topdir}/config:%{_sbdir}/config <1>
-------------------------------------------------------------
<1> The +_topdir+ is the directory you run the command from and +_sbdir+ is
the location of the RTEMS Source Builder command.
Build set files have the file extension +.bset+ and the package build
configuration files have the file extension of +.cfg+. The +sb-set-builder+
command will search for _build sets_ and the +sb-builder+ commands works with
package build configuration files.
Both types of configuration files use the \'#' character as a comment
character. Anything after this character on the line is ignored. There is no
block comment.
Macros and Defaults
~~~~~~~~~~~~~~~~~~~
The RTEMS Source Builder uses a table of _macros_ called the _defaults_. The
values the _defaults_ are initialised to are dependent on your host. This lets
the Source Builder handle differences in the hosts. Build set and configuration
files can define new values extending the defaults. For example builds are
given a release number. This is typically a single number at the end of the
package name. For RTEMS this is set in the top level build set configuration
file with:
-------------------------------------------------------------
%define release 1
-------------------------------------------------------------
Once defined if can be accessed in a build set or package configuration file
with:
-------------------------------------------------------------
%{release}
-------------------------------------------------------------
The +sb-defaults+ command lists the defaults for your host. I will not include
the output of this command beause of its size.
-------------------------------------------------------------
$ ../source-builder/sb-defaults
-------------------------------------------------------------
Build Set Files
~~~~~~~~~~~~~~~
Build set files lets you list the packages in the build set you are defining
and have a file extension of +.bset+. Build sets can define macro variables,
inline include other files and reference other build set or package
configuration files.
Defining macros is performed with the +%define+ directive:
-------------------------------------------------------------
%define _target m32r-rtems4.11
-------------------------------------------------------------
The top level RTEMS build set files specify the target. This is used by other
referenced files or an undefined macro error is reported.
Inline including another file with the +%include+ directive continues
processing with the specified file returning to carry on from just after the
include point.
-------------------------------------------------------------
%include rtems-4.11-base.bset
-------------------------------------------------------------
This includes the RTEMS 4.11 base set of defines and checks. The configuration
paths as defined by +_configdir+ are scanned. The file extension is optional.
You reference build set or package configuration files by placing the file name
on a single line.
-------------------------------------------------------------
tools/rtems-binutils-2.22-1
-------------------------------------------------------------
The +_configdir+ path is scanned for +tools/rtems-binutils-2.22-1.bset+ or
+tools/rtems-binutils-2.22-1.cfg+. Build set files take precedent over package
configuration files. If +tools/rtems-binutils-2.22-1+ is a build set a new
instance of the build set processor is created and if the file is a package
configuration the package is built. This all happens once the build set file
has finished being scanned.
Configuration Files
~~~~~~~~~~~~~~~~~~~
Configuration files specify how to build a package. Configuration files are
scripts and have a +.cfg+ file extension. The script format is based loosely on
the RPM spec file format how-ever the use and purpose in this tool does not
compare with the functionality and therefore the important features of the spec
format RPM needs and uses.
Script Language
~~~~~~~~~~~~~~~
The script language is implemented in terms of directives. The directive list is:
[horizontal]
+%prep+:: The source preparation shell commands.
+%build+:: The build shell commands.
+%install+:: The package install shell commands.
+%clean+:: The package clean shell commands.
+%include+:: Inline include another configuration file.
+%package+:: The package being built.
+%name+:: The name of the package.
+%description+:: A package description. Useful when reporting about a build.
+%release+:: The package release. A number that is the release as built by this tool.
+%version+:: The package's verison string.
+%buildarch+:: The build architecture.
+%setup+:: Setup a source package.
+%source+:: Define a source code package. This directive is number.
+%patch+:: Define a patch. This directive is number.
+%warning+:: Print the following string as a warning and continue.
+%error+:: Print the following string as an error and exit.
+%define+:: Define a macro. Macros cannot be redefined, you must first undefine it.
+%undefine+:: Undefine a macro.
+%if+:: Start a conditional logic block that ends with a +%endif+.
+%ifn+:: Inverted start of a conditional logic block.
+%ifarch+:: Test the architecture against the following string.
+%ifnarch+:: Inverted test of the architecture
+%ifos+:: Test the host operating system.
+%else+:: Start the _else_ conditional logic block.
+%endfi+:: End the conditional logic block.
+%bconf_with+:: Test the build condition _with_ setting. This is the +--with-*+
command line option.
+%bconf_without+:: Test the build condition _without_ setting. This is the
+--without-*+ command line option.
%prep
^^^^^
The +%prep+ directive starts a block that continues until the next block
directive. The _prep_ or preparation block defines the setup of the package's
source and is a mix of RTEMS Source Builder directives and shell scripting. The
sequence is typically +%setup+ directives for source, +%patch+ directives to
patch the source mixed with some shell commands to correct any source issues.
A +%prep+ section starts with a +%setup+ command. This creates the package
source top level directory then is followed by the first source file.
-------------------------------------------------------------
<1> <2>
%setup -q -c -T -n %{name}-%{version}
%setup -q -T -D -n %{name}-%{version} -a0
-------------------------------------------------------------
<1> The package's name.
<2> The version of the package.
The source for a package is declared with the +%source*+ directive where +*+ is
a number. For example +%source0+ is the source 0 tar file and is defined with
something similar to this:
-------------------------------------------------------------
Source0: http://ftp.gnu.org/gnu/gdb/gdb-%{gdb_version}.tar.bz2
-------------------------------------------------------------
This URL is the primary location of the GNU GCC source code and the RTEMS
Source Builder can download the file from this location and by inspecting the
file extension use +bzip2+ decompression. When the +%prep+ section is processed
a check of the local +source+ directory is made to see if the file has already
been downloaded. If not found in the source cache directory the package is
downloaded from the URL. You can append other base URLs via the command line
option +--url+. This option accepts a comma delimited list of sites to try.
You can combine the source directive with connditional logic to implement a
default that can be overriden in the top level files. This lets you reuse a
generic build script with different sources. This happens if you have a private
source package with local modifications. The following example is taken from
the +gcc-4.8-1.cfg+ build script.
-------------------------------------------------------------
%ifn %{defined Source0}
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-%{gcc_version}.tar.bz2
VersionContro0: git clone git://gcc.gnu.org/git/gcc.git <1>
%endif
-------------------------------------------------------------
<1> The version control directive is currently not implemented.
You could optionally have a few source files that make up the package. For
example GNU's GCC was a few tar files for a while and it is now a single tar
file. Support for multiple source files can be conditionally implemented with
the following scripting:
-------------------------------------------------------------
%{?source1:%setup -q -T -D -n %{name}-%{version} -a1}
-------------------------------------------------------------
The +source1+ macro value is checked and if present the command string after
the +:+ is executed. It is common to see a number of these present allowing top
level configuration files including a base configuration the ability to define
a number of source packages.
-------------------------------------------------------------
%{?source1:%setup -q -T -D -n %{name}-%{version} -a1}
%{?source2:%setup -q -T -D -n %{name}-%{version} -a2}
%{?source3:%setup -q -T -D -n %{name}-%{version} -a3}
-------------------------------------------------------------
Patching also occurs during the preparation stage. Patches are handled in a
similar way to the source packages. Most patches are based around the top of
the source tree. This is an example of the patch scripting for the GCC 4.8
series of compilers:
-------------------------------------------------------------
cd gcc-%{gcc_version} <1>
%{?patch0:%patch0 -p1} <2>
%{?patch1:%patch1 -p1}
%{?patch2:%patch2 -p1}
%{?patch3:%patch3 -p1}
%{?patch4:%patch4 -p1}
%{?patch5:%patch5 -p1}
%{?patch6:%patch6 -p1}
%{?patch7:%patch7 -p1}
%{?patch8:%patch8 -p1}
%{?patch9:%patch9 -p1}
cd .. <3>
-------------------------------------------------------------
<1> Change from the top of the source tree into the package being patched's top
directory.
<2> The conditional macro expansion checks if +%patch0+ is defined and if
defined issues the +%patch0" directive giving +-p1+ to the patch command.
<3> Return back to the top of the source tree.
%build
^^^^^^
The +%build+ directive starts a block that continues until the next block
directive. The build block is a series of shell commands that execute to build
the package. It assumes all source code has been unpacked, patch and adjusted
so the build will succeed.
The following is an example take from the GutHub STLink project [footnote:
STLink is a JTAG debugging device for the ST ARM family of processors.]:
-------------------------------------------------------------
%build
export PATH="%{_bindir}:${PATH}" <1>
cd texane-stlink-%{stlink_version} <2>
./autogen.sh <3>
%if "%{_build}" != "%{_host}"
CFLAGS_FOR_BUILD="-g -O2 -Wall" \ <4>
%endif
CPPFLAGS="-I $SB_TMPPREFIX/include/libusb-1.0" \ <5>
CFLAGS="$SB_OPT_FLAGS" \
LDFLAGS="-L $SB_TMPPREFIX/lib" \
./configure \ <6>
--build=%{_build} --host=%{_host} \
--verbose \
--prefix=%{_prefix} --bindir=%{_bindir} \
--exec-prefix=%{_exec_prefix} \
--includedir=%{_includedir} --libdir=%{_libdir} \
--mandir=%{_mandir} --infodir=%{_infodir}
%{__make} %{?_smp_mflags} all <7>
cd ..
-------------------------------------------------------------
<1> Setup the PATH environment variable. This is not always needed.
<2> This package builds in the source tree so enter it.
<3> The package is actually checked directly out from the github project and so
it needs its autoconf and automake files generated.
<4> Flags for a crosscompiled build.
<5> Various settings passed to configure to customise the build. In this
example an include path is being set to the install point of _libusb_. This
package requires _libusb_ is build before it.
<6> The +configure+ command. The RTEMS Source Builder provides all the needed
paths as macro variables. You just need to provide them to +configure+.
<7> Running make. Do not use +make+ directly, use the RTEMS Source Builder's
defined value. This value is specific to the host. A large number of
packages need GNU make and on BSD systems this is +gmake+. You can
optionally add the SMP flags if the packages build system can handle
parallel building with multiple jobs. The +_smp_mflags+ value is
automatically setup for SMP hosts to match the number of cores the host has.
%install
^^^^^^^^
The +%install+ directive starts a block that continues until the next block
directive. The install block is a series of shell commands that execute to
install the package. You can assumes the package has build correctly when this
shell script executes.
Never install the package to the actual _prefix_ the package was built
with. Always install to the RTEMS Source Builder's temporary path defined in
the macro variable +__tmpdir+. The RTEMS Source Builder sets up a shell
environment variable called +SB_BUILD_ROOT+ as the standard install point. Most
packages support adding +DESTDIR=+ to the _make install_ command.
Looking at the same example as in <<_build, %build>>:
-------------------------------------------------------------
%install
export PATH="%{_bindir}:${PATH}" <1>
rm -rf $SB_BUILD_ROOT <2>
cd texane-stlink-%{stlink_version} <3>
%{__make} DESTDIR=$SB_BUILD_ROOT install <4>
cd ..
-------------------------------------------------------------
<1> Setup the PATH environment variable. This is not always needed.
<2> Clean any installed files. This make sure the install is just what
the package installs and not any left over files from a broken build or
install.
<3> Enter the build directory. In this example it just happens to be the source
directory.
<4> Run +make install_ to install the package overriding the +DESTDIR+ make
variable.
%clean
^^^^^^
%include
^^^^^^^^
%package
^^^^^^^^
%name
^^^^^
%description
^^^^^^^^^^^^
%release
^^^^^^^^
%version
^^^^^^^^
%buildarch
^^^^^^^^^^
%setup
^^^^^^
%source
^^^^^^^
%patch
^^^^^^
%warning
^^^^^^^^
%error
^^^^^^
%define
^^^^^^^
%undefine
^^^^^^^^^
%if
^^^
%ifn
^^^^
%ifarch
^^^^^^^
%ifnarch
^^^^^^^^
%ifos
^^^^^
%else
^^^^^
%endfi
^^^^^^
%bconf_with
^^^^^^^^^^^
%bconf_without
^^^^^^^^^^^^^^
RTEMS Build Sets
----------------
Configuration files are typically structured as outer files that are specific
to a version of the package being built and become more generic as you move
deeper. The outter layers are required to define various macro.
Set Builder and the Builder
~~~~~~~~~~~~~~~~~~~~~~~~~~~
The RTEMS Source Builder provides two commands, the +sb-set-builder+ to build sets of
packages and the +sb-builder+ to build a specific package. The set builder uses
the builder to build a set of packages. You could write a shell script that did
the same thing so the set builder is a convenience command that allows you to
define and control specific features of the packages you are building. The set
builder looks for files with the +.bset" extension in the +config+
directories. The builder command uses configuration files which have the +.cfg+
file extension to control the build. The configuration files are written in a
script language based on the _spec_ format the RPM builder uses. They also
live in the +config+ directories.
The build set files for the RTEMS 4.11 can be found in +rtems/4.11/+. There is
one per architecture RTEMS supports. This allows variation between
architectures is bugs or patches are needed. Sometimes a specific version of a
tool may needed to resolve an issue in an architecture, how-ever that version
may have a bug in another architecture. We also want to limit architecture
specific patches to the architecture it relates to. This avoids any crosstalk a
patch may have with another architecture. An example of this is the NIOS2
tools. They are built using a version of GCC released by Altera currently not
in the Free Software Foundation's GCC project.
This is the build set for the Blackfin processor or +bfin+.
-------------------------------------------------------------
#
# Tools Set for RTEMS 4.10
#
%define rtems_version 4.10 <1>
%define release 1 <2>
package: rtems-%{rtems_version}-%{_target}-%{release} <3>
#
# Project custom message
#
%define gcc_version_message RTEMS %{rtems_version}-%{release},gcc-%{gcc_version}/newlib-%{newlib_version} <4>
#
# Tools configuration.
#
rtems-binutils-2.20.1-1 <5>
rtems-gcc-4.4.7-newlib-1.18.0-1
rtems-gdb-7.3.1-1
-------------------------------------------------------------
<1> Define the version of RTEMS.
<2> Define the release. This allows us to number the tool releases.
<3> The top level name of the package. The finaly tar file name.
<4> The GCC configuration allow a custom message to be embedded into GCC.
<5> The list of packages this build set contains.
Currently the syntax of the set builder scripts is limited. It support
comments, the package command, macros (the +%{}+), and defining macros
(+%define+). It is planned to allow more of the configuration file syntax in
the future.
The builder uses configuration files that allow the full range of the
configuration script syntax. Configuration files follow most of the RPM spec
file format. They support macros and logic as well as the ability to include
other configuration files. The ability to include other configuration files
allow a simple way to configuration control the builds. Configuration files
have four main areas:
. Descriptions and definitions.
+
The description lists various useful pieces of information about the
package. None of this is currently enforced how-ever it is good practice to
provide it. The definitions are the sources and the patches.
. Preparation
+
The preparation is the set up of the source code ready for building. The set up
follows the unusual command structure used by RPM. The follwing macro
trickshows how to conditional patch the source if a patch has been declared.
+
-------------------------------------------------------------
cd expat-%{expat_version}
%{?patch0:%patch0 -p1}
cd ..
-------------------------------------------------------------
+
. Build
+
The build phase. This is a fragment of shell script that can be mixed with
conditional configuration scripting to create the list of build commands.
+
. Install
+
The install phase. Again this is a fragment of shell script.
This is a configuration script to build gdb:
-------------------------------------------------------------
#
# GDB 7.xx Version 1.
#
# This configuration file configure's, make's and install's gdb.
#
%include %{_configdir}/checks.cfg <1>
Name: %{_target}-gdb-%{gdb_version}-%{release} <2>
Summary: GDB v%{gdb_version} for target %{_target} on host %{_host}
Version: %{gdb_version}
Release: %{release}
URL: http://www.gnu.org/software/gdb/
BuildRoot: %{_tmppath}/%{name}-root-%(%{__id_u} -n)
#
# Source
#
Source0: http://ftp.gnu.org/gnu/gdb/gdb-%{gdb_version}.tar.bz2 <3>
VersionControl0 git clone git://sourceware.org/git/gdb.git
#
# Prepare the source code.
#
%prep <4>
%setup -q -c -T -n %{name}-%{version}
cd gdb-%{gdb_version}
%{?patch0:%patch0 -p1}
cd ..
%build <5>
export PATH="%{_bindir}:${PATH}"
mkdir -p build
cd build
%if "%{_build}" != "%{_host}"
CFLAGS_FOR_BUILD="-g -O2 -Wall" \
%endif
CFLAGS="$SB_OPT_FLAGS" \
../gdb-%{gdb_version}/configure \
--build=%{_build} --host=%{_host} \
--target=%{_target} \
--verbose --disable-nls \
--without-included-gettext \
--disable-win32-registry \
--disable-werror \
--enable-sim \
--with-expat \
--with-python \
--prefix=%{_prefix} --bindir=%{_bindir} \
--exec-prefix=%{_exec_prefix} \
--includedir=%{_includedir} --libdir=%{_libdir} \
--mandir=%{_mandir} --infodir=%{_infodir}
%{__make} %{?_smp_mflags} all
cd ..
%install <6>
export PATH="%{_bindir}:${PATH}"
rm -rf $SB_BUILD_ROOT
cd build
%{__make} DESTDIR=$SB_BUILD_ROOT install
# Dropped in FSF-binutils-2.9.5, but Cygwin still ships it.
rm -rf $SB_BUILD_ROOT%{_infodir}/configure.info*
rm -f $SB_BUILD_ROOT%{_infodir}/dir
touch $SB_BUILD_ROOT%{_infodir}/dir
cd ..
-------------------------------------------------------------
<1> Including a file. The +_configdir+ macro searchs a list of paths.
<2> The description section.
<3> The source file as a URL. If not found in the +sources+ directories it is
downloaded.
<4> Preparing the source code.
<5> The commands to build +gdb+.
<6> The installation phase. Notice the +DESTDIR=+ feature is used.
Controlling Configurations
~~~~~~~~~~~~~~~~~~~~~~~~~~
This is a simple process of including the specific pieces you need. There
typically is three layers where the top level is specific and each sub-layer is
more generic configured by the layer above it. The typical layering is:
. Build Set
. Package definition
. Package configuration
The build set defines the packages to be built plus any specific configuration
needed. Some packages default to standard values if the build set does not
provide any specific configuration and some configurations raise an error
indicating a required configuration is missing.
Using the RTEMS 4.10 Tools Set build as an example the build set configuration
is:
-------------------------------------------------------------
#
# Tools Set for RTEMS 4.10
#
%define rtems_version 4.10
%define release 1 <1>
package: rtems-%{rtems_version}-%{_target}-%{release}
#
# Project custom message
#
%define gcc_version_message RTEMS %{rtems_version}-%{release},gcc-%{gcc_version}/newlib-%{newlib_version}
#
# Tools configuration.
#
rtems-binutils-2.20.1-1 <2>
rtems-gcc-4.4.7-newlib-1.18.0-1
rtems-gdb-7.3.1-1
-------------------------------------------------------------
<1> The release of the RTEMS 4.10 tools package.
<2> The build configurations. These reference the specific version of the tools
including the related patches. You should note the configurations referenced
are RTEMS specific, that is prefixed with +rtems-+.
The GCC and Newlib file +rtems-gcc-4.4.7-newlib-1.18.0-1+ is:
-------------------------------------------------------------
#
# GCC 4.4.7, Newlib 1.18.0
#
%include %{_configdir}/checks.cfg <1>
%include %{_configdir}/base.cfg <2>
%define gcc_version 4.4.7 <3>
%define newlib_version 1.18.0
%define mpfr_version 2.4.1
%define mpc_version 0.8.2
%define gmp_version 5.0.5
%define with_threads 1 <4>
%define with_plugin 0
%define with_iconv 1
#
# AVR C++ does not work.
# configure: error: unable to detect exception model
#
%if %{_target} == avr-rtems4.10 <5>
%define enable_cxx 0
%endif
#
# M32C C++ does not work.
# gcc-4.4.7/libstdc++-v3/src/mt_allocator.cc:76: error: cast from 'void*' to 'size_t' loses precision
#
%if %{_target} == m32c-rtems4.10
%define enable_cxx 0
%endif
%ifn %{defined enable_cxx} <6>
%define enable_cxx 1
%endif
#
# The RTEMS 4.10 patches
#
Patch0: gcc-core-4.4.7-rtems4.10-20120314.diff <7>
%if %{enable_cxx}
Patch1: gcc-g++-4.4.7-rtems4.10-20120314.diff
%endif
Patch10: newlib-1.18.0-rtems4.10-20110518.diff
#
# The gcc/newlib build instructions. We use 4.4 Release 1.
#
%include %{_configdir}/gcc-4.4-1.cfg <8>
-------------------------------------------------------------
<1> Perform some standard checks such as the release being set.
<2> Set up some standard macros needed by most configure type packages.
<3> The specific versions of the various parts that make a GCC embedded
cross-compiler.
<4> Configure some specific parts of GCC and Newlib for RTEMS.
<5> Disable C++ for the AVR target because it does not build for RTEMS.
<6> Default is to build C++.
<7> The various patches. This file's revision increases with each patch change.
<8> The generic GCC/Newlib build configuration for gcc-4.4.x.
Project Configuration
~~~~~~~~~~~~~~~~~~~~~
The RTEMS Source Builder has a +config+ and +patches+ directory that contain some
useful and often needed configurations and patches. You do not need to add your
project specific configurations into the RTEMS Source Builder. You can create a
private set and then use the RTEMS Source Builder to build your packages.
Create a +config+ directory and place your build sets and configuration in
them. If you have private patches add them to a +patches+ directory next to the
+config+ directiory. When you run a RTEMS Source Builder command it will first search
the for the specific file then the local +config+ directoy then the Source
Builder's +config+ directory. The same goes for +patches+.
For example of this set up look in the +rtems+ directory in the Source
Builder. It is actually a standard alone project configuration private to the
RTEMS project.
If you are an open source project and you find the RTEMS Source Builder useful and
would like your configuration held in the RTEMS Source Builder's repository please
contact me directly.
The Builder
~~~~~~~~~~~
TBD
Commands
--------
Checker (sb-check)
~~~~~~~~~~~~~~~~~~
This commands checks your system is set up correctly.
-------------------------------------------------------------
$ ./source-builder/sb-check --help
sb-check: [options] [args]
RTEMS Source Builder, an RTEMS Tools Project (c) 2012 Chris Johns
Options and arguments:
--force : Create directories that are not present
--trace : Trace the execution (not current used)
--dry-run : Do everything but actually run the build
--warn-all : Generate warnings
--no-clean : Do not clean up the build tree
--no-smp : Run with 1 job and not as many as CPUs
--rebuild : Rebuild (not used)
--host : Set the host triplet
--build : Set the build triplet
--target : Set the target triplet
--prefix path : Tools build prefix, ie where they are installed
--prefixbase path :
--topdir path : Top of the build tree, default is $PWD
--configdir path : Path to the configuration directory, default: ./config
--builddir path : Path to the build directory, default: ./build
--sourcedir path : Path to the source directory, default: ./source
--tmppath path : Path to the temp directory, default: ./tmp
--log file : Log file where all build out is written too
--url url : URL to look for source
--targetcflags flags : List of C flags for the target code
--targetcxxflags flags : List of C++ flags for the target code
--libstdcxxflags flags : List of C++ flags to build the target libstdc++ code
--with-<label> : Add the --with-<label> to the build
--without-<label> : Add the --without-<label> to the build
-------------------------------------------------------------
Set Builder (sb-set-builder)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This command builds a set as described in a build set. Build set files have the
extension of +.bset+.
-------------------------------------------------------------
$ ./source-builder/sb-set-builder --help
sb-set-builder: [options] [args]
RTEMS Source Builder, an RTEMS Tools Project (c) 2012 Chris Johns
Options and arguments:
--force : Create directories that are not present
--trace : Trace the execution (not current used)
--dry-run : Do everything but actually run the build
--warn-all : Generate warnings
--no-clean : Do not clean up the build tree
--no-smp : Run with 1 job and not as many as CPUs
--rebuild : Rebuild (not used)
--host : Set the host triplet
--build : Set the build triplet
--target : Set the target triplet
--prefix path : Tools build prefix, ie where they are installed
--prefixbase path :
--topdir path : Top of the build tree, default is $PWD
--configdir path : Path to the configuration directory, default: ./config
--builddir path : Path to the build directory, default: ./build
--sourcedir path : Path to the source directory, default: ./source
--tmppath path : Path to the temp directory, default: ./tmp
--log file : Log file where all build out is written too
--url url : URL to look for source
--targetcflags flags : List of C flags for the target code
--targetcxxflags flags : List of C++ flags for the target code
--libstdcxxflags flags : List of C++ flags to build the target libstdc++ code
--with-<label> : Add the --with-<label> to the build
--without-<label> : Add the --without-<label> to the build
--list-configs : List available configurations
--list-bsets : List available build sets
-------------------------------------------------------------
Set Builder (sb-builder)
~~~~~~~~~~~~~~~~~~~~~~~~
This command builds a configuration as described in a configuration
file. Configuration files have the extension of +.cfg+.
-------------------------------------------------------------
$ ./source-builder/sb-builder --help
sb-builder: [options] [args]
RTEMS Source Builder, an RTEMS Tools Project (c) 2012 Chris Johns
Options and arguments:
--force : Create directories that are not present
--trace : Trace the execution (not current used)
--dry-run : Do everything but actually run the build
--warn-all : Generate warnings
--no-clean : Do not clean up the build tree
--no-smp : Run with 1 job and not as many as CPUs
--rebuild : Rebuild (not used)
--host : Set the host triplet
--build : Set the build triplet
--target : Set the target triplet
--prefix path : Tools build prefix, ie where they are installed
--prefixbase path :
--topdir path : Top of the build tree, default is $PWD
--configdir path : Path to the configuration directory, default: ./config
--builddir path : Path to the build directory, default: ./build
--sourcedir path : Path to the source directory, default: ./source
--tmppath path : Path to the temp directory, default: ./tmp
--log file : Log file where all build out is written too
--url url : URL to look for source
--targetcflags flags : List of C flags for the target code
--targetcxxflags flags : List of C++ flags for the target code
--libstdcxxflags flags : List of C++ flags to build the target libstdc++ code
--with-<label> : Add the --with-<label> to the build
--without-<label> : Add the --without-<label> to the build
--list-configs : List available configurations
-------------------------------------------------------------
Host Setups
-----------
MacOS X
~~~~~~~
The RTEMS Source Builder has been tested on Mountain Lion. You will need to
install the Xcode app using the _App Store_ tool, run Xcode and instal the
Developers Tools package within Xcode.
Ubuntu
~~~~~~
The latest testing was with 12.10. A minimal installation was used and the
following packages installed.
-------------------------------------------------------------
$ sudo apt-get build-dep binutils gcc g++ gdb unzip git
-------------------------------------------------------------
Raspbian
~~~~~~~~
The is the Debian distribution for the Raspberry Pi. The following packages are
required.
-------------------------------------------------------------
$ sudo apt-get install autoconf automake bison flex binutils gcc g++ gdb \
texinfo unzip ncurses-dev python-dev
-------------------------------------------------------------
It is recommended you get Model B of the Pi with 512M of memory and to mount a
remote disk over the network. The tools can be build with a prefix under your
home directory as recommended and end up on the SD card.
CentOS 6
~~~~~~~~
The following packages are required on a minimal CentOS 6.3 installation:
-------------------------------------------------------------
# yum install autoconf automake binutils gcc gcc-c++ gdb make patch \
bison flex xz unzip ncurses-devel texinfo zlib-devel python-devel git
-------------------------------------------------------------
The minimal CentOS distrbution is a specific DVD that installs a minimal
system. If you use a full system some of these packages may have been
installed.
History
-------
The RTEMS Source Builder is a stand alone tool based on another tool called the
'SpecBuilder'. The SpecBuilder was written for the RTEMS project too give me a
way to build tools on hosts that did not support RPMs. At the time the RTEMS
tools maintainer only used spec files to create various packages. This meant I
had either spec files, RPM files or SRPM files. The RPM and SPRM files where
useless because you needed an 'rpm' type tool to extract and manage them. There
are versions of 'rpm' for a number of non-RPM hosts how-ever these proved to be
in various broken states and randomally maintained. The solution I settled on
was to use spec files so I wrote a Python based tool that parsed the spec file
format and allowed me to create a shell script I could run to build the
package. This approach proved successful and I was able to track the RPM
version of the RTEMS tools on a non-RPM host over a number of years. How-ever
the SpecBuilder tool did not help me build tools or other packages not related
to the RTEMS project where there was no spec file I could use so I needed
another tool. Rather than start again I decided to take the parsing code for
the spec file format and build a new tool called the RTEMS Source Builder.