[mingw-binutils] Added win64 support

epienbro epienbro at fedoraproject.org
Tue Mar 6 21:27:46 UTC 2012


commit 78a21954d18599d1a4343e28aecd6953b52961de
Author: Erik van Pienbroek <epienbro at fedoraproject.org>
Date:   Tue Mar 6 22:27:41 2012 +0100

    Added win64 support

 mingw-binutils.spec |  220 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 198 insertions(+), 22 deletions(-)
---
diff --git a/mingw-binutils.spec b/mingw-binutils.spec
index 890a410..db806ed 100644
--- a/mingw-binutils.spec
+++ b/mingw-binutils.spec
@@ -1,32 +1,60 @@
+%global mingw_build_win32 1
+%global mingw_build_win64 1
+%global run_testsuite 1
+
 Name:           mingw-binutils
 Version:        2.22.52
-Release:        2%{?dist}
-Summary:        MinGW Windows binutils
+Release:        3%{?dist}
+Summary:        Cross-compiled version of binutils for Win32 and Win64 environments
 
 License:        GPLv2+ and LGPLv2+ and GPLv3+ and LGPLv3+
 Group:          Development/Libraries
+
 URL:            http://www.gnu.org/software/binutils/
-Source0:        http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.bz2
+Source0:        ftp://sourceware.org/pub/binutils/snapshots/binutils-%{version}.tar.bz2
 
 BuildRequires:  flex
 BuildRequires:  bison
 BuildRequires:  texinfo
 BuildRequires:  mingw32-filesystem >= 95
-
-# NB: This must be left in.
-Requires:       mingw32-filesystem >= 95
+BuildRequires:  mingw64-filesystem >= 95
+%if %{run_testsuite}
+BuildRequires:  dejagnu
+BuildRequires:  sharutils
+%endif
 
 
 %description
-MinGW Windows binutils (utilities like 'strip', 'as', 'ld') which
+Cross compiled binutils (utilities like 'strip', 'as', 'ld') which
 understand Windows executables and DLLs.
 
+%package -n mingw-binutils-generic
+Summary:        Utilities which are needed for both the Win32 and Win64 toolchains
+
+%description -n mingw-binutils-generic
+Utilities (like strip and objdump) which are needed for
+both the Win32 and Win64 toolchains
 
 %package -n mingw32-binutils
-Summary:        MinGW Windows binutils
+Summary:        Cross-compiled version of binutils for the Win32 environment
+Requires:       mingw-binutils-generic = %{version}-%{release}
+
+# NB: This must be left in.
+Requires:       mingw32-filesystem >= 95
 
 %description -n mingw32-binutils
-MinGW Windows binutils (utilities like 'strip', 'as', 'ld') which
+Cross compiled binutils (utilities like 'strip', 'as', 'ld') which
+understand Windows executables and DLLs.
+
+%package -n mingw64-binutils
+Summary:        Cross-compiled version of binutils for the Win64 environment
+Requires:       mingw-binutils-generic = %{version}-%{release}
+
+# NB: This must be left in.
+Requires:       mingw64-filesystem >= 95
+
+%description -n mingw64-binutils
+Cross compiled binutils (utilities like 'strip', 'as', 'ld') which
 understand Windows executables and DLLs.
 
 
@@ -35,8 +63,8 @@ understand Windows executables and DLLs.
 
 
 %build
-mkdir -p build
-cd build
+mkdir build_win32
+pushd build_win32
 CFLAGS="$RPM_OPT_FLAGS" \
 ../configure \
   --build=%_build --host=%_host \
@@ -51,34 +79,182 @@ CFLAGS="$RPM_OPT_FLAGS" \
   --infodir=%{_infodir}
 
 make all %{?_smp_mflags}
