The Advance Guide to
    Building the Mingw-w64 x86_64-w64-mingw32 cross-compiler

== About this document ==

This document describes more advanced methods in building the mingw-w64
cross compiler. It also includes details about the toolchain
dependencies and relevant options that can be passed to the GCC
configure.

The commands are run under a MSYS/MinGW setup unless specified otherwise.
Using Cygwin or any other POSIX compatible shell should work.

== Targeted audience ==

This document assumes readers are familiar with the UNIX Command Line
and building the GNU toolchain in general, but would want a more fine
grained control over the capabilities of the cross compiler. 

For a basic guide on building the mingw-w64 toolchain, please refer to
"mingw-w64-howto-build.txt".

== Notes about LTO ==

LTO is curently disabled for non-ELF targets, that includes MinGW and
Cygwin. libelf can't read PE/COFF objects correctly, so it doesn't do
anything. You may skip building libelf and LTO. Using --enable-lto with
GCC configure may result in an error.

== Version changes ==

Date /        Version /    Author
2009-10-09    1.0          Jonathan Yong <jon_y[a]users.sourceforge.com>
2010-01-03    1.1          Jonathan Yong <jon_y[a]users.sourceforge.com>

== Table of Contents ==

	* Some Basic Info about mingw-w64                         [SBSCINF]
	* Host Support Libraries                                  [HOSTLIB]
	    * The GNU MP Bignum Library                           [BGMPLIB]
	    * MPFR                                                [BMPFRLB]
	    * Multiprecision                                      [BMPCLIB]
	    * The Parma Polyhedra Library                         [BPPLLIB]
	    * The Clunky Loop Generator (PPL port)                [BCLGLIB]
	    * Libelf                                              [BELFLIB]
	* Target Support Libraries                                [TGTSPLB]
	    * pthreads-win32                                      [PTHRW32]
	* Building the Multilib Cross MinGW-w64 GCC the
	    lazy way(With ADA support and libgomp)                [LAZYW64]
	    * ADA Bootstrap Phase                                 [ADABOOT]
	    * MinGW-w64 cross Binutils                            [CRSBINU]
	    * Install mingw-w64 Headers                           [MGW64HD]
	    * Setup Symlinks                                      [SETSYML]
	    * Build Core GCC                                      [BCORGCC]
	    * Build the mingw-w64 CRT                             [BMGWCRT]
	    * Build libgcc                                        [BLIBGCC]
	    * Build pthreads                                      [BPTHR32]
	    * Continue the build                                  [CTNTBLD]

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

== Some Basic Info about MinGW-w64 == [SBSCINF]

MinGW-w64 began as a fork of mingw.org MinGW to support 64bit windows as
a target.

Canonical Triplet info:
	mingw.org MinGW:    i686-pc-mingw32
	mingw-w64 64bit:    x86_64-pc-mingw32   (obsolete triplet)
	                    x86_64-w64-mingw32  (preferred triplet)
	mingw-w64 32bit:    i686-pc-mingw32     (mingw.org compatibility mode)
	                    i686-w64-mingw32    (preferred triplet)

== Host Support Libraries == [HOSTLIB]

These libraries are used by GCC on the "host" side. It means that these
should be built for the system that will run the newly built GCC.

=== The GNU MP Bignum Library (GMP) === [BGMPLIB]

