#
# MUST SEE:
-# GCC ARM Improvement Project - http://www.inf.u-szeged.hu/gcc-arm/
+# - GCC ARM Improvement Project - http://www.inf.u-szeged.hu/gcc-arm/
+# - Developing StrongARM shellocde - http://phrack.org/show.php?p=58&a=10
+#
+# Conditional build:
+%bcond_with eabi # build with Embedded ABI support
#
Summary: Cross ARM GNU binary utility development utilities - gcc
Summary(es): Utilitarios para desarrollo de binarios de la GNU - ARM gcc
Summary(pt_BR): Utilitários para desenvolvimento de binários da GNU - ARM gcc
Summary(tr): GNU geliþtirme araçlarý - ARM gcc
Name: crossarm-gcc
-#define _snap 20040827
-Version: 3.4.2
-#Release: 0.%{_snap}.1
-Release: 3
+Version: 4.0.0
+Release: 1%{?with_eabi:eabi}
Epoch: 1
License: GPL
Group: Development/Languages
-#Source0: ftp://gcc.gnu.org/pub/gcc/snapshots/3.4-%{_snap}/gcc-3.4-%{_snap}.tar.bz2
Source0: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{version}/gcc-%{version}.tar.bz2
-# Source0-md5: 2fada3a3effd2fd791df09df1f1534b3
-Patch0: %{name}-pr15068.patch
-BuildRequires: crossarm-binutils
-BuildRequires: flex
-BuildRequires: bison
+# Source0-md5: 99f114330f152939f0d9586010da176f
+%define _llh_ver 2.6.11.2
+Source1: http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-%{_llh_ver}.tar.bz2
+# Source1-md5: 2d21d8e7ff641da74272b114c786464e
+%define _uclibc_ver 0.9.27
+Source2: http://uclibc.org/downloads/uClibc-%{_uclibc_ver}.tar.bz2
+# Source2-md5: 6250bd6524283bd8e7bc976d43a46ec0
+Source3: crossarm-embedded-uclibc.config
+Patch0: gcc-pr20973.patch
+Patch1: gcc-pr21173.patch
+URL: http://gcc.gnu.org/
BuildRequires: autoconf
-BuildRequires: /bin/bash
-Requires: crossarm-binutils
+BuildRequires: automake
+BuildRequires: bison
+BuildRequires: crossarm-binutils%{?with_eabi:(eabi)}
+BuildRequires: flex
+BuildRequires: kernel-module-build
+Requires: crossarm-binutils%{?with_eabi:(eabi)}
Requires: gcc-dirs
ExcludeArch: arm
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
-%define target arm-pld-linux
+%define target arm-linux%{?with_eabi:-eabi}
%define arch %{_prefix}/%{target}
%define gccarch %{_libdir}/gcc/%{target}
%define gcclib %{gccarch}/%{version}
-%define _noautostrip .*%{gcclib}.*/libgc.*\\.a
+%define _noautostrip .*/libgc.*\\.a
%description
This package contains a cross-gcc which allows the creation of
maszynach binariów do uruchamiania na ARM (architektura
arm-linux).
+%package c++
+Summary: C++ support for crossppc-arm
+Summary(pl): Obs³uga C++ dla crossppc-arm
+Group: Development/Languages
+Requires: %{name} = %{epoch}:%{version}-%{release}
+
+%description c++
+This package adds C++ support to the GNU Compiler Collection for ARM.
+
+%description c++ -l pl
+Ten pakiet dodaje obs³ugê C++ do kompilatora gcc dla ARM.
+
%prep
-#setup -q -n gcc-3.4-%{_snap}
-%setup -q -n gcc-%{version}
+%setup -q -n gcc-%{version} -a1 -a2
%patch0 -p1
+%patch1 -p1
%build
+FAKE_ROOT=$PWD/fake-root
+rm -rf $FAKE_ROOT
+
+install -d $FAKE_ROOT%{_prefix}
+cp -r uClibc-%{_uclibc_ver}/* $FAKE_ROOT%{_prefix}
+cd $FAKE_ROOT%{_prefix}
+install %{SOURCE3} .config
+%{__make} headers
+cd -
+
+cp -f /usr/share/automake/config.* .
rm -rf obj-%{target}
install -d obj-%{target}
cd obj-%{target}
CFLAGS="%{rpmcflags}" \
-CXXFLAGS="%{rpmcflags}" \
+CXXFLAGS="%{rpmcxxflags}" \
TEXCONFIG=false \
../configure \
--prefix=%{_prefix} \
--libexecdir=%{_libdir} \
--disable-shared \
--disable-threads \
- --enable-languages="c" \
+ --enable-languages="c,c++" \
+ --enable-c99 \
+ --enable-long-long \
+ --disable-nls \
--with-gnu-as \
--with-gnu-ld \
+ --with-demangler-in-ld \
--with-system-zlib \
- --with-multilib \
- --with-newlib \
- --without-headers \
+ --disable-multilib \
+ --with-sysroot=$FAKE_ROOT \
--without-x \
--target=%{target} \
--host=%{_target_platform} \
--build=%{_target_platform}
-%{__make}
+%{__make} all-gcc
%install
rm -rf $RPM_BUILD_ROOT
-%{__make} -C obj-%{target} install \
+%{__make} -C obj-%{target} install-gcc \
DESTDIR=$RPM_BUILD_ROOT
+install obj-%{target}/gcc/specs $RPM_BUILD_ROOT%{gcclib}
+
# don't want this here
rm -f $RPM_BUILD_ROOT%{_libdir}/libiberty.a
-%{target}-strip -g $RPM_BUILD_ROOT%{gcclib}/libgcov.a
+# include/ contains install-tools/include/* and headers that were fixed up
+# by fixincludes, we don't want former
+gccdir=$(echo $RPM_BUILD_ROOT%{_libdir}/gcc/*/*/)
+mkdir $gccdir/tmp
+# we have to save these however
+#{?with_java:mv -f $gccdir/include/{gcj,libffi/ffitarget.h} $gccdir/tmp}
+mv -f $gccdir/include/syslimits.h $gccdir/tmp
+rm -rf $gccdir/include
+mv -f $gccdir/tmp $gccdir/include
+cp -f $gccdir/install-tools/include/*.h $gccdir/include
+# but we don't want anything more from install-tools
+rm -rf $gccdir/install-tools
+
%if 0%{!?debug:1}
%{target}-strip -g $RPM_BUILD_ROOT%{gcclib}/libgcc.a
+%{target}-strip -g $RPM_BUILD_ROOT%{gcclib}/libgcov.a
%endif
%clean
%files
%defattr(644,root,root,755)
%attr(755,root,root) %{_bindir}/%{target}-cpp
-%attr(755,root,root) %{_bindir}/%{target}-gcc*
-%attr(755,root,root) %{_bindir}/%{target}-gcov
+%attr(755,root,root) %{_bindir}/%{target}-gcc
%dir %{gccarch}
%dir %{gcclib}
+%{?with_eabi:%dir %{gcclib}/thumb}
%attr(755,root,root) %{gcclib}/cc1
%attr(755,root,root) %{gcclib}/collect2
%{gcclib}/crt*.o
%{gcclib}/libgcc.a
+%if %{with eabi}
+%{gcclib}/thumb/crt*.o
+%{gcclib}/thumb/libgcc.a
+%endif
%{gcclib}/specs*
%dir %{gcclib}/include
%{gcclib}/include/*.h
+%{_mandir}/man1/%{target}-cpp.1*
%{_mandir}/man1/%{target}-gcc.1*
+
+%files c++
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/%{target}-g++
+%attr(755,root,root) %{gcclib}/cc1plus
+%{_mandir}/man1/%{target}-g++.1*