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--.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 -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 -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 -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--.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- . cp .../binutils--rtems-.diff . 2. Generate and install the required rpm-spec file[s] cd rtems-/scripts/ mkbinutilspec 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--binutils.spec Building a source and binary rpm rpm -ba /usr/src/[packages|redhat]/SPECS/rtems--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- . cp .../gcc- . cp .../newlib- . 2. Generate and install the required rpm-spec file[s] cd rtems-/scripts/ mktoolspec 3. Build the rpms Building a binary rpm: rpm -bb /usr/src/[packages|redhat]/SPECS/rtems-.spec Building a source and binary rpm rpm -ba /usr/src/[packages|redhat]/SPECS/rtems-.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-.tar.gz rtems- 2. Generate and install the required rpm-spec file[s] cd rtems-/scripts/ mkspec 3. Build the rpms Building a binary rpm: rpm -bb /usr/src/[packages|redhat]/SPECS/rtems--.spec Building a source and binary rpm rpm -ba /usr/src/[packages|redhat]/SPECS/rtems--.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 (/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