diff options
author | Ralf Corsepius <ralf.corsepius@rtems.org> | 2005-04-12 15:17:39 +0000 |
---|---|---|
committer | Ralf Corsepius <ralf.corsepius@rtems.org> | 2005-04-12 15:17:39 +0000 |
commit | 664d8b7197caa2251bf91f3461bd81177bd023bd (patch) | |
tree | 0d946546d4d37e8771d6fc7d6885e944bad832ce /scripts/gccnewlib/gccnewlib.add | |
parent | 2005-04-12 Ralf Corsepius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-664d8b7197caa2251bf91f3461bd81177bd023bd.tar.bz2 |
New.
Diffstat (limited to 'scripts/gccnewlib/gccnewlib.add')
-rw-r--r-- | scripts/gccnewlib/gccnewlib.add | 405 |
1 files changed, 405 insertions, 0 deletions
diff --git a/scripts/gccnewlib/gccnewlib.add b/scripts/gccnewlib/gccnewlib.add new file mode 100644 index 0000000000..a977dd2bdb --- /dev/null +++ b/scripts/gccnewlib/gccnewlib.add @@ -0,0 +1,405 @@ + +%define gcc_version @gcc_version@ +%define newlib_version @newlib_version@ + +%define gcc_target @target_alias@ + +Name: %{rpmprefix}%{gcc_target}-gcc-newlib +Summary: gcc and newlib C Library for %{gcc_target}. +Group: %{rpmgroup} +Release: @Release@ +Epoch: 0 +License: gcc is GPL/LGPL ; newlib no has restrictions on run-time usage + +Packager: ralf.corsepius@rtems.org and joel@OARcorp.com + +Version: gcc%{gcc_version}newlib%{newlib_version} + +%if "%{gcc_version}" >= "3.2.2" +Source0: ftp://ftp.gnu.org/pub/gnu/gcc/gcc-%{gcc_version}/gcc-%{gcc_version}@gcc_suffix@ +%else +%if "%{gcc_version}" >= "3.0" +Source0: ftp://ftp.gnu.org/pub/gnu/gcc/gcc-%{gcc_version}/gcc-%{gcc_version}.tar.gz +%else +Source0: ftp://ftp.gnu.org/pub/gnu/gcc/gcc-%{gcc_version}/gcc-%{gcc_version}-everything.tar.gz +%endif +%endif +Source1: ftp://sources.redhat.com/pub/newlib/newlib-%{newlib_version}@newlib_suffix@ +@PATCH1@ +@PATCH3@ +BuildPreReq: texinfo >= 4.2 +BuildPreReq: %{rpmprefix}%{gcc_target}-binutils +# +# The original sources are not included in the source RPM. +# If we included them, then the source RPMs for each target +# would duplicate MBs of source unnecessarily. This is +# a duplication of over 30 MBs of source for each of +# the more than 10 targets it is possible to build. +# +# You can get them yourself from the Internet and copy them to +# your /usr/src/redhat/SOURCES directory ($RPM_SOURCE_DIR). +# Or you can try the ftp options of rpm :-) +# +%{?!_with_sources:NoSource: 0} +%{?!_with_sources:NoSource: 1} + +# Use rpm -ba --define 'gnat [0|1]' xxx.spec to override building gnat for +# those targets wanting to support ada. + +# default to not building gnat +%define _gnat %{?gnat:%gnat}%{!?gnat:0} + +# Use rpm -ba --define 'gcj [0|1]' xxx.spec to override building gcj for +# those targets wanting to support gcj. + +# default to not building gcj +%define _gcj %{?gcj:%gcj}%{!?gcj:0} + +%define build_cxx %{?cxx:%cxx}%{!?cxx:1} +%define build_g77 %{?g77:%g77}%{!?g77:0} +%define build_objc %{?objc:%objc}%{!?objc:0} +%define build_gcj 0 +%define build_gnat 0 + +%if "%{gcc_target}" == "arm-rtems@osversion@" +%define build_gcj %_gcj +%endif + +%if "%{gcc_target}" == "avr-rtems@osversion@" +%define build_cxx 0 +%endif + +%if "%{gcc_target}" == "tic4x-rtems@osversion@" +%define build_cxx 0 +%endif + +# OBSOLETE: use tic4x instead +%if "%{gcc_target}" == "c4x-rtems@osversion@" +%define build_cxx 0 +%endif + +%if "%{gcc_target}" == "i386-rtems@osversion@" +%define build_gnat %_gnat +%define build_gcj %_gcj +%endif + +%if "%{gcc_target}" == "m68k-rtems@osversion@" +%define build_gcj %_gcj +%endif + +%if "%{gcc_target}" == "mips-rtems@osversion@" +%define build_gnat %_gnat +%define build_gcj %_gcj +%endif + +%if "%{gcc_target}" == "powerpc-rtems@osversion@" +%define build_gnat %_gnat +%define build_gcj %_gcj +%endif + +# gcc 3.4.0 is broken for embedded sparc and gnat trips it. +%if "%{gcc_target}" == "sparc-rtems@osversion@" +%if "%{gcc_version}" >= "3.4" +%define build_gnat 0 +%else +%define build_gnat %_gnat +%endif +%define build_gcj %_gcj +%endif + +%if %build_gcj +# Building gcj requires bison and zlib +BuildPreReq: bison +%if "%_vendor" == "redhat" +BuildPreReq: zlib-devel +%endif +%endif + +%if %build_gnat +# Building gnat requires gnat +%if "%_vendor" == "redhat" +# This really isn't available until RedHat 8.0. How to conditionalize this? +# BuildPreReq: gcc-gnat +%endif +%endif + +%if "%{gcc_version}" >= "3.4" +%define gcclib %{_libdir}/gcc +%define gccexec %{_libexecdir}/gcc +%else +%define gcclib %{_libdir}/gcc-lib +%define gccexec %{_libdir}/gcc-lib +%endif + +%description +RTEMS is an open source operating system for embedded systems. + +This is gcc's and newlib C Library's sources with patches for RTEMS. + + The original sources are not included in the source RPM. + If we included them, then the source RPMs for each target + would duplicate MBs of source unnecessarily. This is + a duplication of over 30 MBs of source for each of + the more than 10 targets it is possible to build. + + You can get them yourself from the Internet and copy them to + your /usr/src/[redhat|packages]/SOURCES directory ($RPM_SOURCE_DIR). + Or you can try the ftp options of rpm :-) + +%prep +# untar the sources inside %{gcc_target}-gcc-newlib +%setup -c -T -n %{name}-%{version} -a0 -a1 + +cd gcc-%{gcc_version} +%{?PATCH0:%patch0 -p1} +cd .. +cd newlib-%{newlib_version} +%{?PATCH1:%patch1 -p1} +cd .. + + cd gcc-%{gcc_version} + sed -e 's/\(version_string = \"[^\"]*\)/\1 (RTEMS gcc-%{gcc_version}-@gcc_patch_version@\/newlib-%{newlib_version}-@newlib_patch_version@-@Release@)/' \ + gcc/version.c > gcc/version.c~ + mv gcc/version.c~ gcc/version.c + + # Fix timestamps + contrib/gcc_update --touch + cd .. + + # Copy the C library into gcc's source tree + ln -s ../newlib-%{newlib_version}/newlib gcc-%{gcc_version} + test -d build || mkdir build + +%build + cd build + +# ALERT: GCJ would be better if we could add this flag and build +# it's libraries but this code isn't ready to be embedded. +# libgcj_flag="--enable-libgcj" + + languages="c" +%if %build_cxx + languages="$languages,c++" +%endif +%if %build_g77 + languages="$languages,g77" +%endif +%if %build_gcj + languages="$languages,java" +%endif +%if %build_objc + languages="$languages,objc" +%endif +%if %build_gnat + languages="$languages,ada" +%endif + + export PATH="%{_bindir}:${PATH}" + ../gcc-%{gcc_version}/configure \ + --prefix=%{_prefix} --mandir=%{_mandir} \ + --infodir=%{_infodir} \ + --build=%_build --host=%_host \ + --target=%{gcc_target} \ + --with-gnu-as --with-gnu-ld --with-newlib --verbose \ + --with-system-zlib --disable-nls \ + --enable-version-specific-runtime-libs \ + --enable-threads=rtems \ + --enable-languages=$languages ${libgcj_flag} + +%if "%_host" != "%_build" + # Bug in gcc-3.2.1: + # Somehow, gcc doesn't get syslimits.h right for Cdn-Xs + test -d gcc/include || mkdir -p gcc/include + cp ../gcc-%{gcc_version}/gcc/gsyslimits.h gcc/include/syslimits.h +%endif + +%if %build_gnat +%if "%{gcc_version}" < "3.4" + cd ../gcc-%{gcc_version}/gcc/ada + touch treeprs.ads [es]info.h nmake.ad[bs] + cd ../../../build +%endif +%endif + + make all +%if %build_gnat +# This gnat configuration is crap :( + +%if "%{gcc_version}" >= "3.4" +# This is what is documented - Of cause it doesn't work. + make -C gcc gnatlib + make -C gcc cross-gnattools + make -C gcc ada.all.cross +%endif + +%if "%{gcc_version}" < "3.4" +# This is what had worked for some versions of gcc. + make -C gcc cross-gnattools + make -C gcc ada.all.cross +# This is what gcc/ada/Makefile.in contains by default, +# but what we override below + GNATLIBCFLAGS="-g -O2" +# Let gnatlib building find newlib's headers + GNATLIBCFLAGS="$GNATLIBCFLAGS -isystem `pwd`/%{gcc_target}/newlib/targ-include" + GNATLIBCFLAGS="$GNATLIBCFLAGS -isystem `pwd`/../newlib-%{newlib_version}/newlib/libc/include" + GNATLIBCFLAGS="$GNATLIBCFLAGS -isystem `pwd`/../gcc-%{gcc_version}/include" +# Without this xgcc doesn't find the target's binutils. + GNATLIBCFLAGS="$GNATLIBCFLAGS -B%{_prefix}/%{gcc_target}/bin/" +%if "%{gcc_target}" == "mips-rtems@osversion@" + GNATLIBCFLAGS="$GNATLIBCFLAGS -G0" +%endif + make -C gcc GNATLIBCFLAGS="${GNATLIBCFLAGS}" gnatlib +%endif +%endif + make info + +%install + export PATH="%{_bindir}:${PATH}" + test $RPM_BUILD_ROOT = "%{_defaultbuildroot}" && \ + rm -rf $RPM_BUILD_ROOT + + 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 %{gcc_target}/bin/gcc +%if "%{gcc_version}" < "3.0" + ../gcc-%{gcc_version}/mkinstalldirs \ + $RPM_BUILD_ROOT%{_prefix}/%{gcc_target}/bin +%endif + + make prefix=$RPM_BUILD_ROOT%{_prefix} \ + bindir=$RPM_BUILD_ROOT%{_bindir} \ + mandir=$RPM_BUILD_ROOT%{_mandir} \ + infodir=$RPM_BUILD_ROOT%{_infodir} \ + install + cd %{gcc_target}/newlib + make prefix=$RPM_BUILD_ROOT%{_prefix} \ + bindir=$RPM_BUILD_ROOT%{_bindir} \ + mandir=$RPM_BUILD_ROOT%{_mandir} \ + infodir=$RPM_BUILD_ROOT%{_infodir} \ + install-info + # cd back to build/ + cd ../.. + +%if %build_gnat +# Install a copy of gcc as gnatgcc +# Enables us to mix different versions of gnat and gnatgcc + rm -f $RPM_BUILD_ROOT%{_bindir}/%{gcc_target}-gnatgcc%{_exeext} + ln $RPM_BUILD_ROOT%{_bindir}/%{gcc_target}-gcc%{_exeext} \ + $RPM_BUILD_ROOT%{_bindir}/%{gcc_target}-gnatgcc%{_exeext} +%endif + + # Bug in gcc-3.x: It puts the build dirs into *.la files + + # host library + rm -f ${RPM_BUILD_ROOT}%{_prefix}/lib/libiberty.a + + # We use the version from binutils + rm -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target}-c++filt%{_exeext} + + # We don't ship info/dir + rm -f $RPM_BUILD_ROOT%{_infodir}/dir + +%if "%{gcc_version}" >= "3.4" + # Bug in gcc-3.4.0pre + rm -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target}-%{gcc_target}-gcjh%{_exeext} +%endif + +%if "%{gcc_version}" >= "3.3" + # Bug in gcc-3.3.x/gcc-3.4.x: Despite we don't need fixincludes, it installs + # the fixinclude-install-tools + rm -rf ${RPM_BUILD_ROOT}%{gccexec}/%{gcc_target}/%{gcc_version}/install-tools +%endif + +%if "%{gcc_version}" < "3.0" + # Bug in gcc-2.95.x: It bogusly tries to share cpp for all targets. + # Rename it to target_alias-cpp + if test -f $RPM_BUILD_ROOT%{_prefix}/bin/cpp%{_exeext}; + then + mv $RPM_BUILD_ROOT%{_prefix}/bin/cpp%{_exeext} \ + $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target}-cpp%{_exeext} + fi +%endif + + # gzip info files + ls $RPM_BUILD_ROOT%{_infodir}/*.info \ + $RPM_BUILD_ROOT%{_infodir}/*.info-? \ + $RPM_BUILD_ROOT%{_infodir}/*.info-?? \ + | while read a; do \ + gzip -9qf $a 2>/dev/null; \ + done + + # gzip man pages + gzip -9qf $RPM_BUILD_ROOT%{_mandir}/man?/*.? 2>/dev/null + + rm -f dirs ; + echo "%defattr(-,root,root)" >> dirs + echo "%dir %{_prefix}/lib" >> dirs ; + echo "%dir %{gcclib}" >> dirs ; + echo "%dir %{gcclib}/%{gcc_target}" >> dirs ; + + # Collect multilib subdirectories + f=`gcc/xgcc -Bgcc/ --print-multi-lib | sed -e 's,;.*$,,'` + + TGTDIR="%{gcclib}/%{gcc_target}/%{gcc_version}" + for i in $f; do + case $i in + \.) echo "%dir ${TGTDIR}" >> dirs + ;; + *) echo "%dir ${TGTDIR}/$i" >> dirs + ;; + esac + done + + TGTDIR="%{_prefix}/%{gcc_target}/lib" + for i in $f; do + case $i in + \.) echo "%dir ${TGTDIR}" >> dirs + ;; + *) echo "%dir ${TGTDIR}/$i" >> dirs + ;; + esac + done + + # Collect files to go into different packages + cp dirs files.gcc + cp dirs files.g77 + cp dirs files.objc + cp dirs files.gcj + cp dirs files.g++ + + TGTDIR="%{gcclib}/%{gcc_target}/%{gcc_version}" + f=`find ${RPM_BUILD_ROOT}${TGTDIR} ! -type d -print | sed -e "s,^$RPM_BUILD_ROOT,,g"`; + for i in $f; do + case $i in + *lib*.la) rm ${RPM_BUILD_ROOT}/$i ;; # ignore: gcc produces bogus libtool libs + *f771) ;; + *cc1) ;; + *cc1obj) ;; + *cc1plus) ;; # ignore: explicitly put into rpm elsewhere + *collect2) ;; + *libobjc*) echo "$i" >> files.objc ;; + *include/objc*) ;; + *include/g++*);; + *include/c++*);; + *adainclude*);; + *adalib*);; + *gnat1);; + *jc1) ;; + *jvgenmain) ;; + *libstdc++.a) echo "$i" >> files.g++ ;; + *libsupc++.a) echo "$i" >> files.g++ ;; + *) echo "$i" >> files.gcc ;; + esac + done + + TGTDIR="%{_prefix}/%{gcc_target}/lib" + f=`find ${RPM_BUILD_ROOT}${TGTDIR} ! -type d -print | sed -e "s,^$RPM_BUILD_ROOT,,g"`; + for i in $f; do + case $i in + *lib*.la) rm ${RPM_BUILD_ROOT}/$i;; # ignore - gcc produces bogus libtool libs + *libiberty.a) rm ${RPM_BUILD_ROOT}/$i ;; # ignore - GPL'ed +# all other files belong to gcc + *) echo "$i" >> files.gcc ;; + esac + done + |