Difference between revisions of "Building MINGW-w64"

From ReactOS Wiki
Jump to: navigation, search
Line 22: Line 22:
 
Download all the sources into subfolders of /src
 
Download all the sources into subfolders of /src
  
* binutils (version [ftp://sourceware.org/pub/binutils/releases/binutils-2.32.tar.xz 2.32] -> /src/binutils
+
* binutils (version [ftp://sourceware.org/pub/binutils/releases/binutils-2.32.tar.xz 2.32]) -> /src/binutils
* gcc (version [ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-7.4.0/gcc-7.4.0.tar.xz 7.4.0] -> /src/gcc
+
* gcc (version [ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-7.4.0/gcc-7.4.0.tar.xz 7.4.0]) -> /src/gcc
 
* mingw-w64 v6.0.0 ([https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ here]) -> /src/mingw-w64
 
* mingw-w64 v6.0.0 ([https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ here]) -> /src/mingw-w64
  
Line 34: Line 34:
 
Copy the src/mingw-w64/mingw-w64-headers/include directory to /RosBE/mingw and to /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit).
 
Copy the src/mingw-w64/mingw-w64-headers/include directory to /RosBE/mingw and to /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit).
  
This is needed for building GCC. This is replaced by make install of the MinGW headers, but before that step GCC still wants headers which we give it here.
+
This is needed for building GCC-core. This is replaced by make install of the MinGW headers, but before that step GCC still wants headers which we give it here.
  
 
= Building =
 
= Building =

Revision as of 00:22, 23 April 2019

... 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:

  • MSYS2 (version 20180531)
  • Recent mingw-w64 32 bit Toolchain (here)

Download all packages and install them into c:\MSYS32. Extract Toolchain to the /usr/ folder inside.

pacman -Syu

pacman -Su

pacman -S make texinfo diffutils

(If installing make makes problems, remove the files it laments about already being existent)

Getting the sources

Download all the sources into subfolders of /src

  • binutils (version 2.32) -> /src/binutils
  • gcc (version 7.4.0) -> /src/gcc
  • mingw-w64 v6.0.0 (here) -> /src/mingw-w64
  • MPFR (version 4.0.2) -> /src/gcc/mpfr
  • GMP (version 6.1.2) -> /src/gcc/gmp
  • MPC (version 1.1.0) -> /src/gcc/mpc

Note

Copy the src/mingw-w64/mingw-w64-headers/include directory to /RosBE/mingw and to /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit).

This is needed for building GCC-core. This is replaced by make install of the MinGW headers, but before that step GCC still wants headers which we give it here.

Building

Optionally set buildflags:

64 bit:

export CFLAGS="-g0 -O2 -pipe -Wl,-S"
export CXXFLAGS="-g0 -O2 -pipe -Wl,-S"

32 bit:

export CFLAGS="-g0 -O2 -pipe -Wl,-S -march=pentium -mtune=i686"
export CXXFLAGS="-g0 -O2 -pipe -Wl,-S -march=pentium -march=i686"

Building binutils

Create a build subdirectory for binutils:

cd build
mkdir binutils
cd binutils

From the build directory run the binutils configure script:

64 bit:

../../src/binutils/configure --prefix=/RosBE --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=x86_64-w64-mingw32 --disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE

32 bit:

../../src/binutils/configure --prefix=/RosBE --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE

Now build the whole stuff.

make

Finally install it into the designated directory.

make install

Building gcc-core

Enter into the build directory:

cd ..
mkdir gcc
cd gcc

Now run the configure script:

64 bit:

../../src/gcc/configure --prefix=/RosBE --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=x86_64-w64-mingw32 --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-checking=release --disable-win32-registry --disable-shared --disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE --enable-version-specific-runtime-libs --with-host-libstdcxx="-lstdc++ -lsupc++"

32 bit:

../../src/gcc/configure --prefix=/RosBE --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-checking=release --disable-win32-registry --disable-shared --disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE --enable-version-specific-runtime-libs --with-host-libstdcxx="-lstdc++ -lsupc++"

Compile the gcc-core

make all-gcc

And install it

make install-gcc

Finally add it to the PATH variable.

export PATH="$PATH:/RosBE/bin"

Building the mingw-w64 headers

Create a build directory.

cd ..
mkdir mingw-w64-headers
cd mingw-w64-headers

Run the configure script

64 bit:

../../src/mingw-w64/mingw-w64-headers/configure --host=x86_64-w64-mingw32 --build=i686-w64-mingw32 --prefix=/RosBE/x86_64-w64-mingw32

32 bit:

../../src/mingw-w64/mingw-w64-headers/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --prefix=/RosBE/i686-w64-mingw32

Install

make install

Run the configure script

64 bit:

../../src/mingw-w64/mingw-w64-headers/configure --host=x86_64-w64-mingw32 --build=i686-w64-mingw32 --prefix=/RosBE

32 bit:

../../src/mingw-w64/mingw-w64-headers/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --prefix=/RosBE

Install

make install

Building the crt

Create a build directory.

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

Run the configure script

64 bit:

../../src/mingw-w64/mingw-w64-crt/configure --prefix=/RosBE/x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --build=i686-w64-mingw32 --with-sysroot=/RosBE

32 bit:

../../src/mingw-w64/mingw-w64-crt/configure --prefix=/RosBE/i686-w64-mingw32 --host=i686-w64-mingw32 --build=i686-w64-mingw32 --with-sysroot=/RosBE

Compile

make

And install

make install

Copy the /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit) directory to /RosBE/mingw.

Building the rest of gcc

Enter into the gcc build directory.

cd ..
cd gcc

And compile the rest.

make
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 /RosBE/x86_64-w64-mingw32 and /RosBE/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")