+popd
+
+mkdir build_win64
+pushd build_win64
+CFLAGS="$RPM_OPT_FLAGS" \
+../configure \
+  --build=%_build --host=%_host \
+  --target=%{mingw64_target} \
+  --disable-nls \
+  --with-sysroot=%{mingw64_sysroot} \
+  --prefix=%{_prefix} \
+  --bindir=%{_bindir} \
+  --includedir=%{_includedir} \
+  --libdir=%{_libdir} \
+  --mandir=%{_mandir} \
+  --infodir=%{_infodir}
+
+make all %{?_smp_mflags}
+popd
+
+# Create multilib versions for the tools strip, objdump and objcopy
+mkdir build_multilib
+pushd build_multilib
+CFLAGS="$RPM_OPT_FLAGS" \
+../configure \
+  --build=%_build --host=%_host \
+  --target=%{mingw64_target} \
+  --enable-targets=%{mingw64_target},%{mingw32_target} \
+  --disable-nls \
+  --with-sysroot=%{mingw64_sysroot} \
+  --prefix=%{_prefix} \
+  --bindir=%{_bindir} \
+  --includedir=%{_includedir} \
+  --libdir=%{_libdir} \
+  --mandir=%{_mandir} \
+  --infodir=%{_infodir}
+
+make %{?_smp_mflags}
+popd
+
+
+%check
+%if !%{run_testsuite}
+echo ====================TESTSUITE DISABLED=========================
+%else
+pushd build_win32
+  make -k check < /dev/null || :
+  echo ====================TESTING WIN32 =========================
+  cat {gas/testsuite/gas,ld/ld,binutils/binutils}.sum
+  echo ====================TESTING WIN32 END=====================
+  for file in {gas/testsuite/gas,ld/ld,binutils/binutils}.{sum,log}
+  do
+    ln $file binutils-%{mingw32_target}-$(basename $file) || :
+  done
+  tar cjf binutils-%{mingw32_target}.tar.bz2 binutils-%{mingw32_target}-*.{sum,log}
+  uuencode binutils-%{mingw32_target}.tar.bz2 binutils-%{mingw32_target}.tar.bz2
+  rm -f binutils-%{mingw32_target}.tar.bz2 binutils-%{mingw32_target}-*.{sum,log}
+popd
+
+pushd build_win64
+  make -k check < /dev/null || :
+  echo ====================TESTING WIN64 =========================
+  cat {gas/testsuite/gas,ld/ld,binutils/binutils}.sum
+  echo ====================TESTING WIN64 END=====================
+  for file in {gas/testsuite/gas,ld/ld,binutils/binutils}.{sum,log}
+  do
+    ln $file binutils-%{mingw64_target}-$(basename $file) || :
+  done
+  tar cjf binutils-%{mingw64_target}.tar.bz2 binutils-%{mingw64_target}-*.{sum,log}
+  uuencode binutils-%{mingw64_target}.tar.bz2 binutils-%{mingw64_target}.tar.bz2
+  rm -f binutils-%{mingw64_target}.tar.bz2 binutils-%{mingw64_target}-*.{sum,log}
+popd
+%endif
 
 
 %install
-cd build
-make DESTDIR=$RPM_BUILD_ROOT install
+%mingw_make_install DESTDIR=$RPM_BUILD_ROOT
+make -C build_multilib DESTDIR=$RPM_BUILD_ROOT/multilib install
 
 # These files conflict with ordinary binutils.
 rm -rf $RPM_BUILD_ROOT%{_infodir}
-rm -f ${RPM_BUILD_ROOT}%{_libdir}/libiberty*
+rm -f $RPM_BUILD_ROOT%{_libdir}/libiberty*
 
