Building MINGW-w64

From ReactOS Wiki
Revision as of 15:11, 11 April 2010 by EmuandCo (talk | contribs) (Building the rest of gcc)
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-2.8.7.20071206cvs-2-msys-1.0.11-bin.tar.lzma
  • 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/makefile.in and change the following

change

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

into

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

Building

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.

make CFLAGS=-O2 CXXFLAGS=-O2 LDFLAGS=-s

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 CFLAGS=-O2 CXXFLAGS=-O2 LDFLAGS=-s

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

Compile

make CFLAGS=-O2 CXXFLAGS=-O2 LDFLAGS=-s

And install

make install

Building the rest of gcc

Enter into the gcc build directory.

cd ..
cd gcc

And compile the rest.

make CFLAGS=-O2 CXXFLAGS=-O2 LDFLAGS=-s
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")