Homepage:               <http://gmplib.org/>
Depends on:             None
Depended by:            MPC, MPFR, PPL, CLooG
GCC dependency type:    Hard (GCC won't build without it)

GMP is primarily written in C and assembly, but it comes with C++ bindings.
The asm part is selected by the $host_cpu detected by configure. If your
platform is not detected properly, you can use --host=none-none-none to
disable asm optimizations. Be sure to set the correct CC, CXX, NM, RANLIB
and AR variables.

The C++ bindings are not built by default, but it is required by PPL. To fix
this, use "--enable-cxx" and "CPPFLAGS=-fexceptions". PPL needs the
-fexceptions part to throw exceptions properly, but it is not strictly
required.

On Windows hosts, only static or shared builds can be used at a time, but not
both. This is reasoned by the incompatible header set used by static/shared
builds. If you do use static builds, you should build any libs that depend on
it as static to prevent accidentally exporting GMP symbols in other dlls.

=== MPFR === [BMPFRLB]

Homepage:               <http://www.mpfr.org/>
Depends on:             GMP
Depended by:            None
GCC dependency type:    Hard (GCC won't build without it)

MPFR isn't particularly fussy about configure options, so the usual:
	./configure
	make
	make install
is fine.

=== Multiprecision (MPC) === [BMPCLIB]

Homepage:               <http://www.multiprecision.org/>
Depends on:             GMP
Depended by:            None
GCC dependency type:    Hard (GCC won't build without it)

MPC isn't particularly fussy about configure options, so the usual:
	./configure
	make
	make install
is fine.

=== The Parma Polyhedra Library (PPL) === [BPPLLIB]

Homepage: <http://www.cs.unipr.it/ppl/>
Depends on:     GMP
Depended by:    ClooG
GCC dependency type: None (GCC does not use it directly)

PPL requires that GMP be built with C++ bindings (--enable-cxx) and
-fexceptions (to allow exceptions to be thrown across GMP).

=== The Clunky Loop Generator (PPL port) === [BCLGLIB]

Homepage: <http://repo.or.cz/w/cloog-ppl.git>
Depends on:             GMP, PPL
Depended by:            None
GCC dependency type:    Soft (GCC can build without it)
If you are planning to use CLooG with static PPL, remeber to add
'--with-host-libstdcxx="-lstdc++ -lsupc++"' to configure.
CLooG isn't particularly fussy about configure options, so the usual:
	./configure
	make
	make install
is fine.

=== Libelf === [BELFLIB]

Homepage: <http://www.mr511.de/software/english.html>
Depends on:             None
Depended by:            None
GCC dependency type:    Soft (Required for GCC lto support)
Libelf isn't particularly fussy about configure options, so the usual:
	./configure
	make
	make install
is fine.

== Target Support Libraries == [TGTSPLB]

Target support libraries are for use with mingw-w64 itself. It should not
be used by the host directly. Hence the target libs will need to be compiled
with a compiler targeting mingw-w64.

=== pthreads-win32 === [PTHRW32]
Homepage: <http://sourceware.org/pthreads-win32/>
Depends on:             None
Depended by:            None
GCC dependency type:    Soft (Required for GCC libgomp support)

Download instructions:
	cvs -d :pserver:anoncvs@sourceware.org:/cvs/pthreads-win32 login
	{enter ``anoncvs'' for the password}
	cvs -d :pserver:anoncvs@sourceware.org:/cvs/pthreads-win32 checkout pthreads

Patch: <http://sourceware.org/ml/pthreads-win32/2009/msg00030/w64sup.patch>

Note: pthreads-win32 does not come with a autotools based build system. It
    uses a Makefile "GNUmakefile" to build the pthreads dll.

Note: To allow win64 support, apply the patch from the mailing list.

General Build and install instructions:
	Step 1) type "make clean GC CROSS=x86_64-w64-mingw32-"
		Note: The CROSS variable specifies your win64/win32 toolchain
		    triplet prefix. To prevent dll clobbering by 32bit/64bit
		    builds having the same names, you can edit GC_DLL in the
		    GNUmakefile (line 440) to produce differently named dlls
		    based on its "bitness"
		    (eg. pthreadGC2-64.dll, pthreadGC2-32.dll).
	Step 2) copy pthreadGC2.dll (or $GC_DLL) to your path
	Step 3) Install the lib by copying pthreadGC2.dll as libpthread.a to
	    your GCC libdir (eg. PREFIX/x86_64-w64-mingw32/lib)
	Step 4) Copy pthread.h, sched.h and semaphore.h to the GCC include dir
	    (eg. PREFIX/x86_64-w64-mingw32/include)
	Step 5) Edit the pthread.h in your include dir and change the following
	    section from:
=======================================================================
		#if HAVE_CONFIG_H
		#include "config.h"
		#endif /* HAVE_CONFIG_H */
=======================================================================
			to:
=======================================================================
		/* #if HAVE_CONFIG_H */
		#include "pconfig.h"
		/* #endif HAVE_CONFIG_H */
=======================================================================
	This is needed to prevent conflicts with other autotools based packages
	that actually use "config.h" for options.
	Step 6) Copy the pthread-win32 config.h to your include dir as pconfig.h

32bit build instructions (assuming mutilib 64bit default GCC)
	* Edit the GNUmakefile, and change:
