summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-02-23 11:57:17 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-02-23 11:57:17 +0200
commitafc81e5cb09219770a8a5b8cd2855b45ece0a42a (patch)
tree66b7db87067ce3190fd95fe831bc72d80c50df89
parent8fc1fc844a9695fb0d1d5d3c13393d4709ce7592 (diff)
Add build scripts for Windows binary
-rwxr-xr-xbinary/mingw/binutils-configure11
-rwxr-xr-xbinary/mingw/build-dist252
-rw-r--r--binary/mingw/gcc-4.5.1-mingw-cross.patch46
-rw-r--r--binary/mingw/gcc-4.5.1-static-plugin.patch130
-rwxr-xr-xbinary/mingw/gcc-configure28
-rwxr-xr-xbinary/mingw/libcutl-configure9
-rwxr-xr-xbinary/mingw/libodb-boost-configure10
-rwxr-xr-xbinary/mingw/libodb-configure9
-rwxr-xr-xbinary/mingw/odb-configure14
-rw-r--r--binary/mingw/plugin-stub.c4
10 files changed, 513 insertions, 0 deletions
diff --git a/binary/mingw/binutils-configure b/binary/mingw/binutils-configure
new file mode 100755
index 0000000..b50606b
--- /dev/null
+++ b/binary/mingw/binutils-configure
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+../binutils-2.20.51/configure \
+--disable-nls \
+--disable-shared \
+--disable-debug \
+--host i686-mingw32 \
+--target i686-mingw32 \
+--with-sysroot=/mingw \
+--prefix=/mingw \
+CFLAGS=-O2 LDFLAGS=-s
diff --git a/binary/mingw/build-dist b/binary/mingw/build-dist
new file mode 100755
index 0000000..c5d9968
--- /dev/null
+++ b/binary/mingw/build-dist
@@ -0,0 +1,252 @@
+#! /usr/bin/env bash
+
+# Create ODB compiler Windows distribution.
+#
+# -rebuild
+# -pack get the source distributions from /tmp/pack/
+#
+trap 'exit 1' ERR
+
+function error ()
+{
+ echo "$*" 1>&2
+}
+
+rebuild=n
+pack=n
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -rebuild)
+ rebuild=y
+ shift
+ ;;
+ -pack)
+ pack=y
+ rebuild=y
+ shift
+ ;;
+ *)
+ error "unknown option: $1"
+ exit 1
+ ;;
+ esac
+done
+
+
+out_root=`pwd`
+version=`cat $HOME/work/odb/odb/version`
+install_root="/tmp/odb-$version-i686-windows"
+
+if [ $pack = n ]; then
+ src_root=$HOME/work
+else
+ src_root=/tmp
+fi
+
+export PATH=$out_root/cross/mingw/bin:$PATH
+
+# Clean everything up if we are rebuilding.
+#
+if [ $rebuild = y ]; then
+ rm -rf /mingw/*
+ rm -rf libplugin-stub
+ rm -rf gcc-build/*
+ rm -rf libcutl
+ rm -rf libodb
+ rm -rf libodb-boost
+ rm -rf odb
+ rm -rf odb-build/*
+ rm -rf $install_root
+
+ cp -r mingw-rt/* /mingw/
+ # make -C binutils-build install
+ cp -r mingw-binutils/* /mingw/
+fi
+
+if [ $pack = n ]; then
+ rm -f /tmp/odb-$version-i686-windows.zip
+else
+ rm -f /tmp/pack/odb-$version-i686-windows.zip
+fi
+
+# Build libplugin-stub
+#
+if [ $rebuild = y ]; then
+ mkdir -p libplugin-stub
+ cd libplugin-stub
+ i686-mingw32-gcc -O2 -c ../plugin-stub.c
+ i686-mingw32-ar cr libplugin-stub.a plugin-stub.o
+ i686-mingw32-ranlib libplugin-stub.a
+ cd ..
+
+ mkdir -p gcc-build/gcc
+ cp libplugin-stub/libplugin-stub.a gcc-build/gcc/
+fi
+
+# Build libodb
+#
+if [ $pack = n ]; then
+ make -C $src_root/odb/libodb dist dist_prefix=$out_root/libodb
+
+ if [ $rebuild = y ]; then
+ cd libodb
+ ./bootstrap
+ cd ..
+ fi
+else
+ tar xfz $src_root/pack/libodb-$version.tar.gz
+ mv libodb-$version libodb
+fi
+
+cd libodb
+
+if [ $rebuild = y ]; then
+ ../libodb-configure
+fi
+
+make
+cd odb
+make install-data
+cd ../..
+
+# Build libodb-boost
+#
+if [ $pack = n ]; then
+ make -C $src_root/odb/libodb-boost dist dist_prefix=$out_root/libodb-boost
+
+ if [ $rebuild = y ]; then
+ cd libodb-boost
+ ./bootstrap
+ cd ..
+ fi
+else
+ tar xfz $src_root/pack/libodb-boost-$version.tar.gz
+ mv libodb-boost-$version libodb-boost
+fi
+
+cd libodb-boost
+
+if [ $rebuild = y ]; then
+ ../libodb-boost-configure
+fi
+
+make
+make install-data
+cd ..
+
+# Build libcutl
+#
+if [ $pack = n ]; then
+ make -C $src_root/cutl/libcutl dist dist_prefix=$out_root/libcutl
+
+ if [ $rebuild = y ]; then
+ cd libcutl
+ ./bootstrap
+ cd ..
+ fi
+else
+ cutl_version=`cat $HOME/work/cutl/libcutl/version`
+ tar xfz $src_root/libcutl-$cutl_version.tar.gz
+ mv libcutl-$cutl_version libcutl
+fi
+
+cd libcutl
+
+if [ $rebuild = y ]; then
+ ../libcutl-configure
+fi
+
+make
+cd ..
+
+# Build odb
+#
+if [ $pack = n ]; then
+ make -C $src_root/odb/odb dist dist_prefix=$out_root/odb
+
+ if [ $rebuild = y ]; then
+ cd odb
+ ./bootstrap
+ cd ..
+ fi
+else
+ tar xfz $src_root/pack/odb-$version.tar.gz
+ mv odb-$version odb
+fi
+
+mkdir -p odb-build
+cd odb-build
+
+if [ $rebuild = y ]; then
+ ../odb-configure $version
+fi
+
+make
+make install-strip
+rm -f $install_root/bin/odb.a
+cd ..
+
+# Build gcc
+#
+mkdir -p gcc-build
+cd gcc-build
+
+if [ $rebuild = y ]; then
+ ../gcc-configure
+else
+ rm -f gcc/cc1plus.exe gcc/cc1plus-dummy.exe
+fi
+
+make STATIC_PLUGIN_LIBS="$out_root/odb-build/odb/.libs/odb.a $out_root/libcutl/cutl/.libs/libcutl.a -lstdc++ -static-libgcc"
+make install
+make -C i686-mingw32/libstdc++-v3 install-strip
+cd ..
+
+# Copy /mingw over to installation
+#
+cp -r /mingw $install_root/
+
+# Move doc and man out of share/
+#
+rm -rf $install_root/doc $install_root/man
+mv $install_root/share/man $install_root/
+mv $install_root/share/doc/odb $install_root/doc
+rm -r $install_root/share
+
+# Clean some things up.
+#
+rm -f $install_root/mingw/lib/libbfd.*
+rm -f $install_root/mingw/include/bfd*.h
+rm -f $install_root/mingw/lib/libopcodes.*
+rm -f $install_root/mingw/lib/libiberty.a
+rm -f `find $install_root -name '*.la'`
+
+# Copy msys over to installation.
+#
+cp -r msys/* $install_root/mingw/
+
+# Copy the default options file.
+#
+mkdir -p $install_root/etc/odb
+cp -L default.options $install_root/etc/odb/
+todos $install_root/etc/odb/default.options
+
+# Copy manifest.
+#
+cp -L manifest.txt $install_root/mingw/
+todos $install_root/mingw/manifest.txt
+
+# Copy README.
+#
+cp -L README $install_root/README
+todos $install_root/README
+
+# Zip it up.
+#
+cd /tmp
+zip -r odb-$version-i686-windows.zip odb-$version-i686-windows
+if [ $pack = y ]; then
+ mv odb-$version-i686-windows.zip pack/
+fi
+cd $out_root
diff --git a/binary/mingw/gcc-4.5.1-mingw-cross.patch b/binary/mingw/gcc-4.5.1-mingw-cross.patch
new file mode 100644
index 0000000..d63f04b
--- /dev/null
+++ b/binary/mingw/gcc-4.5.1-mingw-cross.patch
@@ -0,0 +1,46 @@
+diff -ru gcc-4.5.1.orig/gcc/config/i386/mingw32.h gcc-4.5.1/gcc/config/i386/mingw32.h
+--- gcc-4.5.1.orig/gcc/config/i386/mingw32.h 2010-04-27 22:14:19.000000000 +0200
++++ gcc-4.5.1/gcc/config/i386/mingw32.h 2010-09-01 16:56:49.000000000 +0200
+@@ -66,7 +66,7 @@
+ /* Override the standard choice of /usr/include as the default prefix
+ to try when searching for header files. */
+ #undef STANDARD_INCLUDE_DIR
+-#define STANDARD_INCLUDE_DIR "/mingw/include"
++#define STANDARD_INCLUDE_DIR "/include"
+ #undef STANDARD_INCLUDE_COMPONENT
+ #define STANDARD_INCLUDE_COMPONENT "MINGW"
+
+diff -ru gcc-4.5.1.orig/gcc/config/i386/t-mingw32 gcc-4.5.1/gcc/config/i386/t-mingw32
+--- gcc-4.5.1.orig/gcc/config/i386/t-mingw32 2008-09-04 10:25:25.000000000 +0200
++++ gcc-4.5.1/gcc/config/i386/t-mingw32 2010-09-01 16:26:49.000000000 +0200
+@@ -1,5 +1,5 @@
+ # Match SYSTEM_INCLUDE_DIR
+-NATIVE_SYSTEM_HEADER_DIR = /mingw/include
++NATIVE_SYSTEM_HEADER_DIR = /include
+
+ # MinGW-specific parts of LIB_SPEC
+ SHLIB_LC = -lmingw32 -lmingwex -lmoldname -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32
+diff -ru gcc-4.5.1.orig/libstdc++-v3/include/Makefile.am gcc-4.5.1/libstdc++-v3/include/Makefile.am
+--- gcc-4.5.1.orig/libstdc++-v3/include/Makefile.am 2010-02-10 21:14:33.000000000 +0200
++++ gcc-4.5.1/libstdc++-v3/include/Makefile.am 2010-09-02 10:19:37.000000000 +0200
+@@ -893,7 +893,7 @@
+ ${pch1_output_builddir} ${pch2_output_builddir} ${pch3_output_builddir}
+ pch_output_anchors = \
+ ${pch1_output_anchor} ${pch2_output_anchor} ${pch3_output_anchor}
+-PCHFLAGS=-x c++-header $(CXXFLAGS)
++PCHFLAGS=-nostdinc++ -x c++-header $(CXXFLAGS)
+ if GLIBCXX_BUILD_PCH
+ pch_build = ${pch_output}
+ else
+diff -ru gcc-4.5.1.orig/libstdc++-v3/include/Makefile.in gcc-4.5.1/libstdc++-v3/include/Makefile.in
+--- gcc-4.5.1.orig/libstdc++-v3/include/Makefile.in 2010-04-02 20:18:06.000000000 +0200
++++ gcc-4.5.1/libstdc++-v3/include/Makefile.in 2010-09-02 10:26:05.000000000 +0200
+@@ -1119,7 +1119,7 @@
+ pch_output_anchors = \
+ ${pch1_output_anchor} ${pch2_output_anchor} ${pch3_output_anchor}
+
+-PCHFLAGS = -x c++-header $(CXXFLAGS)
++PCHFLAGS = -nostdinc++ -x c++-header $(CXXFLAGS)
+ @GLIBCXX_BUILD_PCH_FALSE@pch_build =
+ @GLIBCXX_BUILD_PCH_TRUE@pch_build = ${pch_output}
+
diff --git a/binary/mingw/gcc-4.5.1-static-plugin.patch b/binary/mingw/gcc-4.5.1-static-plugin.patch
new file mode 100644
index 0000000..9e5ee7f
--- /dev/null
+++ b/binary/mingw/gcc-4.5.1-static-plugin.patch
@@ -0,0 +1,130 @@
+diff -rubB gcc-4.5.1.orig/gcc/config.in gcc-4.5.1/gcc/config.in
+--- gcc-4.5.1.orig/gcc/config.in 2010-07-31 11:34:58.000000000 +0200
++++ gcc-4.5.1/gcc/config.in 2010-09-02 11:44:15.000000000 +0200
+@@ -131,6 +131,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 -rubB gcc-4.5.1.orig/gcc/configure.ac gcc-4.5.1/gcc/configure.ac
+--- gcc-4.5.1.orig/gcc/configure.ac 2010-06-14 12:38:18.000000000 +0200
++++ gcc-4.5.1/gcc/configure.ac 2010-09-02 11:43:40.000000000 +0200
+@@ -4600,6 +4600,15 @@
+ 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
++
+ # Configure the subdirectories
+ # AC_CONFIG_SUBDIRS($subdirs)
+
+diff -rubB gcc-4.5.1.orig/gcc/cp/Make-lang.in gcc-4.5.1/gcc/cp/Make-lang.in
+--- gcc-4.5.1.orig/gcc/cp/Make-lang.in 2010-04-02 21:54:46.000000000 +0200
++++ gcc-4.5.1/gcc/cp/Make-lang.in 2010-09-02 12:37:02.000000000 +0200
+@@ -94,7 +94,8 @@
+
+ cc1plus-dummy$(exeext): $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS)
+ $(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+- $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
++ $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(STATIC_PLUGIN_LIBS) \
++ $(LIBS) $(BACKENDLIBS)
+
+ cc1plus-checksum.c : cc1plus-dummy$(exeext) build/genchecksum$(build_exeext)
+ build/genchecksum$(build_exeext) cc1plus-dummy$(exeext) > $@
+@@ -103,7 +104,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)
+
+ # Special build rules.
+ $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf
+diff -rubB gcc-4.5.1.orig/gcc/opts.c gcc-4.5.1/gcc/opts.c
+--- gcc-4.5.1.orig/gcc/opts.c 2010-05-17 12:13:28.000000000 +0200
++++ gcc-4.5.1/gcc/opts.c 2010-09-02 11:31:24.000000000 +0200
+@@ -1829,7 +1829,7 @@
+ break;
+
+ case OPT_fplugin_:
+-#ifdef ENABLE_PLUGIN
++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN)
+ add_new_plugin (arg);
+ #else
+ error ("Plugin support is disabled. Configure with --enable-plugin.");
+@@ -1837,7 +1837,7 @@
+ break;
+
+ case OPT_fplugin_arg_:
+-#ifdef ENABLE_PLUGIN
++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN)
+ parse_plugin_arg_opt (arg);
+ #else
+ error ("Plugin support is disabled. Configure with --enable-plugin.");
+diff -rubB gcc-4.5.1.orig/gcc/plugin.c gcc-4.5.1/gcc/plugin.c
+--- gcc-4.5.1.orig/gcc/plugin.c 2009-12-21 22:37:49.000000000 +0200
++++ gcc-4.5.1/gcc/plugin.c 2010-09-02 11:36:53.000000000 +0200
+@@ -40,7 +40,7 @@
+ #include "timevar.h"
+ #include "ggc.h"
+
+-#ifdef ENABLE_PLUGIN
++#if defined(ENABLE_PLUGIN) || defined(ENABLE_STATIC_PLUGIN)
+ #include "plugin-version.h"
+ #endif
+
+@@ -602,8 +602,31 @@
+ 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
+ toplev.c. */
+
+@@ -616,7 +639,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 --git a/binary/mingw/gcc-configure b/binary/mingw/gcc-configure
new file mode 100755
index 0000000..548ca30
--- /dev/null
+++ b/binary/mingw/gcc-configure
@@ -0,0 +1,28 @@
+#! /bin/sh
+
+../gcc-4.5.1/configure \
+--with-pkgversion="ODB special" \
+--with-bugurl="http://www.codesynthesis.com/products/odb/" \
+--enable-threads=win32 \
+--enable-version-specific-runtime-libs \
+--enable-languages=c,c++ \
+--with-dwarf2 \
+--enable-shared \
+--disable-libssp \
+--disable-libgomp \
+--disable-sjlj-exceptions \
+--disable-win32-registry \
+--disable-nls \
+--disable-multilib \
+--disable-libstdcxx-pch \
+--host i686-mingw32 \
+--target i686-mingw32 \
+--with-sysroot=/mingw \
+--prefix=/mingw \
+--enable-static-plugin \
+--with-stage1-libs=libplugin-stub.a \
+CFLAGS=-O2 CXXFLAGS=-O2 LDFLAGS=-s
+
+# --disable-shared
+
+#echo 'make STATIC_PLUGIN_LIBS="`pwd`/../odb-build/odb/.libs/odb.a `pwd`/../libcutl/cutl/.libs/libcutl.a -lstdc++"'
diff --git a/binary/mingw/libcutl-configure b/binary/mingw/libcutl-configure
new file mode 100755
index 0000000..e8202da
--- /dev/null
+++ b/binary/mingw/libcutl-configure
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+./configure \
+--disable-shared \
+--enable-static \
+--host i686-mingw32 \
+--target i686-mingw32 \
+--prefix=/mingw \
+CXXFLAGS="-O2 -W -Wall"
diff --git a/binary/mingw/libodb-boost-configure b/binary/mingw/libodb-boost-configure
new file mode 100755
index 0000000..ea8dd72
--- /dev/null
+++ b/binary/mingw/libodb-boost-configure
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+./configure \
+--disable-shared \
+--enable-static \
+--host i686-mingw32 \
+--target i686-mingw32 \
+--prefix=/mingw \
+--with-libodb=../libodb \
+CXXFLAGS="-O2 -W -Wall"
diff --git a/binary/mingw/libodb-configure b/binary/mingw/libodb-configure
new file mode 100755
index 0000000..e8202da
--- /dev/null
+++ b/binary/mingw/libodb-configure
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+./configure \
+--disable-shared \
+--enable-static \
+--host i686-mingw32 \
+--target i686-mingw32 \
+--prefix=/mingw \
+CXXFLAGS="-O2 -W -Wall"
diff --git a/binary/mingw/odb-configure b/binary/mingw/odb-configure
new file mode 100755
index 0000000..337c98f
--- /dev/null
+++ b/binary/mingw/odb-configure
@@ -0,0 +1,14 @@
+#! /bin/sh
+
+../odb/configure \
+--disable-shared \
+--enable-static \
+--host i686-mingw32 \
+--target i686-mingw32 \
+--prefix=/tmp/odb-$1-i686-windows \
+--with-libcutl=../libcutl \
+--with-gxx-name='..\\mingw\\bin\\g++.exe' \
+--with-options-file='..\\etc\\odb\\default.options' \
+CPPFLAGS=-I`pwd`/../cross/mingw/include/plugin \
+CXXFLAGS="-O2 -W -Wall" \
+LDFLAGS=-static-libgcc
diff --git a/binary/mingw/plugin-stub.c b/binary/mingw/plugin-stub.c
new file mode 100644
index 0000000..cb4287d
--- /dev/null
+++ b/binary/mingw/plugin-stub.c
@@ -0,0 +1,4 @@
+int plugin_init (void* args, void* version)
+{
+ return 1;
+}