Files
rtems/scripts
Joel Sherrill f817b0283c The files in libcpu should not be directly dependent on any BSP. In
particular, using bsp.h, or getting information from the BSP which
should properly be obtained from RTEMS is forbidden.  This is
necessary to strengthen the division between the BSP independent
parts of RTEMS and the BSPs themselves.  This started after
comments and analysis by Ralf Corsepius <corsepiu@faw.uni-ulm.de>.
The changes primarily eliminated the need to include bsp.h and
peeking at BSP_Configuration.  The use of Cpu_table in each
BSP needs to be eliminated.
1999-11-04 18:05:09 +00:00
..
1999-11-02 16:07:13 +00:00
1999-10-26 02:35:51 +00:00
1999-11-04 13:18:23 +00:00
1999-10-20 15:29:12 +00:00
1999-10-20 15:29:12 +00:00
1999-10-20 15:29:12 +00:00
1999-10-20 15:29:12 +00:00
1999-10-26 12:29:36 +00:00

	RPM support for BSPs
	====================

Introduction
------------

Building an rpm requires to have a tar archive of the sources, and a
rpm-spec files specifying the details of building.

To support per bsp rpms, one rpm-spec is used per BSP. 
Instead of writing one rpm-spec for each BSP, I have written a shell script
(mkspec) which generates one *.spec (rtems-<target_alias>-<bsp>.spec) per BSP
bsp from an rpm-spec template (rtems.spec.in).

A second shell script (mkrpms) is a convienience script which invokes a
sequence of building rpms for several bsps.


mkbinutilspec
-------------

mkbinutilspec takes two arguments:

$1 ... the target_alias for binutils RPMs of this toolset

Invoking mkbinutilspec will generate a <target_alias>-binutils.spec either in

    /usr/src/packages/SPECS (SuSE convention) or
    /usr/src/redhat/SPECS (Redhat convention) or
    /usr/src/SPECS

Eg. ./mkbinutilspec sparc-rtems generates

On SuSE-6.2:   /usr/src/packages/SPECS/sparc-rtems-binutils.spec
On RedHat 6.0: /usr/src/redhat/SPECS/sparc-rtems-binutils.spec

mkgccnewlibspec
---------------

mkgccnewlibspec takes two arguments:

$1 ... the target_alias for the gcc/newlib RPMs of this toolset

Invoking mkgccnewlibspec will generate a <target_alias>-gccnewlibs.spec
either in:

    /usr/src/packages/SPECS (SuSE convention) or
    /usr/src/redhat/SPECS (Redhat convention) or
    /usr/src/SPECS

Eg. ./mkgccnewlibspec sparc-rtems generates

On SuSE-6.2:   /usr/src/packages/SPECS/sparc-rtems-gcc_newlib.spec
On RedHat 6.0: /usr/src/redhat/SPECS/sparc-rtems-gcc_newlib.spec

mkgdbspec
---------

mkgdbspec takes two arguments:

$1 ... the target_alias for the gdb RPMs of this toolset

Invoking mkgdbspec will generate a <target_alias>-gdb.spec
either in:

    /usr/src/packages/SPECS (SuSE convention) or
    /usr/src/redhat/SPECS (Redhat convention) or
    /usr/src/SPECS

Eg. ./mkgdbspec sparc-rtems generates

On SuSE-6.2:   /usr/src/packages/SPECS/sparc-rtems-gcc_newlib.spec
On RedHat 6.0: /usr/src/redhat/SPECS/sparc-rtems-gcc_newlib.spec


# XXX BSPs not tested yet by Joel
#
#  mkbspspec
#  ---------
#  
#  mkbspspec takes two arguments: 
#  $1 ... the target_alias this bsp belongs to
#  $2 ... the bsp to be built
#  
#  Invoking mkbspspec will generate a rtems-<target_alias>-<bsp>.spec either in
#  /usr/src/packages/SPECS (SuSE convention) or 
#  /usr/src/redhat/SPECS (Redhat convention) or
#  /usr/src/SPECS
#  
#  Eg. ./mkspec gensh1 sh-rtemself generates
#  /usr/src/packages/SPECS/rtems-sh-rtemself-gensh1.spec on SuSE-6.2.

mkspec
---------

mkspec takes two arguments:

$1 ... the target_alias for the RPMs composing this toolset
$2 ... the bsp to be built

Invoking mkspec will generate a set of spec files either in:

    /usr/src/packages/SPECS (SuSE convention) or
    /usr/src/redhat/SPECS (Redhat convention) or
    /usr/src/SPECS

Eg. ./mkspec sparc-rtems erc32 generates

On SuSE-6.2:   /usr/src/packages/SPECS/sparc-rtems-binutils.spec
               /usr/src/packages/SPECS/sparc-rtems-gcc_newlib.spec
               /usr/src/packages/SPECS/sparc-rtems-gdb.spec