=======================================================================
AR      = $(CROSS)ar
DLLTOOL = $(CROSS)dlltool
CC      = $(CROSS)gcc
CXX     = $(CROSS)g++
RANLIB  = $(CROSS)ranlib
RC      = $(CROSS)windres
=======================================================================
to
=======================================================================
AR      = $(CROSS)ar
DLLTOOL = $(CROSS)dlltool -m i386
CC      = $(CROSS)gcc -m32
CXX     = $(CROSS)g++ -m32
RANLIB  = $(CROSS)ranlib
RC      = $(CROSS)windres -F pe-i386
=======================================================================
	* You can also use a patch for 32bit builds such as 
	    <http://mingw-w64.pastebin.com/pastebin.php?dl=f7b38df38>
	* Next, follow the General Build and install instructions

== Building the Multilib Cross MinGW-w64 GCC the lazy way ==
    (With ADA support and libgomp)                        [LAZYW64]

Its a lazy method because it involves building GCC with all enabled
front ends only once, without restarting the cross GCC build.

First of all, your host compiler (native system "gcc") must support ADA.
If your platform does not have GNAT binaries, use the binaries from: 
    <https://libre.adacore.com/libre/download/>

If you do not want ADA support, or confident about your host ADA support,
you can skip the ADA bootstrap phase.

=== ADA Bootstrap Phase === [ADABOOT]

Bootstrapping ADA is needed if ADA is to be supported by the mingw-w64
cross GCC.

To begin bootstrap ADA, you must grab the GCC source that will be used
for the mingw-w64 cross GCC, so that the ADA support is as close as
possible with the target GCC version.

Use the source to build a native compiler for your host machine. You must
enable at least C, ADA, and C++ support. It is advisable to prefix
(i.e. using --prefix=/opt/test) the entire native bootstrap toolchain
in order to avoid overwriting the compiler provided by your host system.
You should also build a prefixed native Binutils for use with the new
bootstrap compiler.

Remember to build GCC OUTSIDE its source directory, NOT inside it and
certainly NOT in a sub-directory.

=== MinGW-w64 cross Binutils === [CRSBINU]

The official method to build the mingw-w64 toolchain is to set --prefix
and --with-sysroot to the same directory to allow the toolchain to be
relocatable. To make Multilib support possible, you need to use
"--enable-targets=x86_64-w64-mingw32,i686-w64-mingw32".

An example configure line for Binutils is:
../path/to/binutils/configure --prefix=<prefix> --with-sysroot=<prefix> \
	--enable-targets=x86_64-w64-mingw32,i686-w64-mingw32 \
	--host=<build triplet> --build=<build triplet> \
	--target=x86_64-w64-mingw32

=== Install mingw-w64 Headers === [MGW64HD]

When you checkout the svn trunk from the mingw-w64 developer repository, there
should be a directory called mingw-w64-headers. Install it with:
	../path/to/mingw-w64-headers/configure --prefix=<prefix> \
	--enable-sdk=none --build=<host triplet> --host=x86_64-w64-mingw32
	make install

To view the available sdks, use --help. The prefix should be similar to the
prefix used for cross Binutils. Although the mingw-w64 cross GCC is not
installed yet, configure will not fail it as it only checks the --host option.
It is important to set the --host option correctly, failing to do so will
cause the cross GCC to fail to find the expected system headers.

=== Setup Symlinks === [SETSYML]

Your install root for the mingw-w64 cross toolchain should contain the
following directories. Create the directories if missing. It is easier
to use "ln -s" softlinks to link directories than to copy them over.

	<root>/x86_64-w64-mingw32
	<root>/x86_64-w64-mingw32/include [headers previously installed here]
	<root>/x86_64-w64-mingw32/lib
	<root>/x86_64-w64-mingw32/lib32
	<root>/x86_64-w64-mingw32/lib64 [link to neighbor lib]
	<root>/mingw [link to x86_64-w64-mingw32]
	<root>/mingw/include
	<root>/mingw/lib
	<root>/mingw/lib32
	<root>/mingw/lib64 [link to neighbor lib]

On Windows, you can use "ntfs link" <http://elsdoerfer.name/=ntfslink>
to create "junction points" to link directories. These junction points
are transparent to user mode applications such as GCC.

Make sure the "mingw" directory mirrors "x86_64-w64-mingw32" exactly. Ditto
for "lib64" and "lib"

=== Build Core GCC === [BCORGCC]

GCC can be configured in many ways, the following is an example that worked.
Make sure to add your cross Binutils binaries to your $PATH before continuing.

If you did use the ADA compiler from adacore to produce a bootstrap ADA
compiler, make sure to add the prefix in such a way that it is found
before your default host compiler.
(i.e. export PATH=/opt/adaboot/bin:$PATH:/mingw64/path/bin)

