How to build a Mingw-w64 x86_64-w64-mingw32 cross-compiler.

== About this document ==

(At this time, building a native compiler is suggested.  Documentation
to follow.  This is all still required to be able to build it.)
Top-level configure to do this all with one command is also to follow.

As of 2009-05-31, x86_64-pc-mingw32 has been replaced by x86_64-w64-mingw32.
The change allows for mingw-w64 to have a host/target type independent of
mingw.org's MinGW.

All default libraries work!  We are now in a functional beta stage.

This file describes how to build the Mingw-w64 GCC toolchain as a cross-compiler
on Cygwin, MinGW with MSys, and *nix shells.

Cygwin 1.5 and 1.7 currently in beta testing are both supported. This document
recommends and assumes Bash (for Cygwin, Unix), or MSys core sh default shells
are used.

== Targeted audience ==

This document is written to help those new to building the mingw-w64 cross
compilers on Windows using MSYS/MinGW and Cygwin. It can also be adapted
slightly for building the mingw-w64 cross compiler on Linux.

For a more advanced guide on building the mingw-w64 cross compiler including
the optional dependencies, please refer to the "mingw-w64-howto-build-adv.txt"
guide.

== Version changes ==

Date /          Version /  Author
2007-07-31      1.0        Kai Tietz <Kai.Tietz at onevision.com>
2007-08-20      1.1        Kai Tietz <Kai.Tietz at onevision.com>
2007-08-21      1.2        NightStrike <nightstrike at gmail.com>
2007-10-01      1.3        NightStrike <nightstrike at gmail.com>
2007-11-27      1.4        NightStrike <nightstrike at gmail.com>
2009-05-31      1.5        Xenofears <xenofears at gmail.com>
2009-06-06      1.6        Xenofears <xenofears at gmail.com>
2009-08-28      1.7        Xenofears <xenofears at gmail.com>
2009-08-30      1.8        Ozkan Sezer <sezeroz at gmail dot com>
2009-10-09      1.9        Jonathan Yong <jon_y[a]users.sourceforge.com>

== Table of Contents ==

	* Requirements                                                          [RQRMTS]
	* Optional                                                              [OPTNLB]
	* Download new packages                                                 [DWNWPK]
	* Build type options                                                    [BTYOPT]
	* Building binutils cross toolchain                                     [CRSBNT]
	* Install the Mingw-w64 header set and create required symlinks         [HDRSYM]
	* Building the GCC core cross-compiler                                  [BDGCOR]
	* Building the crt                                                      [BLDCRT]
	* Finishing GCC                                                         [FNSHGC]
	* Path update and using your new cross-compiler                         [PTHUPD]

You can search the keys (i.e. [BLDCRT]) to jump to that section.

== Requirements == [RQRMTS]

You will need a complete GCC toolchain for the host system (Cygwin, MinGW/MSys
or Linux), which usually includes all of the required components:

	* GCC (for the native platform)
	* Binutils (for the native platform)
	* Bison
	* Flex
	* gperf (Optional, for developing on GCC)
	* Coreutils
	* Make (3.81 or newer)
	* GMP 4.3.1 or newer
	  [found on Cygwin setup under math]
	* MPFR 2.4.1 or newer
	  [found on Cygwin setup under math]
	* Perl (optional for pod2man)

== Optional == [OPTNLB]

Optional for source download / version management:

	* CVS
	* Subversion (SVN)
	* wget
	* tar & gzip/bzip2

Optional for optimization enhancements: (Math toolchain dependencies are
elaborated on GMP)

	* PPL 0.10 or newer
	* ClooG-PPL 0.15 or newer (must be ppl) 
	* MPC 0.7 or newer
	* Libelf 0.8.12 or newer

To build with MSys (Minimal SYStem for Win32), to satisfy the requirements
download and install functional MinGW (GCC toolchain), MSYS (sh shell), bison,
and flex.

If your host OS is Vista, you must install SP1 or SP2!  If you can't, you must
use an unoptimized collect2.exe as a workaround, but you are on your own.

Win32 installers to use with mingw msys available for download at MinGW's
sourceforge page: http://sourceforge.net/project/showfiles.php?group_id=23617

GMP & MPFR sources may be placed in the GCC source tree root in directories
with their names and they will be built automatically by GCC's configure (as
static libs).  You might need to make install from inside the directories if
GCC doesn't do it for you.


== Download new packages == [DWNWPK]

You need to download the following packages:

	* Binutils 2.19.1 release for stable, or 2.20.51+ or newer or latest
	  snapshot 2.20.51 for experimental as of 08-Oct-2009. As of writing,
	  stable Binutils 2.20.1 is about to be released.

	* GCC version 4.4.1 release for stable, or latest GCC (4.5) snapshot
	  or svn co for experimental as of 06-01-2009.  GCC-4.5 is good for
	  proper support for the new -w64-, see note above, but is in Stage 1
	  yet and may have bugs.  GCC-4.3 support is no longer maintained.
	  As of writing, stable GCC 4.4.2 is about to be released.

	* Current Mingw-w64 release available at
	  http://sourceforge.net/projects/mingw-w64 .  Snapshot, even better
	  from SVN (refer below), recommended until stable issuance), or you
	  can download the latest source release snapshot issued from Cadforte,
	  http://www.cadforte.com/downloads.html ,  which includes full tree
	  including experimental branch.

