INSTALLING 64-BIT AND 32-BIT GCC 6.3 EXECUTABLES THAT CAN COMPILE TO 64-BIT AND 32-BIT CODE,
RESPECTIVELY (MY FOLDER STRUCTURE).
To do this install, I install two of the mingw-64 automated builds under one folder and
then make some slight adjustments to them. The combined distribution takes up about 590 MiB
of disk space.
Jan 13, 2017
------------
1. Download these two distros:
a. x86_64-6.3.0-release-win32-seh-rt_v5-rev0.7z
Folder: Win64 Toolchain
b. i686-6.3.0-release-win32-dwarf-rt_v5-rev0.7z
Folder: Win32 Toolchain
(available from http://sourceforge.net/projects/mingw-w64)
See the Stack Overflow Page for the difference between seh, sjlj, and dwarf distros.
2. Extract the two distros under a root folder like "d:\mingw"
3. Move to d:\mingw (or whatever the intall folder is) and run the gosetup.bat script
from that folder. Make sure make.exe and rsxnt.dll are in d:\mingw before running
the script if you want those files.
d:\mingw
+- x64 (re-named from \mingw64)
+- include (from \mingw64\include and \mingw64\x86_64-w64-mingw32\include)
+- libexec (from \mingw64\libexec)
+- lib (from \mingw64\lib and \mingw64\x86_64-w64-mingw32\lib)
+- bin (from \mingw64\bin)
+- x32 (re-named from \mingw32)
+- include (from \mingw32\include and \mingw32\i686-w64-mingw32\include)
+- libexec (from \mingw32\libexec)
+- lib (from \mingw32\lib and \mingw32\i686-w64-mingw32\lib)
+- bin (from \mingw32\bin)
4. Edit \mingw\x64\include\float.h and \mingw\x32\include\float.h and add these lines
to both (I insert them after the line that says #define LDBL_MIN __LDBL_MIN__):
/* The difference between 1 and the least value greater than 1 that is
representable in the given floating point type, b**1-p. */
#undef FLT_EPSILON
#undef DBL_EPSILON
#undef LDBL_EPSILON
#define FLT_EPSILON __FLT_EPSILON__
#define DBL_EPSILON __DBL_EPSILON__
#define LDBL_EPSILON __LDBL_EPSILON__
5. 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
6. 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 -u c:\mingw* -e d:\mingw\x64\bin
repath -e d:\mingw\x64\bin
call _repath.bat
del _repath.bat
set c_include_path=d:\my_include;d:\mingw\x64\include
set cplus_include_path=d:\my_include;d:\mingw\x64\lib\gcc\x86_64-w64-mingw32\6.3.0\include;d:\mingw\x64\lib\gcc\x86_64-w64-mingw32\6.3.0\include\c++;d:\mingw\x64\lib\gcc\x86_64-w64-mingw32\6.3.0\include\c++\backward;d:\mingw\x64\include
set library_path=d:\my_libs\mingw64;d:\mingw\x64\lib
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 -u c:\mingw* -e d:\mingw\x32\bin
call _repath.bat
del _repath.bat
set c_include_path=d:\my_include;d:\mingw\x32\include
set cplus_include_path=d:\my_include;d:\mingw\x32\lib\gcc\i686-w64-mingw32\6.3.0\include;d:\mingw\x32\lib\gcc\i686-w64-mingw32\6.3.0\include\c++;d:\mingw\x32\lib\gcc\i686-w64-mingw32\6.3.0\include\c++\backward;d:\mingw\x32\include
set library_path=d:\my_libs\mingw32;d:\mingw\x32\lib
set cflags=-Ofast -m32 -Wall
gcc -v