From Fedora Project Wiki

< Features

Revision as of 10:54, 2 December 2011 by Epienbro (talk | contribs)

Mingw-w64 cross compiler


Use the mingw-w64 cross compiler toolchain to build binaries for both Win32 and Win64 targets


Current status

Detailed Description

Several Fedora releases ago support was added to build binaries for the Win32 target using the toolchain (Features/Windows_cross_compiler). At the moment there are about 96 packages in Fedora which make use of this toolchain (the mingw32-* packages). There has been some demand to also add support for building binaries for the Win64 target. In order to build binaries for the Win64 target we have to switch from the toolchain to the (much better maintained and complete) mingw-w64 toolchain

In order to make it easy for packagers to build binaries for multiple targets (from a single source rpm) several RPM macros have been developed. These RPM macros are an attempt to reduce the amount of duplication of .spec files to a minimum and are bundled in the mingw-filesystem package (which will replace mingw32-filesystem). All these macros are explained at the MinGW/CrossCompilerFramework page. Several RPM packages have been developed like mingw-binutils, mingw-gcc, mingw-headers and mingw-crt containing all pieces belonging to the mingw-w64 toolchain (which can build binaries for both Win32 as well as Win64)

With this framework we'll also be building binaries for the Win32 target using the mingw-w64 toolchain (instead of the one). Most packages compile fine out of the box against the mingw-w64 toolchain. All packages which require some patching have been identified and have already been made operational in a testing repository

Benefit to Fedora

This feature makes it easier for packagers to build packages for both the Win32 and the Win64 targets. Developers can also use the tools from this framework to build binaries (and test these using wine) for these targets


Before this feature can land in Fedora several tasks have to be done:

  • Develop a set of RPM macros to reduce duplication in .spec files done
  • Package the mingw-w64 toolchain done
  • Rebuild all mingw32-* packages against the mingw-w64 toolchain done
  • Patch all mingw32-* packages which failed to build against the mingw-w64 toolchain done
  • Port the most important mingw32-* packages to use the new set of RPM macros so that binaries get build for Win32 and Win64 done
  • Publish testing repositories for the Win32+Win64 tree done
  • Write a porting guide done
  • Rewrite the Fedora MinGW packaging guidelines done
  • Let the updated packaging guidelines be approved done
  • Put the 5 toolchain packages (mingw-filesystem, mingw-binutils, mingw-gcc, mingw-headers and mingw-crt) up for review done
  • Wait for the 5 toolchain packages to be reviewed and approved
  • Have FE-Legal approve the use of the mingw-w64 toolchain
  • Once these 5 packages have been approved, import the packages, bootstrap the toolchain and rebuild all mingw32-* packages in a separate Koji buildroot
  • Port the individual mingw32-* packages to use this new framework (not required to be completed for Fedora 17)

Most of the steps required to get this in Fedora are also explained at the roadmap page

How To Test

Until the packages belonging to the cross compiler framework are imported in Fedora people interested can test this feature using a testing repository. Details about this can be found at the testing repository page. Once you install the yum .repo file belonging to the testing repository and perform a 'yum update' any mingw32-* packages which you might have already installed will be replaced by ones produced using the mingw-w64 toolchain

If you want to test building packages for the Win64 target you can install the 'mingw64-gcc' package (or the 'cross-gcc' package which will pull in both the 'mingw32-gcc' package as well as the 'mingw64-gcc' package). Once the compiler is installed you can build binaries for the Win64 target using commands like 'i686-w64-mingw32-gcc'. Also note that the name of the gcc command for the Win32 target has been changed from 'i686-pc-mingw32' to 'i686-w64-mingw32-gcc' and that all files which used to be in /usr/i686-pc-mingw32/ have now been moved to /usr/i686-w64-mingw32/

Generated binaries can be tested using the x86_64 version of wine

User Experience

Developers using Fedora can now build binaries for both the Win32 as well as the Win64 target


  • The 5 toolchain packages (mingw-filesystem, mingw-binutils, mingw-gcc, mingw-headers and mingw-crt) are new packages and have to pass the package review process
  • The mingw-headers and mingw-crt packages have to be cleared by FE-Legal
  • The Fedora MinGW Packaging guidelines have to be updated and approved done

Contingency Plan

If the 5 toolchain packages can't be approved in time we can stick with the current mingw32-* packages and move this feature to the next Fedora release


All documentation about this cross compiler framework can be found at MinGW/CrossCompilerFramework and on the mailing list

Release Notes

This release of Fedora contains a cross compiler framework which makes it easier for packagers and developers to build binaries for the Win32 as well as Win64 targets. The mingw-w64 toolchain has been used for this

Comments and Discussion