From 6fe7fc56873b27deef74bc9dc36adf86af4fd79b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 11 Feb 2015 16:20:56 +0200 Subject: Update MinGW64 binary build (MinGW 3.3 runtime) Using GCC 4.9.3, multi-arch/multi-lib build (you don't want to try this at home). --- binary/mingw-w64/NOTES | 58 +++++--- binary/mingw-w64/binutils-configure | 3 + binary/mingw-w64/binutils-cross-configure | 3 + binary/mingw-w64/build-dist | 23 +++- binary/mingw-w64/gcc-configure | 11 +- binary/mingw-w64/gcc-cross-configure | 8 +- binary/mingw-w64/odb-configure | 2 +- .../mingw-w64/patches/gcc-4.7-20130209-cross.patch | 25 ++++ .../mingw-w64/patches/gcc-4.7-20130209-mingw.patch | 24 ++++ .../patches/gcc-4.7-20130209-static-plugin.patch | 142 +++++++++++++++++++ .../mingw-w64/patches/gcc-4.9-20150204-cross.patch | 25 ++++ .../mingw-w64/patches/gcc-4.9-20150204-mingw.patch | 24 ++++ .../patches/gcc-4.9-20150204-static-plugin.patch | 150 +++++++++++++++++++++ binary/mingw-w64/pthread-cross-configure | 2 +- binary/mingw-w64/pthread-cross-configure-64 | 10 ++ binary/mingw-w64/rt-cross-configure | 4 +- binary/mingw-w64/rt-headers-cross-configure | 3 +- 17 files changed, 488 insertions(+), 29 deletions(-) create mode 100644 binary/mingw-w64/patches/gcc-4.7-20130209-cross.patch create mode 100644 binary/mingw-w64/patches/gcc-4.7-20130209-mingw.patch create mode 100644 binary/mingw-w64/patches/gcc-4.7-20130209-static-plugin.patch create mode 100644 binary/mingw-w64/patches/gcc-4.9-20150204-cross.patch create mode 100644 binary/mingw-w64/patches/gcc-4.9-20150204-mingw.patch create mode 100644 binary/mingw-w64/patches/gcc-4.9-20150204-static-plugin.patch create mode 100755 binary/mingw-w64/pthread-cross-configure-64 diff --git a/binary/mingw-w64/NOTES b/binary/mingw-w64/NOTES index fec4e7a..c94988f 100644 --- a/binary/mingw-w64/NOTES +++ b/binary/mingw-w64/NOTES @@ -1,7 +1,11 @@ -TODO: +Notes: -* 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. +- Currently have to use the mingw/lib -> i686-w64-mingw32/lib64 hack to + make GCC see 64-bit system libraries. This is required for both cross + and native compiler. In the native compiler it is removed later and + the result seem to work ok. + +- If updating msys, add gendef and reimp (from mingw-utils) utilities. An overview of steps required to switch to a new GCC version. This is a complete toolchain bring up. @@ -39,9 +43,11 @@ a complete toolchain bring up. 3. Adapt gcc-cross-configure based on MinGW-W64 config and old config. 4. Build & install GCC only: + # High -j does not seem to work properly, -j 4 seems to work. + cd gcc-cross-build ../gcc-cross-configure - make -j 16 all-gcc + make -j 4 all-gcc make install-gcc 5. Build runtime: @@ -52,32 +58,39 @@ a complete toolchain bring up. export PATH=`pwd`/cross/mingw/bin:$PATH cd mingw-w64-build ../rt-cross-configure - make -j 16 - make install + make -j 22 + make -j 22 install -6. Build pthreads: + i686-w64-mingw32-ar cr ../cross/mingw/i686-w64-mingw32/lib/libpthread.a + i686-w64-mingw32-ar cr ../cross/mingw/i686-w64-mingw32/lib64/libpthread.a - 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: + mkdir winpthreads32 + cd winpthreads32 + ../../pthread-cross-configure + make -j 16 + make install + mv ../../cross/mingw/i686-w64-mingw32/bin/libwinpthread* ../../cross/mingw/i686-w64-mingw32/lib/ - export PATH=`pwd`/cross/mingw/bin:$PATH - cd winpthreads-build - ../pthreads-cross-configure + cd .. + mkdir winpthreads64 + cd winpthreads64 + ../../pthread-cross-configure-64 make -j 16 make install + mv ../../cross/mingw/i686-w64-mingw32/bin/libwinpthread* ../../cross/mingw/i686-w64-mingw32/lib64/ 7. Build cross-GCC, phase 2: 1. Build & install: + @@ Had to ln mingw/lib to lib64 in cross/mingw/ + cd gcc-cross-build make -j 16 make install - 2. Disable .dll & .la files in i686-w64-mingw32/lib and bin/. + 2. Disable .dll & .la files in i686-w64-mingw32/lib and bin/ (for + static link) 3. Check that the compiler works. Compile and run sizeof_funds.cxx and throw.cxx. @@ -91,11 +104,17 @@ a complete toolchain bring up. cd mingw-w64-headers-build make DESTDIR=/home/boris/work/odb/build/mingw-w64/mingw-rt install + # May need export PATH above cd mingw-w64-build make DESTDIR=/home/boris/work/odb/build/mingw-w64/mingw-rt install - cd winpthreads-build + cd winpthreads32 make DESTDIR=/home/boris/work/odb/build/mingw-w64/mingw-rt install + #do manually: mv ../../mingw-rt/i686-w64-mingw32/bin/libwinpthread* ../../mingw-rt/i686-w64-mingw32/lib/ + + cd winpthreads64 + make DESTDIR=/home/boris/work/odb/build/mingw-w64/mingw-rt install + #do manually: mv ../../mingw-rt/i686-w64-mingw32/bin/libwinpthread* ../../mingw-rt/i686-w64-mingw32/lib64/ Move to the top level directory. @@ -160,8 +179,13 @@ a complete toolchain bring up. 2. Check the package for any stray directories/files. Compare size to the old version. + Check that 32 and 64-bit libstdc++ are different (use file) Globbing + for odb. + 3. On Windows, check that: + - No dependencies on MinGW DLLs (odb, g++, cc1plus, ld). + - Compiler, including exceptions, work. Compile and run sizeof_funds.cxx and throw.cxx. diff --git a/binary/mingw-w64/binutils-configure b/binary/mingw-w64/binutils-configure index e5194c0..713decc 100755 --- a/binary/mingw-w64/binutils-configure +++ b/binary/mingw-w64/binutils-configure @@ -3,6 +3,9 @@ ../binutils/configure \ --host i686-w64-mingw32 \ --target i686-w64-mingw32 \ +--enable-targets=i686-w64-mingw32,x86_64-w64-mingw32 \ +--enable-multilib \ +--enable-64-bit-bfd \ --prefix=/mingw \ --with-sysroot=/mingw \ --disable-nls \ diff --git a/binary/mingw-w64/binutils-cross-configure b/binary/mingw-w64/binutils-cross-configure index 142f110..199a064 100755 --- a/binary/mingw-w64/binutils-cross-configure +++ b/binary/mingw-w64/binutils-cross-configure @@ -2,6 +2,9 @@ ../binutils/configure \ --target i686-w64-mingw32 \ +--enable-targets=i686-w64-mingw32,x86_64-w64-mingw32 \ +--enable-multilib \ +--enable-64-bit-bfd \ --prefix=/home/boris/work/odb/build/mingw-w64/cross/mingw \ --with-sysroot=/home/boris/work/odb/build/mingw-w64/cross/mingw \ --disable-nls \ diff --git a/binary/mingw-w64/build-dist b/binary/mingw-w64/build-dist index 5b8e1f0..0c1e082 100755 --- a/binary/mingw-w64/build-dist +++ b/binary/mingw-w64/build-dist @@ -90,6 +90,9 @@ if [ $rebuild = y ]; then cp -r mingw-rt/* /mingw/ cp -r mingw-binutils/* /mingw/ + + mkdir /mingw/mingw + ln -s /mingw/i686-w64-mingw32/lib64 /mingw/mingw/lib fi # Build libplugin-stub @@ -251,17 +254,30 @@ else fi make -j $jobs STATIC_PLUGIN_LIBS="-Wl,--whole-archive $out_root/odb-build/odb/.libs/odb.a -Wl,--no-whole-archive $out_root/libcutl/cutl/.libs/libcutl.a -lstdc++ -static-libgcc" + +# Split 32 and 64 libs/dlls. +# +rm -rf /mingw/bin64 +mv /mingw/bin /mingw/bin32 make install -make -C i686-w64-mingw32/libstdc++-v3 install-strip +make -C i686-w64-mingw32/libstdc++-v3/src install-strip +mv /mingw/bin/* /mingw/bin32/ +rm -rf /mingw/bin /mingw/bin64 +make -C i686-w64-mingw32/64/libstdc++-v3/src install-strip +mv /mingw/bin /mingw/bin64 +mv /mingw/bin32 /mingw/bin cd .. -# Copy /mingw over to installation +# Copy /mingw over to installation. # cp -r /mingw $install_root/ # Move some DLLs to mingw/bin/. mv $install_root/mingw/lib/libgcc_s_sjlj-1.dll $install_root/mingw/bin/ -mv $install_root/mingw/i686-w64-mingw32/bin/libwinpthread-1.dll $install_root/mingw/bin/ +mv $install_root/mingw/i686-w64-mingw32/lib/libwinpthread-1.dll $install_root/mingw/bin/ + +mv $install_root/mingw/lib64/libgcc_s_sjlj-1.dll $install_root/mingw/bin64/ +mv $install_root/mingw/i686-w64-mingw32/lib64/libwinpthread-1.dll $install_root/mingw/bin64/ # Move doc and man out of share/ # @@ -272,6 +288,7 @@ rm -r $install_root/share # Clean some things up. # +rm -r $install_root/mingw/mingw rm -f $install_root/mingw/lib/libbfd.* rm -f $install_root/mingw/include/bfd*.h rm -f $install_root/mingw/lib/libopcodes.* diff --git a/binary/mingw-w64/gcc-configure b/binary/mingw-w64/gcc-configure index ca00dd5..156d803 100755 --- a/binary/mingw-w64/gcc-configure +++ b/binary/mingw-w64/gcc-configure @@ -15,7 +15,12 @@ --disable-libssp \ --disable-libgomp \ --disable-graphite \ ---disable-multilib \ +--enable-targets=all \ +--enable-multilib \ +--with-arch-32=i686 \ +--with-arch-64=nocona \ +--with-tune-32=generic \ +--with-tune-64=core2 \ --enable-libstdcxx-time \ --enable-fully-dynamic-string \ --disable-dw2-exceptions \ @@ -29,5 +34,5 @@ --with-pkgversion="ODB special" \ --with-bugurl="http://www.codesynthesis.com/products/odb/" \ --enable-static-plugin \ ---with-stage1-libs=libplugin-stub.a \ -CFLAGS=-O2 CXXFLAGS=-O2 LDFLAGS=-s +--with-stage1-libs="libplugin-stub.a -lstdc++" \ +CFLAGS=-O2 CXXFLAGS=-O2 LDFLAGS="-s -static-libgcc" diff --git a/binary/mingw-w64/gcc-cross-configure b/binary/mingw-w64/gcc-cross-configure index 39d1d54..d0ecf76 100755 --- a/binary/mingw-w64/gcc-cross-configure +++ b/binary/mingw-w64/gcc-cross-configure @@ -13,7 +13,12 @@ --disable-libssp \ --disable-libgomp \ --disable-graphite \ ---disable-multilib \ +--enable-targets=all \ +--enable-multilib \ +--with-arch-32=i686 \ +--with-arch-64=nocona \ +--with-tune-32=generic \ +--with-tune-64=core2 \ --enable-libstdcxx-time \ --enable-fully-dynamic-string \ --disable-dw2-exceptions \ @@ -24,4 +29,5 @@ --disable-win32-registry \ --disable-nls \ --disable-werror \ +--with-system-zlib \ CFLAGS=-O2 CXXFLAGS=-O2 diff --git a/binary/mingw-w64/odb-configure b/binary/mingw-w64/odb-configure index fd565a0..6d26edb 100755 --- a/binary/mingw-w64/odb-configure +++ b/binary/mingw-w64/odb-configure @@ -9,6 +9,6 @@ --with-libcutl=../libcutl \ --with-gxx-name='..\\mingw\\bin\\g++.exe' \ --with-options-file='..\\etc\\odb\\default.options' \ -CXXFLAGS="-O2 -W -Wall" \ +CXXFLAGS="-O2 -fno-devirtualize -W -Wall" \ LDFLAGS=-static-libgcc \ CPPFLAGS="-I`pwd`/../gcc-headers/gcc -I`pwd`/../gcc/gcc -I`pwd`/../gcc/libcpp/include -I`pwd`/../gcc/include" diff --git a/binary/mingw-w64/patches/gcc-4.7-20130209-cross.patch b/binary/mingw-w64/patches/gcc-4.7-20130209-cross.patch new file mode 100644 index 0000000..ab207cc --- /dev/null +++ b/binary/mingw-w64/patches/gcc-4.7-20130209-cross.patch @@ -0,0 +1,25 @@ +diff -ru gcc-4.7-20130209/gcc/config/i386/mingw32.h gcc-cross/gcc/config/i386/mingw32.h +--- gcc-4.7-20130209/gcc/config/i386/mingw32.h 2012-08-06 16:34:27.000000000 +0200 ++++ gcc-cross/gcc/config/i386/mingw32.h 2013-05-27 15:41:55.000000000 +0200 +@@ -153,7 +153,7 @@ + /* For native mingw-version we need to take care that NATIVE_SYSTEM_HEADER_DIR + macro contains POSIX-style path. See bug 52947. */ + #undef NATIVE_SYSTEM_HEADER_DIR +-#define NATIVE_SYSTEM_HEADER_DIR "/mingw/include" ++#define NATIVE_SYSTEM_HEADER_DIR "/include" + + /* Output STRING, a string representing a filename, to FILE. + We canonicalize it to be in Unix format (backslashes are replaced +diff -ru gcc-4.7-20130209/gcc/config.gcc gcc-cross/gcc/config.gcc +--- gcc-4.7-20130209/gcc/config.gcc 2013-01-14 18:32:37.000000000 +0200 ++++ gcc-cross/gcc/config.gcc 2013-05-27 15:42:06.000000000 +0200 +@@ -1485,7 +1485,7 @@ + tmake_file="${tmake_file} i386/t-mingw-w32" + ;; + esac +- native_system_header_dir=/mingw/include ++ native_system_header_dir=/include + target_gtfiles="\$(srcdir)/config/i386/winnt.c" + extra_options="${extra_options} i386/cygming.opt i386/mingw.opt" + case ${target} in + diff --git a/binary/mingw-w64/patches/gcc-4.7-20130209-mingw.patch b/binary/mingw-w64/patches/gcc-4.7-20130209-mingw.patch new file mode 100644 index 0000000..391bf0b --- /dev/null +++ b/binary/mingw-w64/patches/gcc-4.7-20130209-mingw.patch @@ -0,0 +1,24 @@ +diff -ru gcc-4.7-20130209/gcc/config/i386/mingw32.h gcc/gcc/config/i386/mingw32.h +--- gcc-4.7-20130209/gcc/config/i386/mingw32.h 2012-08-06 16:34:27.000000000 +0200 ++++ gcc/gcc/config/i386/mingw32.h 2013-05-27 15:42:33.000000000 +0200 +@@ -153,7 +153,7 @@ + /* For native mingw-version we need to take care that NATIVE_SYSTEM_HEADER_DIR + macro contains POSIX-style path. See bug 52947. */ + #undef NATIVE_SYSTEM_HEADER_DIR +-#define NATIVE_SYSTEM_HEADER_DIR "/mingw/include" ++#define NATIVE_SYSTEM_HEADER_DIR "/include" + + /* Output STRING, a string representing a filename, to FILE. + We canonicalize it to be in Unix format (backslashes are replaced +diff -ru gcc-4.7-20130209/gcc/config.gcc gcc/gcc/config.gcc +--- gcc-4.7-20130209/gcc/config.gcc 2013-01-14 18:32:37.000000000 +0200 ++++ gcc/gcc/config.gcc 2013-05-27 15:42:45.000000000 +0200 +@@ -1485,7 +1485,7 @@ + tmake_file="${tmake_file} i386/t-mingw-w32" + ;; + esac +- native_system_header_dir=/mingw/include ++ native_system_header_dir=/include + target_gtfiles="\$(srcdir)/config/i386/winnt.c" + extra_options="${extra_options} i386/cygming.opt i386/mingw.opt" + case ${target} in diff --git a/binary/mingw-w64/patches/gcc-4.7-20130209-static-plugin.patch b/binary/mingw-w64/patches/gcc-4.7-20130209-static-plugin.patch new file mode 100644 index 0000000..786a354 --- /dev/null +++ b/binary/mingw-w64/patches/gcc-4.7-20130209-static-plugin.patch @@ -0,0 +1,142 @@ +diff -ru gcc-4.7-20130209/gcc/config.in gcc/gcc/config.in +--- gcc-4.7-20130209/gcc/config.in 2013-02-10 00:52:59.000000000 +0200 ++++ gcc/gcc/config.in 2013-05-27 15:42:33.000000000 +0200 +@@ -143,6 +143,10 @@ + #undef ENABLE_PLUGIN + #endif + ++/* Define to enable static plugin support. */ ++#ifndef USED_FOR_TARGET ++#undef ENABLE_STATIC_PLUGIN ++#endif + + /* Define if you want all operations on RTL (the basic data structure of the + optimizer and back end) to be checked for dynamic type safety at runtime. +diff -ru gcc-4.7-20130209/gcc/configure.ac gcc/gcc/configure.ac +--- gcc-4.7-20130209/gcc/configure.ac 2013-02-06 17:23:55.000000000 +0200 ++++ gcc/gcc/configure.ac 2013-05-27 15:42:45.000000000 +0200 +@@ -5224,6 +5224,14 @@ + AC_DEFINE(ENABLE_PLUGIN, 1, [Define to enable plugin support.]) + fi + ++AC_ARG_ENABLE(static-plugin, ++[ --enable-static-plugin enable static plugin support], ++enable_static_plugin=$enableval, ++enable_static_plugin==no) ++ ++if test x"$enable_static_plugin" = x"yes"; then ++ AC_DEFINE(ENABLE_STATIC_PLUGIN, 1, [Define to enable static plugin support.]) ++fi + + AC_ARG_ENABLE(libquadmath-support, + [AS_HELP_STRING([--disable-libquadmath-support], +diff -ru gcc-4.7-20130209/gcc/cp/Make-lang.in gcc/gcc/cp/Make-lang.in +--- gcc-4.7-20130209/gcc/cp/Make-lang.in 2011-11-09 19:53:53.000000000 +0200 ++++ gcc/gcc/cp/Make-lang.in 2013-05-27 15:42:32.000000000 +0200 +@@ -103,7 +103,8 @@ + + cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ +- $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) ++ $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(STATIC_PLUGIN_LIBS) \ ++ $(LIBS) $(BACKENDLIBS) + + ifeq ($(ENABLE_MAINTAINER_RULES), true) + # Special build rule. This is a maintainer rule, that is only +diff -ru gcc-4.7-20130209/gcc/opts-global.c gcc/gcc/opts-global.c +--- gcc-4.7-20130209/gcc/opts-global.c 2011-11-03 16:46:26.000000000 +0200 ++++ gcc/gcc/opts-global.c 2013-05-27 15:42:45.000000000 +0200 +@@ -365,7 +365,7 @@ + break; + + case OPT_fplugin_: +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + add_new_plugin (opt->arg); + #else + error ("plugin support is disabled; configure with --enable-plugin"); +@@ -373,7 +373,7 @@ + break; + + case OPT_fplugin_arg_: +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + parse_plugin_arg_opt (opt->arg); + #else + error ("plugin support is disabled; configure with --enable-plugin"); +diff -ru gcc-4.7-20130209/gcc/plugin.c gcc/gcc/plugin.c +--- gcc-4.7-20130209/gcc/plugin.c 2011-10-19 15:20:22.000000000 +0200 ++++ gcc/gcc/plugin.c 2013-05-27 15:42:45.000000000 +0200 +@@ -31,7 +31,7 @@ + #include "timevar.h" + #include "ggc.h" + +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + #include "plugin-version.h" + #endif + +@@ -132,6 +132,7 @@ + + flag_plugin_added = true; + ++#ifdef ENABLE_PLUGIN + /* Replace short names by their full path when relevant. */ + name_is_short = !IS_ABSOLUTE_PATH (plugin_name); + for (pc = plugin_name; name_is_short && *pc; pc++) +@@ -153,6 +154,7 @@ + plugin_name, base_name); + } + else ++#endif + base_name = get_plugin_base_name (plugin_name); + + /* If this is the first -fplugin= option we encounter, create +@@ -619,6 +621,26 @@ + return 1; + } + ++#elif defined(ENABLE_STATIC_PLUGIN) ++ ++extern int ++plugin_init (struct plugin_name_args*, struct plugin_gcc_version*); ++ ++static int ++init_one_plugin (void **slot, void * ARG_UNUSED (info)) ++{ ++ struct plugin_name_args *plugin = (struct plugin_name_args *) *slot; ++ ++ /* Call the plugin-provided initialization routine with the arguments. */ ++ if (plugin_init (plugin, &gcc_version)) ++ { ++ error ("Fail to initialize plugin %s", plugin->full_name); ++ htab_remove_elt (plugin_name_args_tab, plugin->base_name); ++ XDELETE (plugin); ++ } ++ return 1; ++} ++ + #endif /* ENABLE_PLUGIN */ + + /* Main plugin initialization function. Called from compile_file() in +@@ -633,7 +655,7 @@ + + timevar_push (TV_PLUGIN_INIT); + +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + /* Traverse and initialize each plugin specified in the command-line. */ + htab_traverse_noresize (plugin_name_args_tab, init_one_plugin, NULL); + #endif +diff -ru gcc-4.7-20130209/gcc/plugin.h gcc/gcc/plugin.h +--- gcc-4.7-20130209/gcc/plugin.h 2010-10-05 16:28:39.000000000 +0200 ++++ gcc/gcc/plugin.h 2013-05-27 15:42:33.000000000 +0200 +@@ -52,7 +52,7 @@ + invoke_plugin_callbacks (int event ATTRIBUTE_UNUSED, + void *gcc_data ATTRIBUTE_UNUSED) + { +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + /* True iff at least one plugin has been added. */ + if (flag_plugin_added) + return invoke_plugin_callbacks_full (event, gcc_data); diff --git a/binary/mingw-w64/patches/gcc-4.9-20150204-cross.patch b/binary/mingw-w64/patches/gcc-4.9-20150204-cross.patch new file mode 100644 index 0000000..497aa9b --- /dev/null +++ b/binary/mingw-w64/patches/gcc-4.9-20150204-cross.patch @@ -0,0 +1,25 @@ +diff -ru gcc-4.9-20150204/gcc/config/i386/mingw32.h gcc-cross/gcc/config/i386/mingw32.h +--- gcc-4.9-20150204/gcc/config/i386/mingw32.h 2014-04-23 11:46:13.000000000 +0200 ++++ gcc-cross/gcc/config/i386/mingw32.h 2015-02-09 08:27:15.531922502 +0200 +@@ -162,7 +162,7 @@ + /* For native mingw-version we need to take care that NATIVE_SYSTEM_HEADER_DIR + macro contains POSIX-style path. See bug 52947. */ + #undef NATIVE_SYSTEM_HEADER_DIR +-#define NATIVE_SYSTEM_HEADER_DIR "/mingw/include" ++#define NATIVE_SYSTEM_HEADER_DIR "/i686-w64-mingw32/include" + + /* Output STRING, a string representing a filename, to FILE. + We canonicalize it to be in Unix format (backslashes are replaced +diff -ru gcc-4.9-20150204/gcc/config.gcc gcc-cross/gcc/config.gcc +--- gcc-4.9-20150204/gcc/config.gcc 2014-11-07 18:40:16.000000000 +0200 ++++ gcc-cross/gcc/config.gcc 2015-02-09 08:28:53.155923698 +0200 +@@ -1666,7 +1666,7 @@ + tmake_file="${tmake_file} i386/t-mingw-w32" + ;; + esac +- native_system_header_dir=/mingw/include ++ native_system_header_dir=/i686-w64-mingw32/include + target_gtfiles="\$(srcdir)/config/i386/winnt.c" + extra_options="${extra_options} i386/cygming.opt i386/mingw.opt" + case ${target} in + diff --git a/binary/mingw-w64/patches/gcc-4.9-20150204-mingw.patch b/binary/mingw-w64/patches/gcc-4.9-20150204-mingw.patch new file mode 100644 index 0000000..9c10bae --- /dev/null +++ b/binary/mingw-w64/patches/gcc-4.9-20150204-mingw.patch @@ -0,0 +1,24 @@ +diff -ru gcc-4.9-20150204/gcc/config/i386/mingw32.h gcc/gcc/config/i386/mingw32.h +--- gcc-4.9-20150204/gcc/config/i386/mingw32.h 2014-04-23 11:46:13.000000000 +0200 ++++ gcc/gcc/config/i386/mingw32.h 2015-02-09 15:37:33.864238829 +0200 +@@ -162,7 +162,7 @@ + /* For native mingw-version we need to take care that NATIVE_SYSTEM_HEADER_DIR + macro contains POSIX-style path. See bug 52947. */ + #undef NATIVE_SYSTEM_HEADER_DIR +-#define NATIVE_SYSTEM_HEADER_DIR "/mingw/include" ++#define NATIVE_SYSTEM_HEADER_DIR "/include" + + /* Output STRING, a string representing a filename, to FILE. + We canonicalize it to be in Unix format (backslashes are replaced +diff -ru gcc-4.9-20150204/gcc/config.gcc gcc/gcc/config.gcc +--- gcc-4.9-20150204/gcc/config.gcc 2014-11-07 18:40:16.000000000 +0200 ++++ gcc/gcc/config.gcc 2015-02-09 15:38:07.376239240 +0200 +@@ -1666,7 +1666,7 @@ + tmake_file="${tmake_file} i386/t-mingw-w32" + ;; + esac +- native_system_header_dir=/mingw/include ++ native_system_header_dir=/include + target_gtfiles="\$(srcdir)/config/i386/winnt.c" + extra_options="${extra_options} i386/cygming.opt i386/mingw.opt" + case ${target} in diff --git a/binary/mingw-w64/patches/gcc-4.9-20150204-static-plugin.patch b/binary/mingw-w64/patches/gcc-4.9-20150204-static-plugin.patch new file mode 100644 index 0000000..4230d5f --- /dev/null +++ b/binary/mingw-w64/patches/gcc-4.9-20150204-static-plugin.patch @@ -0,0 +1,150 @@ +diff -ru gcc-4.9-20150204/gcc/config.in gcc/gcc/config.in +--- gcc-4.9-20150204/gcc/config.in 2015-02-05 00:32:56.000000000 +0200 ++++ gcc/gcc/config.in 2015-02-08 19:58:45.215372260 +0200 +@@ -137,6 +137,10 @@ + #undef ENABLE_PLUGIN + #endif + ++/* Define to enable static plugin support. */ ++#ifndef USED_FOR_TARGET ++#undef ENABLE_STATIC_PLUGIN ++#endif + + /* Define if you want all operations on RTL (the basic data structure of the + optimizer and back end) to be checked for dynamic type safety at runtime. +diff -ru gcc-4.9-20150204/gcc/configure.ac gcc/gcc/configure.ac +--- gcc-4.9-20150204/gcc/configure.ac 2014-12-04 20:25:37.000000000 +0200 ++++ gcc/gcc/configure.ac 2015-02-08 19:58:45.219372260 +0200 +@@ -5519,6 +5519,14 @@ + fi + fi + ++AC_ARG_ENABLE(static-plugin, ++[ --enable-static-plugin enable static plugin support], ++enable_static_plugin=$enableval, ++enable_static_plugin==no) ++ ++if test x"$enable_static_plugin" = x"yes"; then ++ AC_DEFINE(ENABLE_STATIC_PLUGIN, 1, [Define to enable static plugin support.]) ++fi + + # Check for plugin support + AC_ARG_ENABLE(plugin, +diff -ru gcc-4.9-20150204/gcc/cp/Make-lang.in gcc/gcc/cp/Make-lang.in +--- gcc-4.9-20150204/gcc/cp/Make-lang.in 2014-04-15 10:04:17.000000000 +0200 ++++ gcc/gcc/cp/Make-lang.in 2015-02-08 20:01:21.479374174 +0200 +@@ -90,14 +90,14 @@ + + # compute checksum over all object files and the options + cc1plus-checksum.c : build/genchecksum$(build_exeext) checksum-options \ +- $(CXX_OBJS) $(BACKEND) $(LIBDEPS) ++ $(CXX_OBJS) $(BACKEND) $(LIBDEPS) + build/genchecksum$(build_exeext) $(CXX_OBJS) $(BACKEND) $(LIBDEPS) \ + checksum-options > cc1plus-checksum.c.tmp && \ + $(srcdir)/../move-if-change cc1plus-checksum.c.tmp cc1plus-checksum.c + + cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS) + +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ +- $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) ++ $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(STATIC_PLUGIN_LIBS) $(LIBS) $(BACKENDLIBS) + + ifeq ($(ENABLE_MAINTAINER_RULES), true) + # Special build rule. This is a maintainer rule, that is only +diff -ru gcc-4.9-20150204/gcc/opts-global.c gcc/gcc/opts-global.c +--- gcc-4.9-20150204/gcc/opts-global.c 2014-01-03 00:23:26.000000000 +0200 ++++ gcc/gcc/opts-global.c 2015-02-08 19:58:45.223372260 +0200 +@@ -381,7 +381,7 @@ + break; + + case OPT_fplugin_: +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + add_new_plugin (opt->arg); + #else + error ("plugin support is disabled; configure with --enable-plugin"); +@@ -389,7 +389,7 @@ + break; + + case OPT_fplugin_arg_: +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + parse_plugin_arg_opt (opt->arg); + #else + error ("plugin support is disabled; configure with --enable-plugin"); +diff -ru gcc-4.9-20150204/gcc/plugin.c gcc/gcc/plugin.c +--- gcc-4.9-20150204/gcc/plugin.c 2014-01-03 00:23:26.000000000 +0200 ++++ gcc/gcc/plugin.c 2015-02-09 12:40:04.956108359 +0200 +@@ -31,7 +31,7 @@ + #include "plugin.h" + #include "ggc.h" + +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + #include "plugin-version.h" + #endif + +@@ -159,6 +159,7 @@ + + flag_plugin_added = true; + ++#ifdef ENABLE_PLUGIN + /* Replace short names by their full path when relevant. */ + name_is_short = !IS_ABSOLUTE_PATH (plugin_name); + for (pc = plugin_name; name_is_short && *pc; pc++) +@@ -180,6 +181,7 @@ + plugin_name, base_name); + } + else ++#endif + base_name = get_plugin_base_name (plugin_name); + + /* If this is the first -fplugin= option we encounter, create +@@ -634,6 +636,26 @@ + return 1; + } + ++#elif defined(ENABLE_STATIC_PLUGIN) ++ ++extern "C" int ++plugin_init (struct plugin_name_args*, struct plugin_gcc_version*); ++ ++static int ++init_one_plugin (void **slot, void * ARG_UNUSED (info)) ++{ ++ struct plugin_name_args *plugin = (struct plugin_name_args *) *slot; ++ ++ /* Call the plugin-provided initialization routine with the arguments. */ ++ if (plugin_init (plugin, &gcc_version)) ++ { ++ error ("Fail to initialize plugin %s", plugin->full_name); ++ htab_remove_elt (plugin_name_args_tab, plugin->base_name); ++ XDELETE (plugin); ++ } ++ return 1; ++} ++ + #endif /* ENABLE_PLUGIN */ + + /* Main plugin initialization function. Called from compile_file() in +@@ -648,7 +670,7 @@ + + timevar_push (TV_PLUGIN_INIT); + +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + /* Traverse and initialize each plugin specified in the command-line. */ + htab_traverse_noresize (plugin_name_args_tab, init_one_plugin, NULL); + #endif +diff -ru gcc-4.9-20150204/gcc/plugin.h gcc/gcc/plugin.h +--- gcc-4.9-20150204/gcc/plugin.h 2014-01-03 00:23:26.000000000 +0200 ++++ gcc/gcc/plugin.h 2015-02-08 19:58:45.227372260 +0200 +@@ -53,7 +53,7 @@ + invoke_plugin_callbacks (int event ATTRIBUTE_UNUSED, + void *gcc_data ATTRIBUTE_UNUSED) + { +-#ifdef ENABLE_PLUGIN ++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN) + /* True iff at least one plugin has been added. */ + if (flag_plugin_added) + return invoke_plugin_callbacks_full (event, gcc_data); + diff --git a/binary/mingw-w64/pthread-cross-configure b/binary/mingw-w64/pthread-cross-configure index d858097..dc67088 100755 --- a/binary/mingw-w64/pthread-cross-configure +++ b/binary/mingw-w64/pthread-cross-configure @@ -2,7 +2,7 @@ # # -../winpthreads/configure \ +../../mingw-w64/mingw-w64-libraries/winpthreads/configure \ --host i686-w64-mingw32 \ --prefix=/home/boris/work/odb/build/mingw-w64/cross/mingw/i686-w64-mingw32 \ --with-sysroot=/home/boris/work/odb/build/mingw-w64/cross/mingw \ diff --git a/binary/mingw-w64/pthread-cross-configure-64 b/binary/mingw-w64/pthread-cross-configure-64 new file mode 100755 index 0000000..dc9f2d5 --- /dev/null +++ b/binary/mingw-w64/pthread-cross-configure-64 @@ -0,0 +1,10 @@ +#! /bin/sh + +# +# +../../mingw-w64/mingw-w64-libraries/winpthreads/configure \ +--host i686-w64-mingw32 \ +--prefix=/home/boris/work/odb/build/mingw-w64/cross/mingw/i686-w64-mingw32 \ +--libdir=/home/boris/work/odb/build/mingw-w64/cross/mingw/i686-w64-mingw32/lib64 \ +--with-sysroot=/home/boris/work/odb/build/mingw-w64/cross/mingw \ +CFLAGS="-O2 -m64" CXXFLAGS="-O2 -m64" LDFLAGS=-m64 RCFLAGS="-F pe-x86-64" diff --git a/binary/mingw-w64/rt-cross-configure b/binary/mingw-w64/rt-cross-configure index 0822c0e..0cf7ece 100755 --- a/binary/mingw-w64/rt-cross-configure +++ b/binary/mingw-w64/rt-cross-configure @@ -4,7 +4,9 @@ # ../mingw-w64/configure \ --host i686-w64-mingw32 \ ---prefix=/home/boris/work/odb/build/mingw-w64/cross/mingw \ +--prefix=/home/boris/work/odb/build/mingw-w64/cross/mingw/i686-w64-mingw32 \ --with-sysroot=/home/boris/work/odb/build/mingw-w64/cross/mingw \ --enable-wildcard \ +--enable-lib32 \ +--enable-lib64 \ CFLAGS=-O2 CXXFLAGS=-O2 diff --git a/binary/mingw-w64/rt-headers-cross-configure b/binary/mingw-w64/rt-headers-cross-configure index b5ea2a0..66d4026 100755 --- a/binary/mingw-w64/rt-headers-cross-configure +++ b/binary/mingw-w64/rt-headers-cross-configure @@ -4,6 +4,5 @@ # ../mingw-w64/mingw-w64-headers/configure \ --host i686-w64-mingw32 \ ---prefix=/home/boris/work/odb/build/mingw-w64/cross/mingw \ ---enable-wildcard \ +--prefix=/home/boris/work/odb/build/mingw-w64/cross/mingw/i686-w64-mingw32 \ CFLAGS=-O2 CXXFLAGS=-O2 -- cgit v1.1