File arm-elf-gcc.spec of Package arm-elf-gcc

%define target arm-elf
%define _prefix /opt/%{target}-toolchain

%define newlib_version 1.19.0
%define gcc_version 4.5.2

Name:           %{target}-gcc
Version:        %gcc_version
Release:        0
License:        GPL-3.0 and LGPL-2.0+ and BSD-3-Clause
Summary:        Cross Compiling GNU GCC targeted at %{target}
Url:            http://gcc.gnu.org/
Group:          Development/Tools/Building
Source0:        http://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-%{gcc_version}.tar.bz2
Source1:        ftp://sources.redhat.com/pub/newlib/newlib-%{newlib_version}.tar.gz
Patch0:         fix-gcc5-build.patch
Patch1:         fix-gcc9-build.patch
%if 0%{?suse_version} >= 1699
BuildRequires:  gcc7
BuildRequires:  gcc7-c++
%endif
BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  bison
BuildRequires:  automake
BuildRequires:  autoconf
BuildRequires:  gmp-devel
BuildRequires:  mpfr-devel
BuildRequires:  mpc-devel
BuildRequires:  zlib-devel
BuildRequires:  %{target}-binutils = 2.21.1
BuildRequires:  fdupes
Requires:       %{target}-binutils = 2.21.1
ExclusiveArch:  %ix86 x86_64

%description
This is a Cross Compiling version of GNU GCC, which can be used to
compile programs for the %{target} platform, instead of for the
native %{_arch} platform.

%prep
%setup -q -b 1 -n gcc-%{gcc_version}
%patch -P 0 -p2
%if 0%{?suse_version} >= 1550
%patch -P 1 -p1
%endif

# Patch GCC multilib rules
echo "

MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork
MULTILIB_DIRNAMES += normal interwork

" >> ./gcc/config/arm/t-%{target}

# Copy the C library into GCC's source tree to make a combined tree
ln -s ../newlib-%{newlib_version}/newlib .
ln -s ../newlib-%{newlib_version}/libgloss .

# Touch and update some timestamps etc
./contrib/gcc_update --touch

# Extract %%__os_install_post into os_install_post~
cat << \EOF > os_install_post~
%__os_install_post
EOF

# Generate customized brp-*scripts
cat os_install_post~ | while read a x y; do
case $a in
# Prevent brp-strip* from trying to handle foreign binaries
*/brp-strip*)
  b=$(basename $a)
  sed -e 's,find %{buildroot},find %{buildroot}/%{_bindir} %{buildroot}%{_libexecdir},' $a > $b
  chmod a+x $b
  ;;
esac
done
sed -e 's,^[ ]*/usr/lib/rpm.*/brp-strip,./brp-strip,' < os_install_post~ > os_install_post


%build
# does not build with gcc15, use gcc7 on TW systems
%if 0%{?suse_version} >= 1699
export CC=gcc-7
export CXX=g++-7
%endif

mkdir -p build
pushd build
../configure \
	--target=%{target} \
	--host=%{_host} \
	--build=%{_build} \
	--prefix=%{_prefix} \
	--infodir=%{_infodir} \
	--mandir=%{_mandir} \
	--with-local-prefix=%{_prefix}/%{target} \
	--disable-shared \
	--disable-nls \
	--enable-interwork \
	--enable-multilib \
	--with-float=soft \
	--with-newlib \
	--with-system-zlib \
	--enable-languages=c,c++ \
	--disable-werror
make all
popd

%install
pushd build
make install DESTDIR=%{buildroot}
popd

# Delete all .la files
find "%{buildroot}%{_prefix}" -type f -name "*.la" -delete
# We don't want these as we are a cross version
rm    %{buildroot}%{_libdir}/libiberty.a
rm -r %{buildroot}%{_prefix}/lib/gcc/%{target}/%{version}/install-tools
rm -r %{buildroot}%{_prefix}/libexec/gcc/%{target}/%{version}/install-tools
rm -r %{buildroot}%{_prefix}/share/gcc-%{version}
rm -r %{buildroot}%{_infodir}
rm -r %{buildroot}%{_mandir}/man7
# Fix permisssions
find "%{buildroot}%{_prefix}/%{target}/lib/" -type f -name "*.a" | xargs chmod 644
# Relink duplicate files
%fdupes -s %{buildroot}
# Use custom os_install_post
%define __os_install_post . ./os_install_post

%files
%defattr(-,root,root)
%doc COPYING COPYING3 COPYING3.LIB COPYING.LIB COPYING.RUNTIME README
%{_prefix}

%changelog

openSUSE Build Service is sponsored by