-# Temporary provide mingw-strip, mingw-objdump and mingw-objcopy
-# in preparation for win32+win64 support
-ln -s %{mingw32_strip} $RPM_BUILD_ROOT%{_bindir}/%{mingw_strip}
-ln -s %{mingw32_objdump} $RPM_BUILD_ROOT%{_bindir}/%{mingw_objdump}
-ln -s %{mingw32_objcopy} $RPM_BUILD_ROOT%{_bindir}/%{mingw_objcopy}
+# Keep the multilib versions of the strip, objdump and objcopy commands
+# We need these for the RPM integration as these tools must be able to
+# both process win32 and win64 binaries
+mv $RPM_BUILD_ROOT/multilib%{_bindir}/%{mingw64_strip} $RPM_BUILD_ROOT%{_bindir}/%{mingw_strip}
+mv $RPM_BUILD_ROOT/multilib%{_bindir}/%{mingw64_objdump} $RPM_BUILD_ROOT%{_bindir}/%{mingw_objdump}
+mv $RPM_BUILD_ROOT/multilib%{_bindir}/%{mingw64_objcopy} $RPM_BUILD_ROOT%{_bindir}/%{mingw_objcopy}
+rm -rf $RPM_BUILD_ROOT/multilib
 
 
-%files -n mingw32-binutils
+%files -n mingw-binutils-generic
+%doc COPYING
 %{_mandir}/man1/*
 %{_bindir}/%{mingw_strip}
 %{_bindir}/%{mingw_objdump}
 %{_bindir}/%{mingw_objcopy}
-%{_bindir}/%{mingw32_target}-*
-%{_prefix}/%{mingw32_target}/bin/*
+
+%files -n mingw32-binutils
+%{_bindir}/%{mingw32_target}-addr2line
+%{_bindir}/%{mingw32_target}-ar
+%{_bindir}/%{mingw32_target}-as
+%{_bindir}/%{mingw32_target}-c++filt
+%{_bindir}/%{mingw32_target}-dlltool
+%{_bindir}/%{mingw32_target}-dllwrap
+%{_bindir}/%{mingw32_target}-elfedit
+%{_bindir}/%{mingw32_target}-gprof
+%{_bindir}/%{mingw32_target}-ld
+%{_bindir}/%{mingw32_target}-ld.bfd
+%{_bindir}/%{mingw32_target}-nm
+%{_bindir}/%{mingw32_target}-objcopy
+%{_bindir}/%{mingw32_target}-objdump
+%{_bindir}/%{mingw32_target}-ranlib
+%{_bindir}/%{mingw32_target}-readelf
+%{_bindir}/%{mingw32_target}-size
+%{_bindir}/%{mingw32_target}-strings
+%{_bindir}/%{mingw32_target}-strip
+%{_bindir}/%{mingw32_target}-windmc
+%{_bindir}/%{mingw32_target}-windres
+%{_prefix}/%{mingw32_target}/bin/ar
+%{_prefix}/%{mingw32_target}/bin/as
+%{_prefix}/%{mingw32_target}/bin/dlltool
+%{_prefix}/%{mingw32_target}/bin/ld
+%{_prefix}/%{mingw32_target}/bin/ld.bfd
+%{_prefix}/%{mingw32_target}/bin/nm
+%{_prefix}/%{mingw32_target}/bin/objcopy
+%{_prefix}/%{mingw32_target}/bin/objdump
+%{_prefix}/%{mingw32_target}/bin/ranlib
+%{_prefix}/%{mingw32_target}/bin/strip
 %{_prefix}/%{mingw32_target}/lib/ldscripts
 
+%files -n mingw64-binutils
+%{_bindir}/%{mingw64_target}-addr2line
+%{_bindir}/%{mingw64_target}-ar
+%{_bindir}/%{mingw64_target}-as
+%{_bindir}/%{mingw64_target}-c++filt
+%{_bindir}/%{mingw64_target}-dlltool
+%{_bindir}/%{mingw64_target}-dllwrap
+%{_bindir}/%{mingw64_target}-elfedit
+%{_bindir}/%{mingw64_target}-gprof
+%{_bindir}/%{mingw64_target}-ld
+%{_bindir}/%{mingw64_target}-ld.bfd
+%{_bindir}/%{mingw64_target}-nm
+%{_bindir}/%{mingw64_target}-objcopy
+%{_bindir}/%{mingw64_target}-objdump
+%{_bindir}/%{mingw64_target}-ranlib
+%{_bindir}/%{mingw64_target}-readelf
+%{_bindir}/%{mingw64_target}-size
+%{_bindir}/%{mingw64_target}-strings
+%{_bindir}/%{mingw64_target}-strip
+%{_bindir}/%{mingw64_target}-windmc
+%{_bindir}/%{mingw64_target}-windres
+%{_prefix}/%{mingw64_target}/bin/ar
+%{_prefix}/%{mingw64_target}/bin/as
+%{_prefix}/%{mingw64_target}/bin/dlltool
+%{_prefix}/%{mingw64_target}/bin/ld
+%{_prefix}/%{mingw64_target}/bin/ld.bfd
+%{_prefix}/%{mingw64_target}/bin/nm
+%{_prefix}/%{mingw64_target}/bin/objcopy
+%{_prefix}/%{mingw64_target}/bin/objdump
+%{_prefix}/%{mingw64_target}/bin/ranlib
+%{_prefix}/%{mingw64_target}/bin/strip
+%{_prefix}/%{mingw64_target}/lib/ldscripts
+
 
 %changelog
+* Tue Mar  6 2012 Erik van Pienbroek <epienbro at fedoraproject.org> - 2.22.52-3
+- Made the package compliant with the new MinGW packaging guidelines
+- Added win64 support
+- Added a mingw-binutils-generic package containing toolchain
+  utilities which can be used by both the win32 and win64 toolchains
+- Enable the testsuite
+- Package the license
+- Fix source URL
+
 * Tue Mar  6 2012 Erik van Pienbroek <epienbro at fedoraproject.org> - 2.22.52-2
 - Renamed the source package to mingw-binutils (RHBZ #673786)
 - Use mingw macros without leading underscore


More information about the mingw mailing list