No edit summary |
|||
Line 10: | Line 10: | ||
The goal of this framework is to provide a generic method to cross-compile binaries for multiple targets with as little packaging overhead as possible. | The goal of this framework is to provide a generic method to cross-compile binaries for multiple targets with as little packaging overhead as possible. | ||
= Namespaces = | |||
The framework will use several namespaces. Each namespace has it own characteristics. These will be explained here | |||
Package names: | |||
cross- Used for packages which can be built for multiple targets | |||
mingw- Used for packages which can be built for both Win32 and Win64 but not for other targets | |||
mingw32- Used for packages which can only be built for Win32 | |||
mingw64- Used for packages which can only be built for Win64 | |||
darwinx- Used for packages which can only be built for Mac OS X (future work) | |||
Filelists: | |||
%{_cross-...} Used for files which are common among all possible targets | |||
%{_mingw-...} Used for files which are used on both Win32 and Win64 | |||
%{_mingw32-...} Used for files which are only used on Win32 | |||
%{_mingw64-...} Used for files which are only used on Win64 | |||
= Development and testing repository = | = Development and testing repository = | ||
Line 20: | Line 34: | ||
Note that this testing repository will obsolete any mingw32 packages you might have installed! | Note that this testing repository will obsolete any mingw32 packages you might have installed! | ||
= Phase 1: Get the mingw-w64 toolchain in Fedora = | = Roadmap = | ||
To provide a clean upgrade path and as little breakage as possible the introduction of this framework can be split in several phases. | |||
== Phase 1: Get the mingw-w64 toolchain in Fedora == | |||
This requires some new packages to be approved using package reviews. | This requires some new packages to be approved using package reviews. | ||
Line 27: | Line 45: | ||
The keep the amount of breakage as low as possible all these 5 packages have to be imported at once. | The keep the amount of breakage as low as possible all these 5 packages have to be imported at once. | ||
= Phase 2: Bootstrap the mingw-w64 toolchain = | == Phase 2: Bootstrap the mingw-w64 toolchain == | ||
Once the 5 packages mentioned in phase 1 are approved they can be imported. In order to bootstrap the mingw-w64 toolchain this has to be done in a specific order. | Once the 5 packages mentioned in phase 1 are approved they can be imported. In order to bootstrap the mingw-w64 toolchain this has to be done in a specific order. | ||
Line 37: | Line 55: | ||
6. Rebuild the cross-gcc package with the %bootstrap flag set to 0 and wait for it to enter the buildroot | 6. Rebuild the cross-gcc package with the %bootstrap flag set to 0 and wait for it to enter the buildroot | ||
= Phase 3: Rebuild all mingw32 packages = | == Phase 3: Rebuild all mingw32 packages == | ||
The mingw-w64 toolchain is now operational and can build binaries for both Win32 and Win64. | The mingw-w64 toolchain is now operational and can build binaries for both Win32 and Win64. | ||
Line 47: | Line 65: | ||
Packages which have the triplet 'i686-pc-mingw32' hardcoded in their .spec files need to updated as they aren't conforming to the packaging guidelines | Packages which have the triplet 'i686-pc-mingw32' hardcoded in their .spec files need to updated as they aren't conforming to the packaging guidelines | ||
= Phase 4: Drop the old mingw32 toolchain packages = | == Phase 4: Drop the old mingw32 toolchain packages == | ||
Now that the mingw-w64 based toolchain is imported the original mingw32 based toolchain has been obsoleted. | Now that the mingw-w64 based toolchain is imported the original mingw32 based toolchain has been obsoleted. | ||
The packages mingw32-filesystem, mingw32-binutils, mingw32-gcc, mingw32-w32api and mingw32-runtime can be dropped from the repository without breaking anything | The packages mingw32-filesystem, mingw32-binutils, mingw32-gcc, mingw32-w32api and mingw32-runtime can be dropped from the repository without breaking anything | ||
= Phase 5: Rename and port all mingw32-packages to the new framework = | == Phase 5: Rename and port all mingw32-packages to the new framework == | ||
This phase is also the most time-consuming one. Right now all mingw32 packages use the prefix 'mingw32-'. | This phase is also the most time-consuming one. Right now all mingw32 packages use the prefix 'mingw32-'. | ||
All packages (which want to be built for both win32 and win64) have to be renamed to use the prefix 'cross-' instead of 'mingw32-'. | All packages (which want to be built for both win32 and win64) have to be renamed to use the prefix 'cross-' instead of 'mingw32-'. | ||
In additional several macros will have to be replaced. See the porting guide | In additional several macros will have to be replaced. See the [[#Porting guide|porting guide]] | ||
= Phase 6: Drop deprecated compatibility macros (post F15) = | == Phase 6: Drop deprecated compatibility macros (post F15) == | ||
Once all packages are ported to the new framework the mingw32 compatibility macros can be dropped from the cross-filesystem package. This can happen after F15 has been released and development for F16 has started | Once all packages are ported to the new framework the mingw32 compatibility macros can be dropped from the cross-filesystem package. This can happen after F15 has been released and development for F16 has started | ||
= Porting guide = |
Revision as of 13:23, 11 October 2010
Introduction
One of the new features of F15 will be the introduction of a Cross Compiler Framework. This framework will obsolete the Fedora MinGW toolchain which can be found in current versions of Fedora.
Initially, this framework will have support for building binaries for Win32 and Win64 targets. The mingw-w64 toolchain will be used for this. However support for other targets (like Mac OS X) can be added quite easily.
The goal of this framework is to provide a generic method to cross-compile binaries for multiple targets with as little packaging overhead as possible.
Namespaces
The framework will use several namespaces. Each namespace has it own characteristics. These will be explained here Package names:
cross- Used for packages which can be built for multiple targets mingw- Used for packages which can be built for both Win32 and Win64 but not for other targets mingw32- Used for packages which can only be built for Win32 mingw64- Used for packages which can only be built for Win64 darwinx- Used for packages which can only be built for Mac OS X (future work)
Filelists:
%{_cross-...} Used for files which are common among all possible targets %{_mingw-...} Used for files which are used on both Win32 and Win64 %{_mingw32-...} Used for files which are only used on Win32 %{_mingw64-...} Used for files which are only used on Win64
Development and testing repository
All development of this toolchain is currently being done in a SVN repository at http://svn.openftd.org/svn/fedora_cross (SVNWeb: http://svn.openftd.org/viewvc/Fedora%20Cross%20Compilers%20Environment/) It has anonymous read-only access. For write access, please contact epienbro on FreeNode #fedora-mingw.
A yum testing repository containing (x86_64) binaries for all packages will be published soon. Note that this testing repository will obsolete any mingw32 packages you might have installed!
Roadmap
To provide a clean upgrade path and as little breakage as possible the introduction of this framework can be split in several phases.
Phase 1: Get the mingw-w64 toolchain in Fedora
This requires some new packages to be approved using package reviews. The packages which have to be approved are cross-filesystem, cross-binutils, cross-gcc, mingw-crt and mingw-headers
The keep the amount of breakage as low as possible all these 5 packages have to be imported at once.
Phase 2: Bootstrap the mingw-w64 toolchain
Once the 5 packages mentioned in phase 1 are approved they can be imported. In order to bootstrap the mingw-w64 toolchain this has to be done in a specific order.
1. Import the cross-filesystem package, build it and wait for it to enter the buildroot 2. Import the cross-binutils package, build it and wait for it to enter the buildroot 3. Import the mingw-headers package, build it and wait for it to enter the buildroot 4. Import the cross-gcc package, build it (with the %bootstrap flag set to 1) and wait for it to enter the buildroot 5. Import the mingw-crt package, build it and wait for it to enter the buildroot 6. Rebuild the cross-gcc package with the %bootstrap flag set to 0 and wait for it to enter the buildroot
Phase 3: Rebuild all mingw32 packages
The mingw-w64 toolchain is now operational and can build binaries for both Win32 and Win64. As the name of the triplet has been changed (in the cross-filesystem package) from i686-pc-mingw32 to i686-w64-mingw64 as mingw32 packages have to be rebuild. All mingw32 packages should have been using macros like %{_mingw32_bindir} as mentioned in the MinGW Packaging Guidelines. As all these macros have been moved to the cross-filesystem package (and some deprecated macros are kept for backwards compatibility) a plain rebuild should be sufficient to get mingw32 packages built against the new toolchain.
Packages which have the triplet 'i686-pc-mingw32' hardcoded in their .spec files need to updated as they aren't conforming to the packaging guidelines
Phase 4: Drop the old mingw32 toolchain packages
Now that the mingw-w64 based toolchain is imported the original mingw32 based toolchain has been obsoleted. The packages mingw32-filesystem, mingw32-binutils, mingw32-gcc, mingw32-w32api and mingw32-runtime can be dropped from the repository without breaking anything
Phase 5: Rename and port all mingw32-packages to the new framework
This phase is also the most time-consuming one. Right now all mingw32 packages use the prefix 'mingw32-'. All packages (which want to be built for both win32 and win64) have to be renamed to use the prefix 'cross-' instead of 'mingw32-'. In additional several macros will have to be replaced. See the porting guide
Phase 6: Drop deprecated compatibility macros (post F15)
Once all packages are ported to the new framework the mingw32 compatibility macros can be dropped from the cross-filesystem package. This can happen after F15 has been released and development for F16 has started