Some of the configure options do not sound possible with a stage-1 cross,
but be assured that it has been tested.

Remember to build GCC OUTSIDE its source directory, NOT inside it and certainly
NOT in a sub-directory.

Example:
	../gcc-trunk/configure --{host,build}=<build triplet> \
	--target=x86_64-w64-mingw32 --enable-multilib --enable-64bit \
	--{prefix,with-sysroot}=<prefix> --enable-version-specific-runtime-libs \
	--enable-shared --with-dwarf --enable-fully-dynamic-string \
	--enable-languages=c,ada,c++,fortran,objc,obj-c++ --enable-libgomp \
	--enable-libssp --with-host-libstdcxx="-lstdc++ -lsupc++" \
	--with-{gmp,mpfr,mpc,cloog,ppl,libelf}=<host dir>

Explanation:
	--enable-version-specific-runtime-libs
	Installs libgcc/libstdc++ and other target support libraries in such a
	way that multiple GCC installs can coexist simultaneously.

	--enable-shared
	Builds shared support libraries

	--with-dwarf
	Use Dwarf debugging format by default

	--enable-fully-dynamic-string
	Enable dynamic std::string class to work around lazy initialization.

	--enable-libgomp
	Enable OpenMP support, it is not enabled by default on MinGW platforms.
	Requires pthreads-win32 (target) installed.

	--enable-libssp
	Enable Stack Smash Protection, a buffer overrun detector.

	--with-host-libstdcxx
	Lists down the C++ support libraries to link with. This is useful
	when using static PPL and CLooG.

	--with-{gmp,mpfr,mpc,cloog,ppl,libelf}=<host dir>
	Tells GCC where the host support libraries are installed to.
	(i.e. search <host dir>/include & <host dir>/lib)

Use "make all-gcc" to build the standalone GCC compiler without target
support libs. Install it with "make install-gcc".

Remember, this is a standalone gcc, it won't actually be able to link
executables, but it is already suitable to compile the CRT.

Do not delete the GCC build directory, we can continue later.

=== Build the mingw-w64 CRT === [BMGWCRT]

When you checkout the svn trunk from the mingw-w64 developer repository, there
should be a directory called mingw-w64-crt. 
Example configure:
	../path/to/crt/configure --prefix=<prefix> --enable-lib32 \
	--enable-lib64 --build=<build triplet> --host=x86_64-w64-mingw32

Explanation:
	--enable-lib32
	If you enabled multilib support in x86_64-w64-mingw32-gcc, this will build
	32bit libs for use with win32 programming. For $host_cpu i686-w64-mingw32,
	it is enabled by default.

	--enable-lib64
	Enable building 64bit libs for use with win64 programming. For $host_cpu
	x86_64-w64-mingw32, it is enabled by default.

If you used symlinks or ntfs junction points to link the "lib*" directories,
you should be fine. If you manually copied x86_64-w64-mingw32 to mingw, you
must copy the "lib*" directories so that "lib64" mirrors "lib" and
"lib32" in "mingw" mirrors "x86_64-w64-mingw32/lib32"

=== Build libgcc === [BLIBGCC]

Reenter the build directory used earlier in [BCORGCC], and issue
"make all-target-libgcc", then "make install-target-libgcc".

This will install libgcc. As of writing, there is a minor bug when
--enable-version-specific-runtime-libs is used, libgcc_s.a is
installed incorrectly.

Move it from:
<prefix>/lib/gcc/<arch>/lib32/libgcc_s.a to 
<prefix>/lib/gcc/<arch>/<version>/32/libgcc_s.a
and
<prefix>/lib/gcc/<arch>/lib64/libgcc_s.a to
<prefix>/lib/gcc/<arch>/<version>/libgcc_s.a

The libgcc dll is also clobbered during install, search the build
directory for the dll and install it to separate directories as you
see fit. Make sure 32bit apps only see the 32bit variant, same for
64bit apps.

=== Build pthreads === [BPTHR32]

pthread-win32 is required for libgomp to work. Now that the CRT and
libgcc is installed, we can proceed with building the pthread dll.

Please refer to the pthreads-win32 section [PTHRW32] for instructions.
Make sure to build for both win32 and win64 variants.

=== Continue the build === [CTNTBLD]

Reenter the build directory used earlier in [BCORGCC] and continue
the build with "make". Finally, install with "make install".

