Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.
- The mingw-w64 cross compilers consists in a few basic packages, among which
- binutils, gcc, and windows headers, compiled in a special way. Once it is
- operational, it forms the base to compile the packages of your project.
- A collection of packages built on top of mingw-w64 can be found in fedora,
- opensuse. Prebuilt version of mingw-w64 can also be found in the mingw-w64
- website.
- 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>
- 2010-02-28 1.10 Ozkan Sezer <sezeroz at gmail dot com>
- 2010-08-31 1.11 Jonathan Yong <jon_y[a]users.sourceforge.com>
- 2012-03-06 1.12 William <r.3[a]libertysurf.fr>
- 2013-01-27 1.13 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
- 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:
- * At least CVS snapshot (2.20.51). Note that 2.20.1 is not supported
- due to ABI changes.
- * GCC version 4.5.1 release for stable, or latest GCC (4.6) snapshot
- or svn co for experimental. GCC-4.3 support is no longer maintained.
- * Current Mingw-w64 release available at
- http://sourceforge.net/projects/mingw-w64 . Snapshot, even better
- from SVN (refer below), recommended until stable issuance.
- 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 latest development snapshot (2.20.51):
- cvs -z9 -d:pserver:anoncvs@sourceware.org:/cvs/src co binutils
- or for binutils-2.20 stable branch:
- cvs -z9 -d:pserver:anoncvs@sourceware.org:/cvs/src co -r binutils-2_20-branch binutils
- (a directory named 'src' will be created and will hold the sources
- for either of the cases.)
- === 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 a cross-compiler that will generate 32 bits binaries, 64 bits
- binaries, or that will be multilib enabled (so that the toolchain can target
- both, using Mingw-w64's lib32).
- * 32 bits only : use options such as '--host=i686-w64-mingw32',
- '--target=i686-w64-mingw32' with '--disable-multilib'
- * 64 bits only : use options such as '--host=x86_64-w64-mingw32',
- '--target=x86_64-w64-mingw32' with '--disable-multilib'
- * multilib enabled : use options such as '--host=x86_64-w64-mingw32',
- '--target=x86_64-w64-mingw32','--enable-targets=all','--enable-lib32' or
- '--enable-targets=x86_64-w64-mingw32,i686-w64-mingw32'
- It is recommanded to use the two first options, as the third one will require
- more knowledge to use it properly. In the rest of this howto, examples will be
- provided for the '64 bits only' option and for the 'multilib enabled' option.
- For the '32 bits' option, please replace 'x86_64-w64-mingw32' by
- 'i686-w64-mingw32' wherever you see it.
- 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.
- NOTE: For v3 (trunk as of writing, you MUST append x86_64-w64-mingw32 to your prefix, such as --prefix=/mypath/x86_64-w64-mingw32
- NOTE: You MUST also do this for the CRT
- 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.
- NOTE: For v3 (trunk as of writing, you MUST append x86_64-w64-mingw32 to your prefix, such as --prefix=/mypath/x86_64-w64-mingw32
- NOTE: You MUST also do this for the HEADERS
- 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.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement