From Fedora Project Wiki

< Features

Revision as of 14:21, 29 January 2011 by Epienbro (talk | contribs)

Cross Compiler Framework


Introduce a set of packages and RPM macros to help building binaries for multiple targets. Initially, support for Win32 and Win64 will be added, but adding support for other targets (like Mac OS X) in the future will become quite easy


  • Email:
  • IRC: epienbro @ #fedora-mingw
  • Mailing list:

Current status

  • Targeted release: Fedora 15
  • Last updated: Jan 29 2011
  • Percentage of completion: 40%

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 as well as the Mac OS X 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 the past there has been a successful attempt to building binaries for the Mac OS X on a Fedora host. However, it but can't be added to Fedora at the moment because some binary blobs were used and several file are licensed under a forbidden license. If we really want to have Mac OS X support in Fedora in the future we should try to get these issues resolved first

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 cross-filesystem package (which will replace mingw32-filesystem). All these macros are explained at the MinGW/CrossCompilerFramework page. Several RPM packages have been developed like cross-binutils, cross-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 multiple targets (Win32+Win64 initially). Regular developers can also use the tools from this framework to build binaries (and test these using wine) for multiple 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
  • Package the mingw-w64 toolchain
  • Rebuild all mingw32-* packages against the mingw-w64 toolchain
  • Patch all mingw32-* packages which failed to build against the mingw-w64 toolchain
  • Port the most important mingw32-* packages to use the new set of RPM macros so that binaries get build for Win32 and Win64
  • Package the darwinx (Mac OS X) toolchain and integrate it in a separate tree
  • Make sure that the mingw32-* packages which were ported earlier can also build with darwinx support with minimal changes
  • Publish testing repositories for both the Win32+Win64 tree and the Win32+Win64+Darwinx tree (the packages from the first tree are targeted for Fedora 15)
  • Write a porting guide
  • Rewrite the Fedora MinGW packaging guidelines
  • Let the updated packaging guidelines be approved
  • Put the 5 toolchain packages (cross-filesystem, cross-binutils, cross-gcc, mingw-headers and mingw-crt) up for review
  • Have FE-Legal approve the use of the mingw-w64 toolchain
  • Once these 5 packages have been approved, import the packages 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 15)

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

How To Test

User Experience


Contingency Plan


Release Notes

Comments and Discussion