summaryrefslogtreecommitdiffstats
path: root/scripts/gccnewlib
diff options
context:
space:
mode:
authorRalf Corsepius <ralf.corsepius@rtems.org>2005-04-12 15:17:39 +0000
committerRalf Corsepius <ralf.corsepius@rtems.org>2005-04-12 15:17:39 +0000
commit664d8b7197caa2251bf91f3461bd81177bd023bd (patch)
tree0d946546d4d37e8771d6fc7d6885e944bad832ce /scripts/gccnewlib
parent2005-04-12 Ralf Corsepius <ralf.corsepius@rtems.org> (diff)
downloadrtems-664d8b7197caa2251bf91f3461bd81177bd023bd.tar.bz2
New.
Diffstat (limited to 'scripts/gccnewlib')
-rw-r--r--scripts/gccnewlib/.cvsignore8
-rw-r--r--scripts/gccnewlib/Makefile.am79
-rw-r--r--scripts/gccnewlib/README8
-rw-r--r--scripts/gccnewlib/base-g77.add44
-rw-r--r--scripts/gccnewlib/base-gcc.add59
-rw-r--r--scripts/gccnewlib/base-gcj.add41
-rw-r--r--scripts/gccnewlib/base-gnat.add43
-rw-r--r--scripts/gccnewlib/gccnewlib.add405
-rw-r--r--scripts/gccnewlib/header.add4
-rw-r--r--scripts/gccnewlib/mkspec.in78
-rw-r--r--scripts/gccnewlib/target-c++.add30
-rw-r--r--scripts/gccnewlib/target-g77.add21
-rw-r--r--scripts/gccnewlib/target-gcc.add33
-rw-r--r--scripts/gccnewlib/target-gcj.add41
-rw-r--r--scripts/gccnewlib/target-gnat.add23
-rw-r--r--scripts/gccnewlib/target-objc.add19
16 files changed, 936 insertions, 0 deletions
diff --git a/scripts/gccnewlib/.cvsignore b/scripts/gccnewlib/.cvsignore
new file mode 100644
index 0000000000..ebade4dc78
--- /dev/null
+++ b/scripts/gccnewlib/.cvsignore
@@ -0,0 +1,8 @@
+*.spec
+Makefile
+Makefile.in
+gccnewlib.spec
+gccnewlib.spec.in
+gccnewlib_c_only.spec
+gccnewlib_c_only.spec.in
+mkspec
diff --git a/scripts/gccnewlib/Makefile.am b/scripts/gccnewlib/Makefile.am
new file mode 100644
index 0000000000..24e9f468af
--- /dev/null
+++ b/scripts/gccnewlib/Makefile.am
@@ -0,0 +1,79 @@
+##
+## $Id$
+##
+
+include $(top_srcdir)/common/common.am
+
+MKSPEC = $(SHELL) ./mkspec
+
+SUBPACKAGES = header.add
+SUBPACKAGES += $(top_builddir)/common/common.add
+SUBPACKAGES += gccnewlib.add
+SUBPACKAGES += $(top_builddir)/common/clean.add
+SUBPACKAGES += base-gcc.add target-gcc.add base-g77.add target-g77.add \
+ base-gcj.add target-gcj.add target-objc.add target-c++.add base-gnat.add \
+ target-gnat.add
+
+noinst_DATA = gccnewlib.spec.in
+
+gccnewlib.spec.in: $(SUBPACKAGES)
+ cat $^ > $@
+CLEANFILES = gccnewlib.spec.in
+
+MKGCCNEWLIBSPEC_DEPS = mkspec gccnewlib.spec.in $(top_builddir)/setup.cache
+
+RPM_SPECS_DATA =
+
+arm-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache arm-rtems@osversion@ > $@
+RPM_SPECS_DATA += arm-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+avr-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache avr-rtems@osversion@ > $@
+RPM_SPECS_DATA += avr-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+h8300-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache h8300-rtems@osversion@ > $@
+RPM_SPECS_DATA += h8300-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+i386-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache i386-rtems@osversion@ > $@
+RPM_SPECS_DATA += i386-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+m68k-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache m68k-rtems@osversion@ > $@
+RPM_SPECS_DATA += m68k-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+mips-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache mips-rtems@osversion@ > $@
+RPM_SPECS_DATA += mips-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+mips64-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache mips64-rtems@osversion@ > $@
+RPM_SPECS_DATA += mips64-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+powerpc-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache powerpc-rtems@osversion@ > $@
+RPM_SPECS_DATA += powerpc-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+sh-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache sh-rtems@osversion@ > $@
+RPM_SPECS_DATA += sh-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+sh-rtemscoff@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache sh-rtemscoff@osversion@ > $@
+RPM_SPECS_DATA += sh-rtemscoff@osversion@-$(GCC3NEWLIBVERS).spec
+
+sparc-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache sparc-rtems@osversion@ > $@
+RPM_SPECS_DATA += sparc-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+tic4x-rtems@osversion@-$(GCC3NEWLIBVERS).spec: $(MKGCCNEWLIBSPEC_DEPS)
+ $(MKSPEC) -cfg $(top_builddir)/setup.cache tic4x-rtems@osversion@ > $@
+RPM_SPECS_DATA += tic4x-rtems@osversion@-$(GCC3NEWLIBVERS).spec
+
+CLEANFILES += $(RPM_SPECS_DATA)
+
+EXTRA_DIST = $(SUBPACKAGES)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/scripts/gccnewlib/README b/scripts/gccnewlib/README
new file mode 100644
index 0000000000..db158b93c2
--- /dev/null
+++ b/scripts/gccnewlib/README
@@ -0,0 +1,8 @@
+#
+# $Id$
+#
+
+This directory contains RPM-spec file fragments (*.add) which are used to
+compose the toolchain specs.
+
+Cf. Makefile.am for details on how the toolchain specs get composed.
diff --git a/scripts/gccnewlib/base-g77.add b/scripts/gccnewlib/base-g77.add
new file mode 100644
index 0000000000..bf34e99fc3
--- /dev/null
+++ b/scripts/gccnewlib/base-g77.add
@@ -0,0 +1,44 @@
+%if %build_g77
+# ==============================================================
+# rtems-base-g77
+# ==============================================================
+%package -n %{rpmprefix}rtems@osversion@-base-g77
+Summary: rtems base package for gcc/g77 compiler
+Group: %{rpmgroup}
+Requires: rtems-base-gcc
+
+%description -n %{rpmprefix}rtems@osversion@-base-g77
+RTEMS is an open source operating system for embedded systems.
+
+This is the files for gcc/g77 that are shared by all targets.
+
+%files -n %{rpmprefix}rtems@osversion@-base-g77
+%defattr(-,root,root)
+%dir %{_infodir}
+%doc %{_infodir}/g77.info*.gz
+
+%dir %{_mandir}
+%dir %{_mandir}/man1
+%doc %{_mandir}/man1/%{gcc_target}-g77.1*
+
+%post -n %{rpmprefix}rtems@osversion@-base-g77
+ if test -d $RPM_INSTALL_PREFIX%{_infodir};
+ then
+ rm -f $RPM_INSTALL_PREFIX%{_infodir}/dir
+ f=`find $RPM_INSTALL_PREFIX%{_infodir} -name '*.info.gz'`
+ test -n "$f" && for i in $f; do
+ install-info $i $RPM_INSTALL_PREFIX%{_infodir}/dir
+ done
+ fi
+
+%postun -n %{rpmprefix}rtems@osversion@-base-g77
+ if test -d $RPM_INSTALL_PREFIX%{_infodir};
+ then
+ rm -f $RPM_INSTALL_PREFIX%{_infodir}/dir
+ f=`find $RPM_INSTALL_PREFIX%{_infodir} -name '*.info.gz'`
+ test -n "$f" && for i in $f; do
+ install-info $i $RPM_INSTALL_PREFIX%{_infodir}/dir
+ done
+ fi
+
+%endif
diff --git a/scripts/gccnewlib/base-gcc.add b/scripts/gccnewlib/base-gcc.add
new file mode 100644
index 0000000000..58f8ca124f
--- /dev/null
+++ b/scripts/gccnewlib/base-gcc.add
@@ -0,0 +1,59 @@
+# ==============================================================
+# %{rpmprefix}rtems@osversion@-base-gcc
+# ==============================================================
+%package -n %{rpmprefix}rtems@osversion@-base-gcc
+Summary: base package for rtems gcc and newlib C Library
+Group: %{rpmgroup}
+
+%description -n %{rpmprefix}rtems@osversion@-base-gcc
+
+RTEMS is an open source operating system for embedded systems.
+
+This is the files for gcc and newlib that are shared by all targets.
+
+%files -n %{rpmprefix}rtems@osversion@-base-gcc
+%defattr(-,root,root)
+%dir %{_infodir}
+%doc %{_infodir}/cpp.info*
+%doc %{_infodir}/cppinternals.info*
+%doc %{_infodir}/gcc.info*
+%doc %{_infodir}/libc.info*
+%doc %{_infodir}/libm.info*
+%doc %{_infodir}/gccint.info*
+%if "%{gcc_version}" >= "3.4"
+%doc %{_infodir}/gccinstall.info*
+%endif
+
+%dir %{_mandir}
+%if "%{gcc_version}" < "3.4"
+%dir %{_mandir}/man1
+%doc %{_mandir}/man1/cpp.1*
+%doc %{_mandir}/man1/gcov.1*
+%endif
+%dir %{_mandir}/man7
+%doc %{_mandir}/man7/fsf-funding.7*
+%doc %{_mandir}/man7/gfdl.7*
+%doc %{_mandir}/man7/gpl.7*
+
+%dir %{_prefix}/include
+
+%post -n %{rpmprefix}rtems@osversion@-base-gcc
+ if test -d $RPM_INSTALL_PREFIX%{_infodir};
+ then
+ rm -f $RPM_INSTALL_PREFIX%{_infodir}/dir
+ f=`find $RPM_INSTALL_PREFIX%{_infodir} -name '*.info.gz'`
+ test -n "$f" && for i in $f; do
+ install-info $i $RPM_INSTALL_PREFIX%{_infodir}/dir
+ done
+ fi
+
+%postun -n %{rpmprefix}rtems@osversion@-base-gcc
+ if test -d $RPM_INSTALL_PREFIX%{_infodir};
+ then
+ rm -f $RPM_INSTALL_PREFIX%{_infodir}/dir
+ f=`find $RPM_INSTALL_PREFIX%{_infodir} -name '*.info.gz'`
+ test -n "$f" && for i in $f; do
+ install-info $i $RPM_INSTALL_PREFIX%{_infodir}/dir
+ done
+ fi
+
diff --git a/scripts/gccnewlib/base-gcj.add b/scripts/gccnewlib/base-gcj.add
new file mode 100644
index 0000000000..a437ea7700
--- /dev/null
+++ b/scripts/gccnewlib/base-gcj.add
@@ -0,0 +1,41 @@
+%if %build_gcj
+# ==============================================================
+# rtems-base-gcj
+# ==============================================================
+%package -n %{rpmprefix}rtems@osversion@-base-gcj
+Summary: base package for rtems gcc/java compiler (gcj).
+Group: %{rpmgroup}
+Requires: %{rpmprefix}rtems@osversion@-base-gcc
+
+%description -n %{rpmprefix}rtems@osversion@-base-gcj
+RTEMS is an open source operating system for embedded systems.
+
+This is the files for gcc/java (gcj) that are shared by all targets.
+
+%files -n %{rpmprefix}rtems@osversion@-base-gcj
+%defattr(-,root,root)
+%if "%{gcc_version}" <= "3.4"
+%dir %{_prefix}/bin
+%{_prefix}/bin/jar%{_exeext}
+%{_prefix}/bin/grepjar%{_exeext}
+%endif
+
+%dir %{_infodir}
+%doc %{_infodir}/gcj.info*
+%if "%{gcc_version}" >= "3.3"
+%doc %{_infodir}/fastjar.info*
+%endif
+%if "%{gcc_version}" >= "3.3" && "%{gcc_version}" <= "3.4"
+%dir %{_mandir}/man1
+%doc %{_mandir}/man1/gcjh.1*
+%doc %{_mandir}/man1/jv-scan.1*
+%doc %{_mandir}/man1/jcf-dump.1*
+%doc %{_mandir}/man1/gij.1*
+%doc %{_mandir}/man1/jv-convert.1*
+%doc %{_mandir}/man1/rmic.1*
+%doc %{_mandir}/man1/rmiregistry.1*
+%doc %{_mandir}/man1/jar.1*
+%doc %{_mandir}/man1/grepjar.1*
+%endif
+
+%endif
diff --git a/scripts/gccnewlib/base-gnat.add b/scripts/gccnewlib/base-gnat.add
new file mode 100644
index 0000000000..8f1e96af95
--- /dev/null
+++ b/scripts/gccnewlib/base-gnat.add
@@ -0,0 +1,43 @@
+%if %build_gnat
+# ==============================================================
+# rtems-base-gnat
+# ==============================================================
+%package -n %{rpmprefix}rtems@osversion@-base-gnat
+Summary: gcc/gnat tools
+Group: %{rpmgroup}
+
+%description -n %{rpmprefix}rtems@osversion@-base-gnat
+RTEMS is an open source operating system for embedded systems.
+
+This is the gcc/gnat tools for the gcc/gnat compiler
+
+%files -n %{rpmprefix}rtems@osversion@-base-gnat
+%defattr(-,root,root)
+%dir %{_prefix}/bin
+
+%if "%{gcc_version}" >= "3.3"
+%{_infodir}/gnat*
+%endif
+
+%if "%{gcc_version}" >= "3.3"
+%post -n %{rpmprefix}rtems@osversion@-base-gnat
+ if test -d $RPM_INSTALL_PREFIX%{_infodir};
+ then
+ rm -f $RPM_INSTALL_PREFIX%{_infodir}/dir
+ f=`find $RPM_INSTALL_PREFIX%{_infodir} -name '*.info.gz'`
+ test -n "$f" && for i in $f; do
+ install-info $i $RPM_INSTALL_PREFIX%{_infodir}/dir
+ done
+ fi
+
+%postun -n %{rpmprefix}rtems@osversion@-base-gnat
+ if test -d $RPM_INSTALL_PREFIX%{_infodir};
+ then
+ rm -f $RPM_INSTALL_PREFIX%{_infodir}/dir
+ f=`find $RPM_INSTALL_PREFIX%{_infodir} -name '*.info.gz'`
+ test -n "$f" && for i in $f; do
+ install-info $i $RPM_INSTALL_PREFIX%{_infodir}/dir
+ done
+ fi
+%endif
+%endif
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
+
diff --git a/scripts/gccnewlib/header.add b/scripts/gccnewlib/header.add
new file mode 100644
index 0000000000..55042d2cbf
--- /dev/null
+++ b/scripts/gccnewlib/header.add
@@ -0,0 +1,4 @@
+#
+# spec file for building gcc for rtems
+#
+# Copyright (c) 1999,2000,2001,2002,2003 OARCorp, Huntsville, AL
diff --git a/scripts/gccnewlib/mkspec.in b/scripts/gccnewlib/mkspec.in
new file mode 100644
index 0000000000..58fab4bd17
--- /dev/null
+++ b/scripts/gccnewlib/mkspec.in
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# Usage: mkspec CPU
+#
+
+RTEMS_DIR=`dirname $0`/@top_srcdir@
+
+CFG=../setup.cache
+
+usage()
+{
+ echo "$0 [options] <target_alias>"
+ echo " options:"
+ echo " -cfg <setup.cache>"
+ echo " -a <alternate specs.in>"
+ exit 1 ;
+}
+
+specsrc=${RTEMS_DIR}/gcc3newlib/gccnewlib.spec.in
+
+while test $# -ge 2; do
+case $1 in
+-cfg)
+ shift
+ CFG=$1
+ shift
+ ;;
+-a) # alternate specs file
+ shift
+ specsrc=$1
+ shift
+ ;;
+-*)
+ echo "invalid option $1";
+ usage
+ ;;
+esac
+done
+
+if test ! $# -eq 1;
+then
+ echo "Invalid number of arguments"
+ usage
+fi
+
+# target to build for
+target_alias=$1
+
+. ./$CFG
+
+patchn=-1
+if test -n "${gcc_patch_version}"; then
+patchn=`expr $patchn + 1`
+PATCH1="Patch${patchn}: gcc-${gcc_version}-rtems-${gcc_patch_version}.diff"
+fi
+
+if test -n "${newlib_patch_version}"; then
+patchn=`expr $patchn + 1`
+PATCH3="Patch${patchn}: newlib-${newlib_version}-rtems-${newlib_patch_version}.diff"
+fi
+
+# note that the variables in the gcc3newlib directory are actually the same
+sed -e "s,@PATCH1\@,${PATCH1}," \
+ -e "s,@PATCH3\@,${PATCH3}," \
+ -e "s%@Release\@%${gccnewlib_rpm_release}%g" \
+ -e "s%@target_alias\@%${target_alias}%g" \
+ -e "s%@prefix\@%@prefix@%g" \
+ -e "s,@rpmprefix\@,@rpmprefix@,g" \
+ -e "s%@rpmgroup\@%@rpmgroup@%g" \
+ -e "s%@osversion\@%@osversion@%g" \
+ -e "s,@rpm_build_root\@,${rpm_build_root},g" \
+ -e "s%@gcc_version\@%${gcc_version}%g" \
+ -e "s%@gcc_patch_version\@%${gcc_patch_version}%g" \
+ -e "s%@gcc_suffix\@%${gcc_suffix}%g" \
+ -e "s%@newlib_version\@%${newlib_version}%g" \
+ -e "s%@newlib_patch_version\@%${newlib_patch_version}%g" \
+ -e "s%@newlib_suffix\@%${newlib_suffix}%g" \
+< ${specsrc}
diff --git a/scripts/gccnewlib/target-c++.add b/scripts/gccnewlib/target-c++.add
new file mode 100644
index 0000000000..c3270b8bd7
--- /dev/null
+++ b/scripts/gccnewlib/target-c++.add
@@ -0,0 +1,30 @@
+%if %build_cxx
+# ==============================================================
+# %{gcc_target}-c++
+# ==============================================================
+%package -n %{rpmprefix}%{gcc_target}-c++
+Summary: gcc/g++ compiler (c++) for %{gcc_target}
+Group: %{rpmgroup}
+Requires: %{rpmprefix}rtems@osversion@-base-gcc %{rpmprefix}%{gcc_target}-gcc
+
+%description -n %{rpmprefix}%{gcc_target}-c++
+RTEMS is an open source operating system for embedded systems.
+
+This is the gcc/g++ compiler for %{gcc_target}
+
+%files -n %{rpmprefix}%{gcc_target}-c++ -f build/files.g++
+%defattr(-,root,root)
+%doc %{_mandir}/man1/%{gcc_target}-g++.1*
+
+%dir %{_prefix}/bin
+%{_prefix}/bin/%{gcc_target}-c++%{_exeext}
+%{_prefix}/bin/%{gcc_target}-g++%{_exeext}
+
+%{gccexec}/%{gcc_target}/%{gcc_version}/cc1plus%{_exeext}
+%dir %{gcclib}/%{gcc_target}/%{gcc_version}/include
+%if "%{gcc_version}" >= "3.2"
+%{gcclib}/%{gcc_target}/%{gcc_version}/include/c++
+%else
+%{gcclib}/%{gcc_target}/%{gcc_version}/include/g++
+%endif
+%endif
diff --git a/scripts/gccnewlib/target-g77.add b/scripts/gccnewlib/target-g77.add
new file mode 100644
index 0000000000..5391579ab7
--- /dev/null
+++ b/scripts/gccnewlib/target-g77.add
@@ -0,0 +1,21 @@
+%if %build_g77
+# ==============================================================
+# %{gcc_target}-g77
+# ==============================================================
+%package -n %{rpmprefix}%{gcc_target}-g77
+Summary: gcc/g77 compiler for %{gcc_target}
+Group: %{rpmgroup}
+Requires: %{rpmprefix}rtems@osversion@-base-g77 %{rpmprefix}%{gcc_target}-gcc
+
+%description -n %{rpmprefix}%{gcc_target}-g77
+RTEMS is an open source operating system for embedded systems.
+
+This is the gcc/g77 compiler for %{gcc_target}
+
+%files -n %{rpmprefix}%{gcc_target}-g77 -f build/files.g77
+%defattr(-,root,root)
+%dir %{_prefix}/bin
+%{_prefix}/bin/%{gcc_target}-g77%{_exeext}
+
+%{gcclib}/%{gcc_target}/%{gcc_version}/f771%{_exeext}
+%endif
diff --git a/scripts/gccnewlib/target-gcc.add b/scripts/gccnewlib/target-gcc.add
new file mode 100644
index 0000000000..aaa9846d9e
--- /dev/null
+++ b/scripts/gccnewlib/target-gcc.add
@@ -0,0 +1,33 @@
+# ==============================================================
+# %{gcc_target}-gcc
+# ==============================================================
+%package -n %{rpmprefix}%{gcc_target}-gcc
+Summary: rtems gcc and newlib C Library for %{gcc_target}
+Group: %{rpmgroup}
+Requires: %{rpmprefix}%{gcc_target}-binutils %{rpmprefix}rtems@osversion@-base-gcc
+
+%description -n %{rpmprefix}%{gcc_target}-gcc
+RTEMS is an open source operating system for embedded systems.
+
+This is gcc and newlib C Library for %{gcc_target}.
+
+%files -n %{rpmprefix}%{gcc_target}-gcc -f build/files.gcc
+%defattr(-,root,root)
+%doc %{_mandir}/man1/%{gcc_target}-gcc.1*
+%if "%{gcc_version}" >= "3.4"
+%doc %{_mandir}/man1/%{gcc_target}-cpp.1*
+%doc %{_mandir}/man1/%{gcc_target}-gcov.1*
+%endif
+%{_prefix}/bin/%{gcc_target}-cpp%{_exeext}
+%{_prefix}/bin/%{gcc_target}-gcc%{_exeext}
+%if "%{gcc_version}" >= "3.3"
+%{_prefix}/bin/%{gcc_target}-gcc-%{gcc_version}%{_exeext}
+%endif
+%{_prefix}/bin/%{gcc_target}-gcov%{_exeext}
+%{_prefix}/bin/%{gcc_target}-gccbug
+%{_prefix}/%{gcc_target}/include
+
+%dir %{gcclib}/%{gcc_target}/%{gcc_version}/include
+
+%{gccexec}/%{gcc_target}/%{gcc_version}/cc1%{_exeext}
+%{gccexec}/%{gcc_target}/%{gcc_version}/collect2%{_exeext}
diff --git a/scripts/gccnewlib/target-gcj.add b/scripts/gccnewlib/target-gcj.add
new file mode 100644
index 0000000000..57f4c91572
--- /dev/null
+++ b/scripts/gccnewlib/target-gcj.add
@@ -0,0 +1,41 @@
+%if %build_gcj
+# ==============================================================
+# %{gcc_target}-gcj
+# ==============================================================
+%package -n %{rpmprefix}%{gcc_target}-gcj
+Summary: gcc/java compiler (gcj) for %{gcc_target}
+Group: %{rpmgroup}
+Requires: %{rpmprefix}rtems@osversion@-base-gcj %{rpmprefix}%{gcc_target}-gcc
+
+%description -n %{rpmprefix}%{gcc_target}-gcj
+RTEMS is an open source operating system for embedded systems.
+
+This is the gcc/java compiler for %{gcc_target}
+
+%files -n %{rpmprefix}%{gcc_target}-gcj -f build/files.gcj
+%defattr(-,root,root)
+%dir %{_prefix}/bin
+%{_prefix}/bin/%{gcc_target}-gcj%{_exeext}
+%{_prefix}/bin/%{gcc_target}-jcf-dump%{_exeext}
+%{_prefix}/bin/%{gcc_target}-jv-scan%{_exeext}
+%{_prefix}/bin/%{gcc_target}-gcjh%{_exeext}
+%doc %{_mandir}/man1/%{gcc_target}-gcj.1*
+
+%if "%{gcc_version}" >= "3.4"
+%{_prefix}/bin/%{gcc_target}-jar%{_exeext}
+%{_prefix}/bin/%{gcc_target}-grepjar%{_exeext}
+%doc %{_mandir}/man1/%{gcc_target}-jar.1*
+%doc %{_mandir}/man1/%{gcc_target}-grepjar.1*
+%doc %{_mandir}/man1/%{gcc_target}-rmic.1*
+%doc %{_mandir}/man1/%{gcc_target}-rmiregistry.1*
+%doc %{_mandir}/man1/%{gcc_target}-gcjh.1*
+%doc %{_mandir}/man1/%{gcc_target}-gij.1*
+%doc %{_mandir}/man1/%{gcc_target}-jcf-dump.1*
+%doc %{_mandir}/man1/%{gcc_target}-jv-convert.1*
+%doc %{_mandir}/man1/%{gcc_target}-jv-scan.1*
+%endif
+
+%{gccexec}/%{gcc_target}/%{gcc_version}/jc1%{_exeext}
+%{gccexec}/%{gcc_target}/%{gcc_version}/jvgenmain%{_exeext}
+
+%endif
diff --git a/scripts/gccnewlib/target-gnat.add b/scripts/gccnewlib/target-gnat.add
new file mode 100644
index 0000000000..53224124da
--- /dev/null
+++ b/scripts/gccnewlib/target-gnat.add
@@ -0,0 +1,23 @@
+%if %build_gnat
+# ==============================================================
+# %{gcc_target}-gnat
+# ==============================================================
+%package -n %{rpmprefix}%{gcc_target}-gnat
+Summary: gcc/gnat compiler for %{gcc_target}
+Group: %{rpmgroup}
+Requires: %{rpmprefix}rtems@osversion@-base-gnat %{rpmprefix}%{gcc_target}-gcc
+
+%description -n %{rpmprefix}%{gcc_target}-gnat
+RTEMS is an open source operating system for embedded systems.
+
+This is the gcc/gnat compiler for %{gcc_target}
+
+%files -n %{rpmprefix}%{gcc_target}-gnat
+%defattr(-,root,root)
+%dir %{_prefix}/bin
+%{_prefix}/bin/%{gcc_target}-gnat*
+
+%{gccexec}/%{gcc_target}/%{gcc_version}/cc1plus%{_exeext}
+%{gcclib}/%{gcc_target}/%{gcc_version}/adalib
+%{gcclib}/%{gcc_target}/%{gcc_version}/adainclude
+%endif
diff --git a/scripts/gccnewlib/target-objc.add b/scripts/gccnewlib/target-objc.add
new file mode 100644
index 0000000000..5fdc9928f5
--- /dev/null
+++ b/scripts/gccnewlib/target-objc.add
@@ -0,0 +1,19 @@
+%if %build_objc
+# ==============================================================
+# %{gcc_target}-objc
+# ==============================================================
+%package -n %{rpmprefix}%{gcc_target}-objc
+Summary: gcc/objc compiler for %{gcc_target}
+Group: %{rpmgroup}
+Requires: %{rpmprefix}%{gcc_target}-gcc
+
+%description -n %{rpmprefix}%{gcc_target}-objc
+RTEMS is an open source operating system for embedded systems.
+
+This is the gcc/objc compiler for %{gcc_target}
+
+%files -n %{rpmprefix}%{gcc_target}-objc -f build/files.objc
+%defattr(-,root,root)
+%{gcclib}/%{gcc_target}/%{gcc_version}/cc1obj%{_exeext}
+%{gcclib}/%{gcc_target}/%{gcc_version}/include/objc
+%endif