INSTALLING 64-BIT AND 32-BIT GCC 4.6.3 EXECUTABLES THAT CAN COMPILE TO 64-BIT AND 32-BIT CODE,
RESPECTIVELY.
Note: You can simply install the two distros below separately. This is by far the simplest
solution. I combined them to save ~40 MiB disk space due to elimination of redundant
include files and also to have a more elegant directory structure. If you want to combine
them, my steps on how I did it are below.
A big thank you to Ruben Vandamme (rubenv at Sourceforge.net).
Dec 28, 2011
------------
1. Combined these two distros:
a. i686-w64-mingw32-gcc-4.6.3-1_rubenvb.7z
b. x86_64-w64-mingw32-gcc-4.6.3-1_rubenvb.7z
(available from http://sourceforge.net/projects/mingw-w64)
2. Tree structure:
d:\mingw
+- share (from \mingw64\share--see note 3.)
+- licenses (from \mingw64\licenses--see note 3.)
+- include (from \mingw64\include--see note 4.)
+- i386
+- libexec (from \mingw32\libexec)
+- lib (from \mingw32\lib)
+- bin (from \mingw32\bin)
+- x64
+- libexec (from \mingw64\libexec)
+- lib (from \mingw64\lib)
+- bin (from \mingw64\bin)
3. Share and licenses folder in both distros exactly the same, so
juse use the one from x64.
4. Include folders are identical except;
a. copy the folder \mingw32\include\c++\4.6.3\i686-w64-mingw32 into the mingw64
b. Added two #ifdef __x86_64's into bfd.h (see bfd.h).
[Used diffdir.exe program to figure this out.]
c. Moved include\c++\4.6.3\* to include\c++
d. Modified the c++config.h in include\c++\x86_64-w64-mingw32\bits to
ifdef x86_64 and then moved all those bits files to include\c++\bits
and removed include\c++\i686-w64-mingw32 (or whatever folder had
the 32-bit bits folder). There is a file called x86_64-w64-mingw32_bits_list.txt
in include\c++\bits which shows what files used to be divided between
the two different architecture's bits folders. Again, I used diffdir
to determine that all bits files but c++config.h were the same between
the two architectures.
e. Must manually put include\c++ and include\c++\backward in your c++ include path.
f. Commented out #include_next at the bottom of float.h in the
two architecture include folders (e.g. i386\lib\gcc\i686-w64-mingw32\4.6.3\include).
5. (Optional) Create subfolder "dontuse" in the lib dirs (\mingw\x64\lib and \mingw\i386\lib)
and move *dll* to these subfolders so that no dll dependencies are created when
you build your exes.
6. Add make.exe and rsxnt.dll to d:\mingw\i386\bin and d:\mingw\x64\bin since I like them.
7. Optimizations
a. One-pass max: -Ofast -flto -fomit-frame-pointer -momit-leaf-frame-pointer
-fgraphite-identity -floop-interchange -floop-block
-floop-parallelize-all -ftree-loop-distribution
-ftree-parallelize-loops=2 -pthread -m64 -Wall
b. Profile generate: -Ofast -flto -fomit-frame-pointer -momit-leaf-frame-pointer
-fgraphite-identity -floop-interchange -floop-block -pthread
-floop-parallelize-all -ftree-parallelize-loops=4
-ftree-loop-distribution -march=native -m64 -Wall
-fprofile-generate=d:\gcc_profiles
c. Profile use: -Ofast -flto -fomit-frame-pointer -momit-leaf-frame-pointer
-fgraphite-identity -floop-interchange -floop-block -pthread
-floop-parallelize-all -ftree-parallelize-loops=4
-ftree-loop-distribution -march=native -m64 -Wall
-fprofile-use=d:\gcc_profiles
8. Scripts to set environment/path:
a. 64-bit:
@echo off
call goclear.bat (removes all other compiler dirs from path)
call _repath.bat
del _repath.bat
repath -e d:\mingw*\x64\bin
repath -e d:\mingw\x64\bin
call _repath.bat
del _repath.bat
set c_include_path=s:\include;d:\mingw\include
set cplus_include_path=s:\include;d:\mingw\include;d:\mingw\include\c++;d:\mingw\include\c++\backward
set library_path=d:\will\custom\mingw64;d:\mingw\x64\lib
set libdir=
set exedir=d:\bin64
set cc=gcc
set cpp=g++
set f77=gcc
set cflags=-Ofast -m64 -Wall
gcc -v
b. 32-bit:
@echo off
call goclear.bat (removes all other compiler dirs from path)
call _repath.bat
del _repath.bat
repath -e d:\mingw*\i386\bin
call _repath.bat
del _repath.bat
set c_include_path=s:\include;d:\mingw\include
set cplus_include_path=s:\include;d:\mingw\include;d:\mingw\include\c++;d:\mingw\include\c++\backward
set library_path=d:\will\custom\mingw;d:\mingw\i386\lib
set libdir=
set exedir=d:\bin
set cc=gcc
set cpp=g++
set f77=gcc
set cflags=-Ofast -m32 -Wall
gcc -v