Official releases of GCC and binutils may be downloaded from a GNU FTP mirror
from <http://www.gnu.org/prep/ftp.html>.  GCC snapshots may be found at
<ftp://gcc.gnu.org/pub/gcc/snapshots/>.  Binutils snapshots may be found at
<ftp://sourceware.org/pub/binutils/snapshots/>.  Extract the tarballs (i.e.
tar -xf filename.tar.gz) to a temporary folders.

You can also download the latest working version using SVN & CVS.  Both source
control systems are available to Cygwin via Setup, and available to MSys in the
MSys/MinGW Packages. To use them:

	* For Mingw-w64:
	svn co https://mingw-w64.svn.sourceforge.net/svnroot/mingw-w64 mingw-w64

	* For GCCs latest development snapshot (4.5.0):
	svn checkout svn://gcc.gnu.org/svn/gcc/trunk gcc45x
	  or for GCC 4.4.x:
	svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch gcc44x

	* For Binutils:
	cvs -z9 -d:pserver:anoncvs@sourceware.org:/cvs/src co binutils
	(a directory named 'src' will be created and will hold the sources.)


=== Build type options === [BTYOPT]

When building binutils, GCC and Mingw-w64, you will be using standard autotools
configure scripts.  It is not a good idea to build in the source directory, so
you will make a sibling directory next to the source tree, enter it, and invoke
configure with '../path/to/configure' (which is then followed by 'make' and
then 'make install'.) You will be providing options to the configure script,
in the syntax of ../path/to/configure --flag[=setting].  This will be further
detailed below.

Note: Do not build GCC in the source tree or in a subdirectory contained in
	source tree.  This generally applies to many other autotools based
	packages too, unless specifically specified by the package developers
	or maintainers.

You have two main choices to make building the cross-compiler toolchain:

1) To build with default standard multilib (allows for building to a 32-bit
alternate target, using Mingw-w64's lib32), or to disable multilib.  Multilib
is installed by default, if you don't want it, you have to explicitly disable
it by passing --disable-multilib to configure, i.e.
	../path/to/configure --disable-multilib

2) Using standard settings of configure, which installs to /usr/local and
requires no setting changes, or to build to a sysroot you designate. /usr/local
is universally used as the default install point, and you may wish to keep all
the Mingw-w64 (64-bit) in a separate sysroot instead.  In the example in these
instructions, the sysroot is '/mypath'.  To use a sysroot, pass
--with-sysroot=/mypath and --prefix=/mypath as configure flags, i.e.
	../path/to/configure --with-sysroot=/mypath --prefix=/mypath


== Building binutils cross toolchain == [CRSBNT]

Step 1) Create a build directory (e.g. 'build'), where binutils compiled object
	files will be stored. Then enter into it.

Step 2) Run configure.
	For multilib:
		../path/to/configure --target=x86_64-w64-mingw32  \
		  --enable-targets=x86_64-w64-mingw32,i686-w64-mingw32

	For non-multilib:
		../path/to/configure --target=x86_64-w64-mingw32  \
		 --disable-multilib

	If using a sysroot, add "--with-sysroot=/mypath --prefix=/mypath" to
	your configure command, i.e., for multilib:
		../path/to/configure --target=x86_64-w64-mingw32  \
		  --enable-targets=x86_64-w64-mingw32,i686-w64-mingw32  \
		  --with-sysroot=/mypath --prefix=/mypath

Step 3) Run make (type 'make').  This will take a while.

Step 4) Run make install (type 'make install')

Step 5) You may optionally delete the "build" directory to save disk space.

Step 6) If you are using "--prefix" to install binutils to a directory not in
	your $PATH environmental variable, you should add the "bin" directory
	to you $PATH, i.e., for binutils installed to /home/luser/mingw64, use
	the following command to make new cross binutils visible by issuing:
		export PATH="$PATH:/home/luser/mingw64/bin"
	This step is required for building GCC later.

== Install the Mingw-w64 header set and create required symlinks == [HDRSYM]
 
Step 1) The source directory for the headers can be
	mingw-w64/trunk/mingw-w64-headers, or mingw-w64/mingw-w64-headers
	depending on your source.

Step 2) Create another "build" directory, and enter it.
	To install the headers, run:
		../path/to/configure --build=<your build machine> \
		--host=x86_64-w64-mingw32 --prefix=/mypath
	Then run "make install" to install the headers.

Step 3) GCC requires the x86_64-w64-mingw32 directory be mirrored as a
	directory 'mingw' in the same root.  So, if using configure default
	/usr/local, type:
	    ln -s /usr/local/x86_64-w64-mingw32 /usr/local/mingw
	or, for sysroot, type:
	    ln -s /mypath/x86_64-w64-mingw32 /mypath/mingw

