= Building Tool RPM Packages = ''Chris: This is the start of documenting building the tool RPM packages.'' ''Gedare: This is outdated.'' ''Cindy: Could we add wget ting the source/patches into the RPM packages tool?''' RTEMS provides binary tool packages in the RPM format. If you wish to build binary tools for RTEMS you can use the method used to produce the binary RPM packages. Building tools from source is a complicated and sometimes fragile operation. To help keep the procedure simple all RPM files are built in Linux including the Windows versions. The RPM tools is used as it provided a excellent tools designed for building large packages from source. To build the tools you will need the RTEMS source tree, plus the source for GCC, binutils, newlib and GDB. The [wiki:TBR/UserManual/Standard_Package_Patches standard packages may require patches]. = Build Machine = The current tool sets are build on Linux PC based machines. Joel uses a RedHat 7.3 machine to give the resulting executables a wide range of machines to run on. Ralf and Chris use Fedora Core 4 machines. This documentation is written while building on a Fedora Core 4 machine. The host machine needs to be a software development machine. You need to make sure you have a working GNU compiler suite. If you intend to build all possible packages you will need a large amount of disk space. You need to install perl and help2man. On Fedora Core 4 you can find a help2man RPM package in the [http://download.fedora.redhat.com/pub/fedora/linux/extras Extras RPM repository]. = Source Code = To build the latest tool set you will need a current RTEMS snapshot. Cloning the master git repository ([wiki:Developer/Git RTEMS GIT Repository]) may be suitable: git clone git://git.rtems.org/rtems.git rtems. You will also need to download these source code packages from the ftp://ftp.rtems.org/pub/rtems/SOURCES/ directory on the RTEMS ftp server: * ftp://ftp.rtems.org/pub/rtems/SOURCES/autoconf-2.59-quoting-20040817-1.diff * ftp://ftp.rtems.org/pub/rtems/SOURCES/autoconf-2.59.tar.bz2 * ftp://ftp.rtems.org/pub/rtems/SOURCES/automake-1.8.1-rtems-20040112-1.diff * ftp://ftp.rtems.org/pub/rtems/SOURCES/automake-1.8.2-rtems-20040112-1.diff * ftp://ftp.rtems.org/pub/rtems/SOURCES/automake-1.9.5-rtems-20050303.diff * ftp://ftp.rtems.org/pub/rtems/SOURCES/automake-1.9.5.tar.bz2 * ftp://ftp.rtems.org/pub/rtems/SOURCES/automake-1.9.6.tar.bz2 * ftp://ftp.rtems.org/pub/rtems/SOURCES/binutils-2.16.1-rtems-20050816.diff * ftp://ftp.rtems.org/pub/rtems/SOURCES/binutils-2.16.1.tar.bz2 * ftp://ftp.rtems.org/pub/rtems/SOURCES/binutils-2.16-rtems-20050509.diff * ftp://ftp.rtems.org/pub/rtems/SOURCES/binutils-2.16.tar.bz2 * ftp://ftp.rtems.org/pub/rtems/SOURCES/gcc-4.0.2.tar.bz2 * ftp://ftp.rtems.org/pub/rtems/SOURCES/newlib-1.13.0-rtems-20050810.diff * ftp://ftp.rtems.org/pub/rtems/SOURCES/newlib-1.13.0.tar.gz Place these files in a SOURCES directory under the RPM build location you select. = RPM Base Directory = You need to selection a location on the host build machine where the RPMs are built and the resulting images left. An example is: /opt/rtems/src This means the source code should be placed in: /opt/rtems/src/SOURCES You also need to create few working directories. These are: $ cd /opt/rtems/src $ mkdir SRPMS $ mkdir -p RPMS/noarch = RPM Macros File = Create a private RPM macros file in your home directory: $ cat ~/.rpmmacros %_topdir /opt/rtems/src %_tmppath /tmp/rtems %_rpmdir %_topdir/%_target_os/RPMS %_srcrpmdir %_topdir/%_target_os/SRPMS %_signature gpg # %_gpg_path ~/.gnupg # %_gpg_name "RTEMS Packager" %_gpg_name rtems %vendor: OAR Corp %packager http://www.rtems.org/ The {{{%_topdir field is set to your RPM Base directory. = Building = The building of the RPM packages requires a number of phases to be completed in order. Each phase requires the previous phase to be completed. = Configuring the CrossRPM Scripts = The latest method of building the RPM files is using the scripts in {{{contrib/crossrpms. These scripts can build tools for the following hosts: * Linux * FreeBSD * Solaris * Windows (Cygwin) * Windows (MinGW) The Linux RPM files have to be built so we build them first. They are needed for the building of the tools for other hosts. The Linux tools are [http://en.wikipedia.org/wiki/Cross-compiling cross-compiler tools]. The build of the other host platform tools is something called a '''Canadian cross-compilet'''. Follow the [http://en.wikipedia.org/wiki/Cross-compiling Cross-compiling] link for more details. Enter the {{{crossrpms directory of the RTEMS source tree and run {{{configure script. This assumes you have successfully completed a ''bootstrap''. To build tools for the Windows MinGW host you configure with: $ cd /opt/rtems/src/cvs/contrib/crossrpms $ ./configure --prefix=/opt/rtems/test/4.7 --host=i686-pc-mingw32 --target=m68k-rtems4.7 $ make The result are a number of specs files in the ''rtems'' and ''mingw32'' directory. The {{{crossrpms directory contains a {{{bootstrap script. You can run this script so you do not need to ''bootstrap'' RTEMS. = Running rpmbuild = The first packages you need to build are the autotools packages. RTEMS uses autotool packages that are later releases than those found on most Linux operating systems. To build enter the autotools directory and run rpmbuild: $ cd autotools $ rpmbuild -ba rtems-4.7-autoconf-rtems.spec --target=i686-pc-linux-gnu This builds autoconf for a Linux PC host. ''Note:'' Different versions of RPM may behave differently. This may appear when building a different target. If this occurs try: rpmbuild \ --define '_build i386-redhat-linux' \ --define '_host i686-pc-cygwin' \ --target=i686-pc-cygwin \ -ba = Installing Test RPMs = If you are a developer and wish to build and install tools using the RPM scripts you may wish to not install the RPM files into the system RPM database of your build machine. This is important if you have a machine that is building code with production tools yet you wish to develop new tools. You can avoid clashing with the production tools by using a different prefix and changing the RPM release value in the {{{setup.def file. For example change the {{{rtems_rpm_release value then run {{{configure then {{{make in the scripts directory followed by the {{{rpmbuild command. If you do not wish to install test RPM files as root you can perform this task as a user by coping to the current RPM database to your test prefix and changing ownership to your user id. You then provide the --dbpath option the {{{rpm command. For example: $ cd /local/tool/rtems $ mkdir -p test/var/lib/rpm $ cp -r /var/lib/rpm test/var/lib $ rpm --dbpath /local/tools/rtems/test/var/lib/rpm -qa | grep rtems $ rpm --dbpath /local/tools/rtems/test/var/lib/rpm \ -i /local/tools/rtems/tools/packages/linux/RPMS/i686/rtems-4.7-m68k-rtems4.7-libc-1.14.0.i686.rpm