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 | |
parent | 2005-04-12 Ralf Corsepius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-664d8b7197caa2251bf91f3461bd81177bd023bd.tar.bz2 |
New.
Diffstat (limited to '')
-rw-r--r-- | scripts/gccnewlib/.cvsignore | 8 | ||||
-rw-r--r-- | scripts/gccnewlib/Makefile.am | 79 | ||||
-rw-r--r-- | scripts/gccnewlib/README | 8 | ||||
-rw-r--r-- | scripts/gccnewlib/base-g77.add | 44 | ||||
-rw-r--r-- | scripts/gccnewlib/base-gcc.add | 59 | ||||
-rw-r--r-- | scripts/gccnewlib/base-gcj.add | 41 | ||||
-rw-r--r-- | scripts/gccnewlib/base-gnat.add | 43 | ||||
-rw-r--r-- | scripts/gccnewlib/gccnewlib.add | 405 | ||||
-rw-r--r-- | scripts/gccnewlib/header.add | 4 | ||||
-rw-r--r-- | scripts/gccnewlib/mkspec.in | 78 | ||||
-rw-r--r-- | scripts/gccnewlib/target-c++.add | 30 | ||||
-rw-r--r-- | scripts/gccnewlib/target-g77.add | 21 | ||||
-rw-r--r-- | scripts/gccnewlib/target-gcc.add | 33 | ||||
-rw-r--r-- | scripts/gccnewlib/target-gcj.add | 41 | ||||
-rw-r--r-- | scripts/gccnewlib/target-gnat.add | 23 | ||||
-rw-r--r-- | scripts/gccnewlib/target-objc.add | 19 |
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 |