Difference between revisions of "Building MINGW-w64"

From ReactOS Wiki
Jump to: navigation, search
(Setting up the build environment)
 
(5 intermediate revisions by the same user not shown)
Line 8: Line 8:
 
* 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 --needed make texinfo diffutils python re2c base-devel git
+
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 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.31.1.tar.xz 2.31.1]) -> /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-8.2.0/gcc-8.2.0.tar.xz 8.2.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 v5.0.4 ([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
  
 
* MPFR (version [https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.xz 4.0.2]) -> /src/gcc/mpfr
 
* MPFR (version [https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.xz 4.0.2]) -> /src/gcc/mpfr
Line 101: 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 147: Line 147:
 
  make -jX
 
  make -jX
 
  make install
 
  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 =
 
= Common errors =

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"