TODO: * Multi-arch build (i.e., i686 hosted, i686 and x86_64-trageting, just like in Qt5). Then will be able to pass -m32/-m64 to the ODB compiler. An overview of steps required to switch to a new GCC version. This is a complete toolchain bring up. 1. Get the MinGW-W64 GCC build of this version and get configuration flags (gcc -v). The idea is to build both the cross-compiler and the native compiler (with linked-in ODB plugin) as close to the MinGW-W64 configuration as possible. 2. Build cross-binutils: 1. Move old cross/mingw to cross/mingw-X.Y.Z. 2. Unpack binutils, rename to binutils, create or clean binutils-cross-build. 3. Build and install: cd binutils-cross-build ../binutils-cross-configure make -j 16 make install 3 Install runtime headers: 1. Unpack mingw-w64 and rename to mingw-w64, create or clean mingw-w64-headers-build. 2. Configure & install: cd mingw-w64-headers-build ../rt-headers-cross-configure make install 4. Build cross-GCC, phase 1: 1. Unpack GCC, rename to gcc-cross, create or clean gcc-cross-build. 2. Adapt older gcc-X.Y.Z-mingw-cross.patch (--dry-run) and apply. 3. Adapt gcc-cross-configure based on MinGW-W64 config and old config. 4. Build & install GCC only: cd gcc-cross-build ../gcc-cross-configure make -j 16 all-gcc make install-gcc 5. Build runtime: 1. Create or clean mingw-w64-build. 2. Build & install: export PATH=`pwd`/cross/mingw/bin:$PATH cd mingw-w64-build ../rt-cross-configure make -j 16 make install 6. Build pthreads: 1. Get winpthreads, create or clean winpthreads-build svn checkout http://mingw-w64.svn.sourceforge.net/svnroot/mingw-w64/experimental/winpthreads 2. Build and install: export PATH=`pwd`/cross/mingw/bin:$PATH cd winpthreads-build ../pthreads-cross-configure make -j 16 make install 7. Build cross-GCC, phase 2: 1. Build & install: cd gcc-cross-build make -j 16 make install 2. Disable .dll & .la files in i686-w64-mingw32/lib. 3. Check that the compiler works. Compile and run sizeof_funds.cxx and throw.cxx. 8. Package runtime: 1. Save mingw-rt as mingw-rt-X.Y.Z 2. Package: cd mingw-w64-headers-build make DESTDIR=/home/boris/work/odb/build/mingw-w64/mingw-rt install cd mingw-w64-build make DESTDIR=/home/boris/work/odb/build/mingw-w64/mingw-rt install cd winpthreads-build make DESTDIR=/home/boris/work/odb/build/mingw-w64/mingw-rt install Move to the top level directory. 9. Build binutils: 1. Create or clean binutils-build, /mingw. 2. Build and install: export PATH=`pwd`/cross/mingw/bin:$PATH cd binutils-build ../configure-binutils make -j 16 make install 3. Copy /mingw/* to mingw-binutils. 10. Build GCC prerequisites (gmp, mpfr, mpc): 1. Unpack {gmp, mpfr, mpc} 2. Build and install: cd {gmp, mpfr, mpc} ../gcc-prereq-configure make -j 16 make install 11. Build the native compiler: 1. Unpack GCC, rename to gcc, create or clean gcc-build. 2. Adapt older gcc-X.Y.Z-mingw.patch (--dry-run) and apply. 3. Adapt older gcc-X.Y.Z-static-plugin.patch (--dry-run) and apply. This step will probably require careful review of changes in the plugin code (plugin.h and plugin.c). 4. Regenerate configure script in gcc/gcc/. Use the same autoconf version as in the original (see ~/build/autocond-X.Y). For example: sudo make -C ~/build/autoconf-2.64 install autoconf --version cd gcc autoconf sudo make -C ~/build/autoconf-2.64 uninstall 4. Adapt gcc-configure. 5. Configure and make GCC manually: export PATH=`pwd`/cross/mingw/bin:$PATH cd gcc-build ../gcc-configure make -j 16 This step will fail due to lack of libplugin-stub.a. That's ok. Copy .h and .def files from gcc-build/gcc/ to gcc-headers/ (backup old ones). 4. Run the build-dist script with -rebuild 1. If GCC build fails, then it can be re-configured or re-made directly from the gcc-build directory provided you don't clean it up (if you do so, you can manually copy libplugin-stub.a to gcc-build/gcc/). 2. Check the package for any stray directories/files. Compare size to the old version. 3. On Windows, check that: - Compiler, including exceptions, work. Compile and run sizeof_funds.cxx and throw.cxx. - Make sure ODB runs, including throwing exceptions (run on object with private data members). 5. Copy updates/patches to odb/etc/.