Building MINGW-w64

From ReactOS Wiki
Revision as of 15:08, 11 April 2010 by EmuandCo (talk | contribs) (Building binutils)
Jump to: navigation, search

... for idiots. This guide is provided for those who have no clue how to compile gcc, but still want to do it. It's a reference, just follow the steps and you get what you want. There's no support for special wishes ;-)

Setting up the build environment

Download and install MSYS. You will need the following packages:

  • msysCORE-1.0.14-1-msys-1.0.14-bin.tar.lzma
  • coreutils-5.97-2-msys-1.0.11-bin.tar.lzma
  • bash-3.1.17-2-msys-1.0.11-bin.tar.lzma
  • bison-2.4.1-1-msys-1.0.11-bin.tar.lzma
  • flex-2.5.35-1-msys-1.0.11-bin.tar.lzma
  • gawk-3.1.7-1-msys-1.0.11-bin.tar.lzma
  • grep-2.5.4-1-msys-1.0.11-bin.tar.lzma
  • sed-4.2.1-1-msys-1.0.11-bin.tar.lzma
  • make-3.81-2-msys-1.0.11-bin.tar.lzma
  • gcc-core-3.4.5-20060117-3.tar.gz
  • gcc-g++-3.4.5-20060117-3.tar.gz
  • binutils-2.20.1-2-mingw32-bin.tar.gz
  • mingwrt-3.18-mingw32-dev.tar.gz
  • w32api-3.14-mingw32-dev.tar.gz
  • libregex-1.20090805-1-msys-1.0.11-dll-1.tar.lzma
  • gmp-5.0.1-1-mingw32-dev.tar.lzma
  • mpfr-2.4.1-1-mingw32-dev.tar.lzma
  • tar-1.22-1-msys-1.0.11-bin.tar.lzma
  • libgmp-5.0.1-1-mingw32-dll-10.tar.lzma
  • libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma
  • diffutils-
  • gettext-0.17-1-msys-1.0.11-dev.tar.lzma
  • libiconv-1.13.1-1-mingw32-dev.tar.lzma

Download all packages and extract them into c:\MSYS (or similar). You can unpack the .tar.lzma files using the latest version of 7zip.

Extract libiconv-1.13.1-1-mingw32-dev.tar.lzma into the mingw subfolder of the MSYS root (Why? Because!)

Getting the sources

Download all the sources into subfolders of /home/YourName/src

  • binutils (version 2.20.51 or newer) -> home/YourName/src/binutils
  • gcc-core [1] -> home/YourName/src/gcc
  • gcc-g++ -> home/YourName/src/gcc
  • mingw-w64 [2] -> home/YourName/src/mingw-w64

Copy the src/mingw-w64/mingw-w64-headers/include directory to /RosBE64/mingw and to /RosBE64/x86_64-w64-mingw32

Patching the sources

You need to do 2 small modifications to build the libraries properly without leading underscores. This part is subject to change anytime soon.

  • Open src/gcc/config/mh-mingw and add the follwing 3 lines:
CFLAGS_FOR_TARGET += -fno-leading-underscore
CXXFLAGS_FOR_TARGET += -fno-leading-underscore
  • Open mingw-w64/minw-w64-crt/ and change the following


AM_CFLAGS = -pipe $(vistasupport) -std=gnu99 @ADD_C_CXX_WARNING_FLAGS@ @ADD_C_ONLY_WARNING_FLAGS@
AM_DLLTOOLFLAGS = -k --as=$(AS) --output-lib $@


AM_CFLAGS = -fno-leading-underscore -pipe $(vistasupport) -std=gnu99 @ADD_C_CXX_WARNING_FLAGS@ @ADD_C_ONLY_WARNING_FLAGS@
AM_DLLTOOLFLAGS = --no-leading-underscore -k --as=$(AS) --output-lib $@


Building binutils

Create a build subdirectory for binutils:

cd build
mkdir binutils
cd binutils

From the build directory run the binutils configure script:

../../src/binutils/configure --target=x86_64-w64-mingw32 --prefix=/RosBE64 --with-sysroot=/RosBE64 --disable-multilib

Now build the whole stuff.


Finally install it into the designated directory.

make install

Building gcc-core

Emter into the build directory:

cd ..
mkdir gcc
cd gcc

Now run the configure script:

../../src/gcc/configure --target=x86_64-w64-mingw32 --prefix=/RosBE64 --with-sysroot=/RosBE64 
 --disable-multilib --disable-shared

Compile the gcc-core

make all-gcc

And install it

make install-gcc

Finally add it to the PATH variable.

PATH=$PATH:/RosBE64/bin ; export PATH

Building the crt

Create a build directory.

cd ..
mkdir mingw-w64-crt
cd mingw-w64-crt

Run the configure script

../../src/mingw-w64/mingw-w64-crt/configure --host=x86_64-w64-mingw32 --prefix=/RosBE64 --with-sysroot=/RosBE64



And install

make install

Building the rest of gcc

Enter into the gcc build directory.

cd ..
cd gcc

And compile the rest.

make install

Common errors

When compiling crt:

configure: error: Please check if the mingw-w64 header set and the build/host option are set properly.
  • Check if you have copied the mingw-headers/include directory to both /RosBE64/x86_64-w64-mingw32 and /RosBE64/mingw
  • Check if you have set the PATH variable to the new compiler correctly
  • Check if you have installed the new compiler correctly ("make install-gcc")