Difference between revisions of "Building MINGW-w64"

From ReactOS Wiki
Jump to: navigation, search
(Setting up the build environment)
 
(15 intermediate revisions by the same user not shown)
Line 3: Line 3:
  
 
== Setting up the build environment ==
 
== Setting up the build environment ==
Download and install MSYS. You will need the following packages:
+
Download and install MSYS2. You will need the following packages:
  
 
* MSYS2 (version [http://repo.msys2.org/distrib/i686/msys2-i686-20180531.exe 20180531])
 
* MSYS2 (version [http://repo.msys2.org/distrib/i686/msys2-i686-20180531.exe 20180531])
 
* Recent mingw-w64 32 bit Toolchain ([https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/threads-win32/dwarf/ here])
 
* Recent mingw-w64 32 bit Toolchain ([https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/threads-win32/dwarf/ here])
  
Download all packages and install them into c:\MSYS32. Extract Toolchain to the /usr/ folder inside.
+
Download all packages and install them into c:\MSYS32. Extract Toolchain to the /mingw32/ folder inside.
  
 
pacman -Syu
 
pacman -Syu
Line 14: Line 14:
 
pacman -Su
 
pacman -Su
  
pacman -S make texinfo diffutils
+
pacman -S --needed make texinfo diffutils
  
 
(If installing make makes problems, remove the files it laments about already being existent)
 
(If installing make makes problems, remove the files it laments about already being existent)
Line 23: Line 23:
  
 
* 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-8.3.0/gcc-8.3.0.tar.xz 8.3.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 32: Line 32:
 
= Building =
 
= Building =
  
USE THE MINGW32.EXE!!!
+
* USE THE MINGW32.EXE!!! Otherwise the host= and build= parameters are set to some msys2 environment and not the one we expect.
 +
* the -jX parameter added to make speeds up the build processes by using mutiple threads to build on more than one CPU core. Use your amout of cores + 1 as number instead of the X.
  
 
Optionally set buildflags:
 
Optionally set buildflags:
Line 83: Line 84:
 
  make install
 
  make install
  
== Note ==
+
=== Note ===
  
 
Copy the /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit) directory to /RosBE/mingw.
 
Copy the /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit) directory to /RosBE/mingw.
Line 100: Line 101:
  
 
64 bit:
 
64 bit:
  ../../src/gcc/configure --target=x86_64-w64-mingw32 --prefix=/RosBE --with-sysroot=/RosBE --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-fully-dynamic-string --enable-checking=release --enable-version-specific-runtime-libs --enable-plugins --disable-shared --disable-multilib --disable-nls --disable-werror --disable-win32-registry --disable-sjlj-exceptions
+
  ../../src/gcc/configure --target=x86_64-w64-mingw32 --prefix=/RosBE --with-sysroot=/RosBE --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-fully-dynamic-string --enable-checking=release --enable-version-specific-runtime-libs --enable-plugins --disable-shared --disable-multilib --disable-nls --disable-werror --disable-win32-registry --disable-sjlj-exceptions --disable-libstdcxx-verbose
  
 
32 bit:
 
32 bit:
  ../../src/gcc/configure --target=i686-w64-mingw32 --prefix=/RosBE --with-sysroot=/RosBE --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-fully-dynamic-string --enable-checking=release --enable-version-specific-runtime-libs --enable-plugins --disable-shared --disable-multilib --disable-nls --disable-werror --disable-win32-registry --disable-sjlj-exceptions
+
  ../../src/gcc/configure --target=i686-w64-mingw32 --prefix=/RosBE --with-sysroot=/RosBE --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-fully-dynamic-string --enable-checking=release --enable-version-specific-runtime-libs --enable-plugins --disable-shared --disable-multilib --disable-nls --disable-werror --disable-win32-registry --disable-sjlj-exceptions --disable-libstdcxx-verbose
  
 
Compile the gcc-core
 
Compile the gcc-core
Line 132: Line 133:
 
And install
 
And install
 
  make install
 
  make install
 +
 +
=== Note ===
 +
 +
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 ===
 
=== Building the rest of gcc ===
Line 143: Line 148:
 
  make install
 
  make install
  
== Common errors ==
+
=== Stripping the binaries ===
 +
 
 +
CD to the RosBE directory and execute these
 +
 
 +
find -executable -type f -exec strip -s {} ";" >& /dev/null
 +
find -name "*.a" -type f -exec strip -d {} ";" >& /dev/null
 +
find -name "*.o" -type f -exec strip -d {} ";" >& /dev/null
  
When compiling crt:
+
= Common errors =
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 copied the /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit) directory to /RosBE/mingw anytime you have to do something with GCC building.
* Check if you have set the PATH variable to the new compiler correctly
+
* 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")
+
* Check if you have installed the new compiler correctly ("make install-gcc").
 +
* If you wanna make a new ninja. "configure.py --platform=mingw --host=mingw --bootstrap"
  
 
[[Category:Building]]
 
[[Category:Building]]
 
[[Category:amd64]]
 
[[Category:amd64]]
 
[[Category:Tutorial]]
 
[[Category:Tutorial]]

Latest revision as of 20:31, 19 August 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 MSYS2. 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 /mingw32/ folder inside.

pacman -Syu

pacman -Su

pacman -S --needed 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 8.3.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

Building

  • USE THE MINGW32.EXE!!! Otherwise the host= and build= parameters are set to some msys2 environment and not the one we expect.
  • the -jX parameter added to make speeds up the build processes by using mutiple threads to build on more than one CPU core. Use your amout of cores + 1 as number instead of the X.

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 --with-sysroot=/RosBE --target=x86_64-w64-mingw32 --disable-multilib --disable-werror --enable-lto --enable-plugins --with-zlib=yes --disable-nls

32 bit:

../../src/binutils/configure --prefix=/RosBE --with-sysroot=/RosBE --target=i686-w64-mingw32 --disable-multilib --disable-werror --enable-lto --enable-plugins --with-zlib=yes --disable-nls

Now build the whole stuff.

make -jX

Finally install it into the designated directory.

make install

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 --prefix=/RosBE/x86_64-w64-mingw32 --host=x86_64-w64-mingw32

32 bit:

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

Install

make install

Note

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

Add it to the PATH variable.

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

Building gcc-core

Enter into the build directory:

cd ..
mkdir gcc
cd gcc

Now run the configure script:

64 bit:

../../src/gcc/configure --target=x86_64-w64-mingw32 --prefix=/RosBE --with-sysroot=/RosBE --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-fully-dynamic-string --enable-checking=release --enable-version-specific-runtime-libs --enable-plugins --disable-shared --disable-multilib --disable-nls --disable-werror --disable-win32-registry --disable-sjlj-exceptions --disable-libstdcxx-verbose

32 bit:

../../src/gcc/configure --target=i686-w64-mingw32 --prefix=/RosBE --with-sysroot=/RosBE --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-fully-dynamic-string --enable-checking=release --enable-version-specific-runtime-libs --enable-plugins --disable-shared --disable-multilib --disable-nls --disable-werror --disable-win32-registry --disable-sjlj-exceptions --disable-libstdcxx-verbose

Compile the gcc-core

make all-gcc -jX

And install it

make install-gcc
make install-lto-plugin

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 --with-sysroot=/RosBE/x86_64-w64-mingw32 --host=x86_64-w64-mingw32

32 bit:

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

Compile

make -jX

And install

make install

Note

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 -jX
make install

Stripping the binaries

CD to the RosBE directory and execute these

find -executable -type f -exec strip -s {} ";" >& /dev/null
find -name "*.a" -type f -exec strip -d {} ";" >& /dev/null
find -name "*.o" -type f -exec strip -d {} ";" >& /dev/null

Common errors

  • Check if you have copied the /RosBE/x86_64-w64-mingw32 (64 bit) or /RosBE/i686-w64-mingw32 (32 bit) directory to /RosBE/mingw anytime you have to do something with GCC building.
  • 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").
  • If you wanna make a new ninja. "configure.py --platform=mingw --host=mingw --bootstrap"