From 7150605481632dc6eed0ed31dd1b8d5a2e556c9b Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 27 Jan 2000 23:48:28 +0000 Subject: GNAT/RTEMS RPMs have built for the binutils/gnat/gcc combination and appear to be close for gdb. --- scripts-ada/gnatnewlib/gnatnewlib.spec.in | 371 +++++++++++++++++++----------- 1 file changed, 235 insertions(+), 136 deletions(-) (limited to 'scripts-ada/gnatnewlib/gnatnewlib.spec.in') diff --git a/scripts-ada/gnatnewlib/gnatnewlib.spec.in b/scripts-ada/gnatnewlib/gnatnewlib.spec.in index c82740befe..4557e9b3b5 100644 --- a/scripts-ada/gnatnewlib/gnatnewlib.spec.in +++ b/scripts-ada/gnatnewlib/gnatnewlib.spec.in @@ -10,22 +10,27 @@ Vendor: OAR Corporation Distribution: Linux Name: @target_alias@-gnat-newlib Summary: gnat, gcc, and newlib C Library for @target_alias@. -Group: rtems +Group: gnatrtems Release: @Release@ Copyright: 1999 OARCorp Provides: rtems-base-gnat @target_alias@-gnat -Requires: @target_alias@-binutils +Provides: rtems-base-gnat-binutils @target_alias@-gnat-binutils +# Requires: @target_alias@-binutils Autoreqprov: on Packager: corsepiu@faw.uni-ulm.de and joel@OARcorp.com -Version: gnat@gnat_version@newlib@newlib_version@ +Version: gnat@gnat_version@ Source0: ftp://ftp.gnu.org/pub/gnu/gcc/gcc-@gcc_version@.tar.gz Source1: ftp://sourceware.cygnus/com/pub/newlib/newlib-@newlib_version@.tar.gz -Source2: ftp://cs.nyu.edu/pub/gnat/gnat-@gnat_version@.tar.gz -Patch0: gcc-@gcc_version@-gnatrtems-@gcc_patch_version@.diff +Source2: ftp://cs.nyu.edu/pub/gnat/gnat-@gnat_version@-src.tar.gz +Source3: ftp://ftp.gnu.org/pub/gnu/binutils/binutils-@binutils_version@.tar.gz +Patch0: gcc-@gcc_version@-rtems-@gcc_patch_version@.diff Patch1: newlib-@newlib_version@-rtems-@newlib_patch_version@.diff +Patch2: gnat-@gnat_version@-src-rtems-@gnat_patch_version@.diff +Patch3: binutils-@binutils_version@-rtems-@binutils_patch_version@.diff +# Buildroot: /tmp # @@ -39,7 +44,7 @@ Buildroot: /tmp # your /usr/src/redhat/SOURCES directory ($RPM_SOURCE_DIR). # Or you can try the ftp options of rpm :-) # -NoSource: 0, 1, 2 +NoSource: 0, 1, 2, 3 %description RTEMS is an open source operating system for embedded systems. @@ -56,6 +61,15 @@ This is gcc's and newlib C Library's sources with patches for RTEMS. your /usr/src/redhat/SOURCES directory ($RPM_SOURCE_DIR). Or you can try the ftp options of rpm :-) +This version of GNAT/RTEMS RPMs is based on the following: + + + gnat-@gnat_version@-src + + gcc-@gcc_version@ + + newlib-@newlib_version@ + + binutils-@binutils_version@ + +with appropriate patches. + %package -n rtems-base-gnat Summary: base package for rtems gnat, gcc, and newlib C Library Group: rtems @@ -66,69 +80,168 @@ RTEMS is an open source operating system for embedded systems. This is the files for gnat, gcc, and newlib that are shared by all targets. +%package -n rtems-base-gnat-binutils +Summary: base package for rtems binutils +Group: rtems + +%description -n rtems-base-gnat-binutils + +RTEMS is an open source operating system for embedded systems. + +This is the base for binutils regardless of target CPU. + +%package -n @target_alias@-gnat-binutils +Summary: rtems binutils for @target_alias@ +Group: rtems +Requires: rtems-base-gnat-binutils + +%description -n @target_alias@-gnat-binutils + +RTEMS is an open source operating system for embedded systems. + +This is the GNU binutils for RTEMS targetting @target_alias@. + %package -n @target_alias@-gnat Summary: rtems gnat, gcc, and newlib C Library for @target_alias@ Group: rtems -Requires: @target_alias@-binutils rtems-base-gcc +Requires: @target_alias@-gnat-binutils rtems-base-gnat %description -n @target_alias@-gnat RTEMS is an open source operating system for embedded systems. This is gnat, gcc, and newlib C Library for @target_alias@. - %prep -# untar the sources inside @target_alias@-gcc-newlib -%setup -c -n @target_alias@-gcc-newlib -a 0 -a 1 -a 2 +# untar the sources inside @target_alias@-gnat-newlib +%setup -c -n @target_alias@-gnat-newlib -a 0 -a 1 -a 2 -a 3 %patch0 -p0 %patch1 -p0 +%patch2 -p0 +%patch3 -p0 + + # this 281 needs to be a variable. :( + cd gcc-@gcc_version@ + patch -p0 <../gnat-@gnat_version@-src/src/gcc-281.dif + + mv ../gnat-@gnat_version@-src/src/ada . + + cd ada + touch treeprs.ads a-[es]info.h nmake.ad[bs] + cd ../.. # now back at top + + # Now we should be done patching everything.. build up a source tree + + # this sequence is VERY dependent on the versions involved + # When the gcc gets updated to 2.95.x or newer, this HAS to change. + + mkdir src + cd src + # configure scripts + for f in config config.guess config.sub configure configure.in \ + config-ml.in include install-sh ltconfig ltmain.sh Makefile.in \ + move-if-change mkinstalldirs libiberty + do + # some packages have more configure scripts than others + # our list is inclusive + test -r ../binutils-@binutils_version@/$f && \ + mv ../binutils-@binutils_version@/$f . + done - # Copy the C library into gcc's source tree - ln -s ../newlib-@newlib_version@/newlib gcc-@gcc_version@ - test -d build || mkdir build + # link in gcc + mv ../gcc-@gcc_version@ gcc + + # link in binutils + for f in bfd binutils gas gprof ld opcodes etc + do + mv ../binutils-@binutils_version@/$f . + done - cp -r ../gnat-@gnat_version@-src/src/ada gcc-@gcc_version@ + # link in newlib + mv ../newlib-@newlib_version@/newlib . + cd .. -%patch2 -p0 + # now we have a linked together source tree + test -d build || mkdir build - touch gcc-@gcc_version@/ada/treeprs.ads - touch gcc-@gcc_version@/ada/a-[es]info.h - touch gcc-@gcc_version@/ada/nmake.ad[bs] %build cd build - ../gcc-@gcc_version@/configure --target=@target_alias@ \ + # after we switch off gcc 2.8.1, configure using gcc not a src directory + # and build binutils separately. + ../src/configure --target=@target_alias@ \ --with-gnu-as --with-gnu-ld --with-newlib --verbose \ --prefix=/opt/gnatrtems # for now we are building all the languages # '--enable-languages=c,c++' - make all - make info - -# Since gcc now finds the RTEMS limits.h, this should not be needed -# cd gcc -# rm -f stmp-multilib -# find . -name "*.a" -print | xargs -e rm -f +# # This is a hack that is only because gnat still uses gcc 2.8.1 +# test -d ${RPM_BUILD_ROOT}/opt/gnatrtems/@target_alias@ || +# mkdir -p ${RPM_BUILD_ROOT}/opt/gnatrtems/@target_alias@ +# for dir in ${RPM_BUILD_ROOT}/opt/gnatrtems/@target_alias@/include \ +# ${RPM_BUILD_ROOT}/opt/gnatrtems/@target_alias@/sys-include +# do +# test -d ${dir} || mkdir -p ${dir} +# cp ../newlib-@newlib_version@/newlib/libc/sys/rtems/include/limits.h ${dir} +# done + + make CC=gcc CFLAGS="-O2" LANGUAGES="c" all + make CC=gcc CFLAGS="-O2" LANGUAGES="c" info + # must be installed in the real place to allow gnat to continue to build + make CC=gcc CFLAGS="-O2" LANGUAGES="c" install + +# When GNAT uses a gcc that finds the RTEMS limits.h, this will not +# be needed. This should not be needed if the limits.h trick above works. +# cd gcc +# rm -f stmp-multilib +# find . -name "*.a" -print | xargs -e rm -f # -# make all -# cd .. +# make all +# cd .. + +#################### Ada from here down ################### + + # Just so the log shows what directory we are in. + pwd + cd gcc + echo "Starting build of GNAT proper." + make prefix=$RPM_BUILD_ROOT/opt/gnatrtems \ + CC=gcc CFLAGS="-O2" LANGUAGES="c ada" + + echo "Starting build of cross GNAT tools" + make prefix=$RPM_BUILD_ROOT/opt/gnatrtems \ + CC=gcc CFLAGS="-O2 -g" LANGUAGES="c ada" cross-gnattools + + echo "Starting build of ada.all.cross" + make prefix=$RPM_BUILD_ROOT/opt/gnatrtems \ + CC=gcc CFLAGS="-O2" LANGUAGES="c ada" ada.all.cross + + # must have -gnato to pass validation + # may want CC=gcc GNATLIBCFLAGS="-O3" GNATLIBFLAGS="-gnatpgn" gnatliy + # NOTE: gnatlib is not multilib'ed -- serious embedded flaw + echo "Starting build of gnatlib" + make prefix=$RPM_BUILD_ROOT/opt/gnatrtems \ + CC=gcc GNATLIBCFLAGS="-O2 -g" gnatlib %install cd build # Bug in gcc-2.95.1: It doesn't build this installation directory # If it doesn't find it, gcc doesn't install @target_alias@/bin/gcc - ../gcc-@gcc_version@/mkinstalldirs \ - $RPM_BUILD_ROOT/opt/gnatrtems/@target_alias@/bin + # ../gcc-@gcc_version@/mkinstalldirs \ + # $RPM_BUILD_ROOT/opt/gnatrtems/@target_alias@/bin + + cd gcc + echo "Starting install of gnat" + make prefix=$RPM_BUILD_ROOT/opt/gnatrtems \ + CC=gcc CFLAGS="-O2 -g -gnata -gnatp" LANGUAGES="c ada" install + # GNAT has to be mostly installed to even build itself - make prefix=$RPM_BUILD_ROOT/opt/gnatrtems install - cd @target_alias@/newlib make prefix=$RPM_BUILD_ROOT/opt/gnatrtems install-info - # cd back to build/ - cd ../.. + # cd go back to build/ + pwd + cd .. # gzip info files gzip -f $RPM_BUILD_ROOT/opt/gnatrtems/info/*.info 2>/dev/null @@ -140,6 +253,22 @@ This is gnat, gcc, and newlib C Library for @target_alias@. echo "%dir /opt/gnatrtems/lib/gcc-lib" >> dirs ; echo "%dir /opt/gnatrtems/lib/gcc-lib/@target_alias@" >> dirs ; + if test -f $RPM_BUILD_ROOT/opt/gnatrtems/info/configure.info.gz; + then +# These common files are only present in binutils >= 2.9.5 + find $RPM_BUILD_ROOT/opt/gnatrtems/info -name 'configure.*' | \ + sed -e "s,^$RPM_BUILD_ROOT,,g" > ../files + else + touch ../files + fi +# These target specific files are only present in binutils >= 2.9.5 + if test -f /opt/gnatrtems/bin/@target_alias@-readelf@exe_ext@; + then + echo /opt/gnatrtems/bin/@target_alias@-readelf@exe_ext@ > ../files.target + else + touch ../files.target + fi + # Collect multilib subdirectories TGTDIR="$RPM_BUILD_ROOT/opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@" find $TGTDIR \ @@ -147,130 +276,104 @@ This is gnat, gcc, and newlib C Library for @target_alias@. sed -e "s,^$RPM_BUILD_ROOT,%dir ,g" >> dirs # Collect files to go into different packages - cp dirs files.chill - cp dirs files.gcc - cp dirs files.g77 - cp dirs files.objc - cp dirs files.gcj + # NOTE: This is left in as a place holder to move the 2.95.x code into. + cp dirs ../files.gcc f=`find $TGTDIR ! -type d -print | sed -e "s,^$RPM_BUILD_ROOT,,g"`; for i in $f; do case $i in - *chill*) echo "$i" >> files.chill ;; - *f771) ;; - *cc1obj) ;; - *libobjc*) echo "$i" >> files.objc ;; - *include/objc*) ;; - *jc1) ;; - *jvgenmain) ;; - *) echo "$i" >> files.gcc ;; + *) echo "$i" >> ../files.gcc ;; esac done -%files -n @target_alias@-gcc -f build/files.gcc +%files -n rtems-base-gnat-binutils -f files %dir /opt/gnatrtems/info %doc /opt/gnatrtems/info/dir -%doc /opt/gnatrtems/info/cpp.info* -%doc /opt/gnatrtems/info/gcc.info* -%doc /opt/gnatrtems/info/libc.info* -%doc /opt/gnatrtems/info/libm.info* +%doc /opt/gnatrtems/info/as.info.gz +%doc /opt/gnatrtems/info/as.info-?.gz +%doc /opt/gnatrtems/info/bfd.info.gz +%doc /opt/gnatrtems/info/bfd.info-?.gz +%doc /opt/gnatrtems/info/binutils.info.gz +%doc /opt/gnatrtems/info/binutils.info-?.gz +%doc /opt/gnatrtems/info/ld.info.gz +%doc /opt/gnatrtems/info/ld.info-?.gz +%doc /opt/gnatrtems/info/gasp.info.gz +%doc /opt/gnatrtems/info/standards.info.gz %dir /opt/gnatrtems/man %dir /opt/gnatrtems/man/man1 -%doc /opt/gnatrtems/man/man1/cccp.1 -%doc /opt/gnatrtems/man/man1/@target_alias@-gcc.1 -%doc /opt/gnatrtems/man/man1/@target_alias@-g++.1 - -%dir /opt/gnatrtems/bin -/opt/gnatrtems/bin/cpp@exe_ext@ -/opt/gnatrtems/bin/gcov@exe_ext@ -/opt/gnatrtems/bin/@target_alias@-c++@exe_ext@ -/opt/gnatrtems/bin/@target_alias@-g++@exe_ext@ -/opt/gnatrtems/bin/@target_alias@-gcc@exe_ext@ -/opt/gnatrtems/bin/@target_alias@-protoize@exe_ext@ -/opt/gnatrtems/bin/@target_alias@-unprotoize@exe_ext@ - -%dir /opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@/include %dir /opt/gnatrtems/include -/opt/gnatrtems/include/g++-3 -/opt/gnatrtems/@target_alias@ +/opt/gnatrtems/include/bfd.h +/opt/gnatrtems/include/ansidecl.h +/opt/gnatrtems/include/bfdlink.h -%post -n @target_alias@-gcc - if test -d $RPM_INSTALL_PREFIX/rtems/info; - then - rm -f $RPM_INSTALL_PREFIX/rtems/info/dir - f=`find $RPM_INSTALL_PREFIX/rtems/info -name '*.info.gz'` - test -n "$f" && for i in $f; do - install-info $i $RPM_INSTALL_PREFIX/rtems/info/dir - done - fi +%dir /opt/gnatrtems/lib +/opt/gnatrtems/lib/libbfd* +/opt/gnatrtems/lib/libiberty* +/opt/gnatrtems/lib/libopcodes* -%postun -n @target_alias@-gcc - if test -d $RPM_INSTALL_PREFIX/rtems/info; - then - rm -f $RPM_INSTALL_PREFIX/rtems/info/dir - f=`find $RPM_INSTALL_PREFIX/rtems/info -name '*.info.gz'` - test -n "$f" && for i in $f; do - install-info $i $RPM_INSTALL_PREFIX/rtems/info/dir - done - fi +# %dir /opt/gnatrtems/share +# %dir /opt/gnatrtems/share/locale +%files -n @target_alias@-gnat-binutils -f files.target +%doc /opt/gnatrtems/man/man1/@target_alias@-*.1 -%files -n @target_alias@-chill -f build/files.chill %dir /opt/gnatrtems/bin -/opt/gnatrtems/bin/@target_alias@-chill@exe_ext@ - +/opt/gnatrtems/bin/@target_alias@-addr2line@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-ar@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-as@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-c++filt@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-gasp@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-ld@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-nm@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-objcopy@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-objdump@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-ranlib@exe_ext@ +# readelf is not in older binutils so get it from file list +# /opt/gnatrtems/bin/@target_alias@-readelf@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-size@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-strings@exe_ext@ +/opt/gnatrtems/bin/@target_alias@-strip@exe_ext@ + +%dir /opt/gnatrtems/@target_alias@ +%dir /opt/gnatrtems/@target_alias@/bin +/opt/gnatrtems/@target_alias@/bin/ar@exe_ext@ +/opt/gnatrtems/@target_alias@/bin/as@exe_ext@ +/opt/gnatrtems/@target_alias@/bin/ld@exe_ext@ +/opt/gnatrtems/@target_alias@/bin/nm@exe_ext@ +/opt/gnatrtems/@target_alias@/bin/ranlib@exe_ext@ +/opt/gnatrtems/@target_alias@/bin/strip@exe_ext@ + +%dir /opt/gnatrtems/@target_alias@/lib +/opt/gnatrtems/@target_alias@/lib/ldscripts +%files -n rtems-base-gnat %dir /opt/gnatrtems/info -%doc /opt/gnatrtems/info/dir -%doc /opt/gnatrtems/info/chill.info* - -%post -n @target_alias@-chill - if test -d $RPM_INSTALL_PREFIX/rtems/info; - then - rm -f $RPM_INSTALL_PREFIX/rtems/info/dir - f=`find $RPM_INSTALL_PREFIX/rtems/info -name '*.info.gz'` - test -n "$f" && for i in $f; do - install-info $i $RPM_INSTALL_PREFIX/rtems/info/dir - done - fi - -%postun -n @target_alias@-chill - if test -d $RPM_INSTALL_PREFIX/rtems/info; - then - rm -f $RPM_INSTALL_PREFIX/rtems/info/dir - f=`find $RPM_INSTALL_PREFIX/rtems/info -name '*.info.gz'` - test -n "$f" && for i in $f; do - install-info $i $RPM_INSTALL_PREFIX/rtems/info/dir - done - fi - - -%files -n @target_alias@-gcj -f build/files.gcj -%dir /opt/gnatrtems/bin -/opt/gnatrtems/bin/jcf-dump@exe_ext@ -/opt/gnatrtems/bin/jv-scan@exe_ext@ -/opt/gnatrtems/bin/gcjh@exe_ext@ -/opt/gnatrtems/bin/@target_alias@-gcj@exe_ext@ - -/opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@/jc1@exe_ext@ -/opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@/jvgenmain@exe_ext@ +# %doc /opt/gnatrtems/info/dir +%doc /opt/gnatrtems/info/cpp.info* +%doc /opt/gnatrtems/info/gcc.info* +%doc /opt/gnatrtems/info/libc.info* +%doc /opt/gnatrtems/info/libm.info* +# %dir /opt/gnatrtems/man +# %dir /opt/gnatrtems/man/man1 +%doc /opt/gnatrtems/man/man1/cccp.1 +%doc /opt/gnatrtems/man/man1/@target_alias@-gcc.1 -%files -n @target_alias@-g77 -f build/files.g77 %dir /opt/gnatrtems/bin -/opt/gnatrtems/bin/@target_alias@-g77@exe_ext@ +# /opt/gnatrtems/bin/cpp@exe_ext@ +/opt/gnatrtems/bin/gcov@exe_ext@ +%dir /opt/gnatrtems/include +# /opt/gnatrtems/include/g++-3 -%dir /opt/gnatrtems/info -%doc /opt/gnatrtems/info/g77.info* +%files -n @target_alias@-gnat -f files.gcc +/opt/gnatrtems/bin/@target_alias@-gcc@exe_ext@ -%dir /opt/gnatrtems/man -%dir /opt/gnatrtems/man/man1 -%doc /opt/gnatrtems/man/man1/@target_alias@-g77.1 +%dir /opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@/include -/opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@/f771@exe_ext@ +/opt/gnatrtems/@target_alias@ -%post -n @target_alias@-g77 +%post -n @target_alias@-gnat if test -d $RPM_INSTALL_PREFIX/rtems/info; then rm -f $RPM_INSTALL_PREFIX/rtems/info/dir @@ -280,7 +383,7 @@ This is gnat, gcc, and newlib C Library for @target_alias@. done fi -%postun -n @target_alias@-g77 +%postun -n @target_alias@-gnat if test -d $RPM_INSTALL_PREFIX/rtems/info; then rm -f $RPM_INSTALL_PREFIX/rtems/info/dir @@ -290,7 +393,3 @@ This is gnat, gcc, and newlib C Library for @target_alias@. done fi - -%files -n @target_alias@-objc -f build/files.objc -/opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@/cc1obj@exe_ext@ -/opt/gnatrtems/lib/gcc-lib/@target_alias@/@gcc_version@/include/objc -- cgit v1.2.3