Step 4) Manually create the x86_64-w64-mingw32/lib directory:
	    mkdir -p /usr/local/x86_64-w64-mingw32/lib
	or, for sysroot:
	    mkdir -p /mypath/x86_64-w64-mingw32/lib
	If it already exists and you get an error, ignore it.

Step 5) Symlink x86_64-w64-mingw32/lib directory as x86_64-w64-mingw32/lib64:
    ln -s /usr/local/x86_64-w64-mingw32/lib /usr/local/x86_64-w64-mingw32/lib64
  or, for sysroot:
    ln -s /mypath/x86_64-w64-mingw32/lib /mypath/x86_64-w64-mingw32/lib64

Note: On Windows systems or other systems that do not support UNIX type
softlinks, you may copy the entire directory to mirror it. It will
have the same effect as a symlink.

Note: The header-set and crt contains the standard-c and the windows platform
headers. Therefore it is not necessary to install an additional package.


== Building the GCC core cross-compiler(s) == [BDGCOR]

There are no GCC patches required anymore.  We keep up with GCC and get any
fixes applied upstream.

Step 1) Enter into the GCC root folder and generate a folder within (e.g.
	'build'), then enter it.

Step 2) Run configure.
	For multilib:
		../path/to/configure --target=x86_64-w64-mingw32 --enable-targets=all
	To disable multilib:
		../path/to/configure --target=x86_64-w64-mingw32 --disable-multilib

	Note: Remember to add the --prefix=/mypath and --with-sysroot=/mypath flags
	to match the binutils build if you are using a sysroot.

Step 3) Type 'make all-gcc'.  This will build the GCC core.

Step 4) Type 'make install-gcc'.  This will install the GCC core.

Step 5) You can leave the "build" directory alone for now, so you can
	resume building the rest of GCC later after installing the CRT.

Now the core stuff of GCC is present and we can build the crt itself.


== Building the crt (Mingw-w64 itself) == [BLDCRT]

Step 1) Create a new "build" directory for the crt. Enter the "build" directory.

Step 2) Run configure.
	For multilib:
		../path/to/configure --host=x86_64-w64-mingw32 --enable-lib32
		(NOTE: This won't work if you disabled multilib!)

	Without multilib:
		../path/to/configure --host=x86_64-w64-mingw32

	If using sysroot/prefix, again add the the --prefix=/mypath and
	--with-sysroot=/mypath flags.

Step 3) Type make.  This will take a while.

Step 4) Type make install

Step 5) Make sure you have the following directories in the directory you
	have installed the mingw-w64 toolchain to:
		<root>/x86_64-w64-mingw32
		<root>/x86_64-w64-mingw32/include
		<root>/x86_64-w64-mingw32/lib
		<root>/x86_64-w64-mingw32/lib32
		<root>/x86_64-w64-mingw32/lib64 [link to lib]
		<root>/mingw [link to x86_64-w64-mingw32]
		<root>/mingw/include
		<root>/mingw/lib
		<root>/mingw/lib32
		<root>/mingw/lib64 [link to lib]
	If you are using MSys/MinGW on Windows, remember to copy the "linked"
	directories to simulate the use of a symbolic link.

Note: For non-multilib builds, you can omit the "lib32" and "lib64"
	directories and only have "lib".

Note: Currently there are no dlls built. As long as we use static crt import
	libraries we won't need a ctor/dtor dll (mingwm10.dll).


== Finishing GCC (the libraries built using GCC core and Mingw-w64) == [FNSHGC]

Now you are ready to build the rest of GCC:

Step 1) Enter back into your GCC "build" directory.

Step 2) Type 'make'. This will take a while.

Step 3) Type 'make install'


== Path update and using your new cross-compiler == [PTHUPD]

Permanently update your path to use your new cross-compiler:

The binaries are all prefixed with the Mingw-w64 triplet x86_64-w64-mingw32-,
so there are no file name clashes.

* If you are using Cygwin or *nix, you will add the directory to your path
  in .bashrc in your home directory (the file may be hidden).

* If you are using MSys, you will need to add the directory to your path in
  /etc/profile.

* To reiterate, for default /usr/local, add /usr/local/bin to your PATH (this
  should not be necessary.) If using a sysroot, add /mypath/bin to your path.

You are finished.

To use your cross-compiler, simply use --host=x86_64-w64-mingw32 as a
configure option.  Be sure to -I/usr/local/include or -I/mypath/include
and -L/usr/local/lib or -L/mypath/lib to your CFLAGS to link your builds.

Often you must --enable-shared if you want DLLs as opposed to static libs,
but it is not always the case.

Simply use the -mwindows option for windows GUI applications.  By default,
-mconsole is used and produce console applications.  Also, you can use the
-mdll option for generating shared objects (dll), however normal gcc/g++
with the -shared flag or a proper ld (linker) command will do this.