On RedHat 6.0: /usr/src/packages/SPECS/sparc-rtems-binutils.spec
               /usr/src/packages/SPECS/sparc-rtems-gcc_newlib.spec
               /usr/src/packages/SPECS/sparc-rtems-gdb.spec


Building binutils-rpms
----------------------

0. Login as root.

1. Install a tarball of the various tool sources (with the
version number attached!) to /usr/src/[packages|redhat]/SOURCES

  cd /usr/src/[packages|redhat]/SOURCES
  cp .../binutils-<VERSION>  .
  cp .../binutils-<VERSION>-rtems-<DATE>.diff  .

2. Generate and install the required rpm-spec file[s]

cd rtems-<VERSION>/scripts/
mkbinutilspec <target_alias>

where target_alias is of the form sparc-rtems or sh-rtems-elf.

3. Build the rpms 

Building a binary rpm:

rpm -bb /usr/src/[packages|redhat]/SPECS/rtems-<target_alias>-binutils.spec

Building a source and binary rpm
rpm -ba /usr/src/[packages|redhat]/SPECS/rtems-<target_alias>-binutils.spec

XXX Note: a BSP's src.rpm contains its spec-file and the tar-archive of the
sources (approx. 4-5MB per BSP).

Building TOOL-rpms
------------------

0. Login as root.

1. Install a tarball of the various tool sources (with the
version number attached!) to /usr/src/[packages|redhat]/SOURCES

  cd /usr/src/[packages|redhat]/SOURCES
  cp .../binutils-<VERSION>  .
  cp .../gcc-<VERSION>       .
  cp .../newlib-<VERSION>    .

2. Generate and install the required rpm-spec file[s]

cd rtems-<VERSION>/scripts/
mktoolspec <target_alias>

3. Build the rpms

Building a binary rpm:
rpm -bb /usr/src/[packages|redhat]/SPECS/rtems-<target_alias>.spec

Building a source and binary rpm
rpm -ba /usr/src/[packages|redhat]/SPECS/rtems-<target_alias>.spec

XXX Note: a BSP's src.rpm contains its spec-file and the tar-archive of the
sources (approx. 4-5MB per BSP). 

Building BSP-rpms
-----------------

0. Login as root.

1. Install a tarball of RTEMS's sources (with version number attached!) to
/usr/src/[packages|redhat]/SOURCES
Eg. 
tar czvf /usr/src/packages/SOURCES/rtems-<VERSION>.tar.gz rtems-<VERSION>

2. Generate and install the required rpm-spec file[s]
cd rtems-<VERSION>/scripts/
mkspec <bsp> <target_alias>

3. Build the rpms
Building a binary rpm:
rpm -bb /usr/src/[packages|redhat]/SPECS/rtems-<target_alias>-<bsp>.spec

Building a source and binary rpm
rpm -ba /usr/src/[packages|redhat]/SPECS/rtems-<target_alias>-<bsp>.spec

Note: a BSP's src.rpm contains its spec-file and the tar-archive of the
sources (approx. 4-5MB per BSP). 

Known Bugs/Deficiencies
-----------------------

* All files mentioned in here are in its early infancy ;-)

* Building for a single bsp requires an own copy of the source tree inside
rpm's build directory.
* Building inside the RTEMS source tree doesn't work.
* Dependencies on toolchain-rpms not yet supported in rtems.spec.in.
* Installing multiple binary bsp rpms for the same target can cause 
warnings from rpm, because these bsp-rpms share files.
* rtems.spec.in is prepared for rpm relocation support, but RTEMS is not
relocatible (yet?)
* rtems.spec.in deserves to be extended (description, authors etc)
* The final packaging stage to build a binary rpm takes an awful lot of
time - deserves to be investigated.
* Some RTEMS's cross executables (eg. hello.exe for sparc-rtems/erc32) cause 
warnings from rpm and/or objdump. AFAIS, this is a bug in rpm.
* Probably many more ...

* Last but not least: RTEMS should be split.

Remarks
-------
* It would make sense to split RTEMS host/cross-tools and files depending on
the target only (<target_alias>/make/*.cfg -- Whow, RTEMS really has files 
which depend on the target only :) into separate rpms.
* Instead of using a single rpm-spec for each bsp, RTEMS could also use a
single rpm-spec for all (or at least a given subset of all) bsps of a target.
* rpm -b[b|a] leaves its built trees unpacked in 
/usr/src/[packages|redhat]/BUILD. Therefore you will rather soon run out of disc
space if not removing them. (Use rpm --clean -b[a|b] for cleaning them up 
automatically after building) 
* The size of binary rpms can differ up to one magnitude depending on the
target/bsp (eg. sh-rtems/gensh1 ~10MB vs. sh-rtemself/gensh1 ~32MB) 

Ralf Corsepius, 1999/10/14