diff options
Diffstat (limited to 'build.sh')
| -rw-r--r-- | build.sh | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..ee1df94 --- /dev/null +++ b/build.sh @@ -0,0 +1,158 @@ +#!/usr/bin/env bash + +set -ex + +X_ROOT=/tmp/mingw +X_DOWNLOADS=$X_ROOT/downloads +X_BUILD=$X_ROOT/build +X_DEST=$X_ROOT/dest +X_CROSS=$X_ROOT/cross +# Use all processors and collect output nicely +X_MAKE_OPTS="-j$(nproc) -O" +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +# A helper function to setup common directory structure for each package. +# +# Source archives are downloaded to $X_DOWNLOADS. The archives are extracted +# to $X_BUILD/PKG_NAME so that sources are usually available at +# $X_BUILD/PKG_NAME/PKG_NAME-PKG_VERSION. A build directory is created at +# $X_BUILD/PKG_NAME/bld. +function prepare { + local PKG_NAME=$1 + local PKG_VERSION=$2 + local PKG_SOURCE=$3 + local PKG_FILENAME=$4 + rm -rf $X_BUILD/$PKG_NAME + mkdir -pv $X_DOWNLOADS $X_BUILD/$PKG_NAME + cd $X_DOWNLOADS + if [ ! -f $PKG_FILENAME ]; then + wget $PKG_SOURCE + fi + cd $X_BUILD/$PKG_NAME + tar xf $X_DOWNLOADS/$PKG_FILENAME + mkdir bld +} + +### BUILD THE CROSS COMPILER + +prepare binutils 2.36.1 https://ftpmirror.gnu.org/binutils/binutils-2.36.1.tar.xz binutils-2.36.1.tar.xz +cd bld +../binutils-2.36.1/configure --target=x86_64-w64-mingw32 --prefix=$X_CROSS --with-sysroot=$X_CROSS \ + --disable-multilib --disable-nls --disable-shared +make $X_MAKE_OPTS all "CFLAGS=-O3" "LDFLAGS=-s" +make $X_MAKE_OPTS install + +export PATH=$PATH:$X_CROSS/bin + +prepare mingw-w64 9.0.0 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v9.0.0.tar.bz2 mingw-w64-v9.0.0.tar.bz2 +cd bld +# We need to install headers first, so use --without-crt here. +../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --prefix=$X_CROSS/x86_64-w64-mingw32 \ + --with-sysroot=$X_CROSS/x86_64-w64-mingw32 --disable-lib32 --enable-wildcard --disable-shared --without-crt +cd mingw-w64-headers +make $X_MAKE_OPTS install + +[ -e $X_CROSS/mingw ] || ln -sv $X_CROSS/x86_64-w64-mingw32 $X_CROSS/mingw +mkdir -pv $X_CROSS/x86_64-w64-mingw32/lib +[ -e $X_CROSS/x86_64-w64-mingw32/lib64 ] || ln -sv $X_CROSS/x86_64-w64-mingw32/lib $X_CROSS/x86_64-w64-mingw32/lib64 + +prepare gcc 11.2.0 https://ftpmirror.gnu.org/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz gcc-11.2.0.tar.xz +(cd gcc-11.2.0 && ./contrib/download_prerequisites --directory=$X_DOWNLOADS) +cd bld +../gcc-11.2.0/configure --enable-languages=c,c++ --target=x86_64-w64-mingw32 --disable-multilib \ + --prefix=$X_CROSS --with-sysroot=$X_CROSS --disable-libstdcxx-pch --disable-libstdcxx-verbose \ + --disable-nls --disable-shared --disable-win32-registry --enable-threads=posix --enable-libgomp +make $X_MAKE_OPTS all-gcc +make $X_MAKE_OPTS install-gcc + +# Now we can build the rest of mingw-w64 (crt + winpthreads). +cd $X_BUILD/mingw-w64/bld +../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --prefix=$X_CROSS/x86_64-w64-mingw32 \ + --with-sysroot=$X_CROSS/x86_64-w64-mingw32 --disable-lib32 --enable-wildcard \ + --disable-shared --with-libraries=winpthreads +make $X_MAKE_OPTS "CFLAGS=-s -O3" +make $X_MAKE_OPTS install + +cd $X_BUILD/gcc/bld +make $X_MAKE_OPTS "CFLAGS=-g0 -O3" "CXXFLAGS=-g0 -O3" \ + "CFLAGS_FOR_TARGET=-g0 -O3" "CXXFLAGS_FOR_TARGET=-g0 -O3" \ + "BOOT_CFLAGS=-g0 -O3" "BOOT_CXXFLAGS=-g0 -O3" +make $X_MAKE_OPTS install + +# These symlinks are not needed anymore. +rm $X_CROSS/mingw +rm $X_CROSS/x86_64-w64-mingw32/lib64 + +# ### BUILD THE NATIVE COMPILER + +prepare binutils 2.36.1 https://ftpmirror.gnu.org/binutils/binutils-2.36.1.tar.xz binutils-2.36.1.tar.xz +cd bld +../binutils-2.36.1/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=$X_DEST \ + --with-sysroot=$X_DEST --disable-multilib --disable-nls --disable-shared +make $X_MAKE_OPTS all "CFLAGS=-O3" "LDFLAGS=-s" +make $X_MAKE_OPTS install + +prepare gcc 11.2.0 https://ftpmirror.gnu.org/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz gcc-11.2.0.tar.xz +( + cd gcc-11.2.0 + ./contrib/download_prerequisites --directory=$X_DOWNLOADS + mkdir -p winsup/mingw + cd winsup/mingw + # Note that this needs to point to the cross compilers include directory + [ -e include ] || ln -s $X_CROSS/x86_64-w64-mingw32/include include +) + +prepare mingw-w64 9.0.0 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v9.0.0.tar.bz2 mingw-w64-v9.0.0.tar.bz2 +cd bld +../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 \ + --prefix=$X_DEST/x86_64-w64-mingw32 --with-sysroot=$X_DEST/x86_64-w64-mingw32 \ + --disable-lib32 --enable-wildcard --disable-shared --without-crt +cd mingw-w64-headers +make $X_MAKE_OPTS +make $X_MAKE_OPTS install + +[ -e $X_DEST/mingw ] || ln -s $X_DEST/x86_64-w64-mingw32 $X_DEST/mingw +[ -e $X_DEST/x86_64-w64-mingw32/lib64 ] || ln -s $X_DEST/x86_64-w64-mingw32/lib $X_DEST/x86_64-w64-mingw32/lib64 + +cd $X_BUILD/gcc/bld +../gcc-11.2.0/configure --enable-languages=c,c++ --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 \ + --disable-multilib --prefix=$X_DEST --with-sysroot=$X_DEST --disable-libstdcxx-pch \ + --disable-libstdcxx-verbose --disable-nls --disable-shared --disable-win32-registry \ + --enable-threads=posix --enable-libgomp +make $X_MAKE_OPTS all-gcc +make $X_MAKE_OPTS install-gcc + +cd $X_BUILD/mingw-w64/bld +../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 \ + --prefix=$X_DEST/x86_64-w64-mingw32 --with-sysroot=$X_DEST/x86_64-w64-mingw32 \ + --disable-lib32 --enable-wildcard --disable-shared --with-libraries=winpthreads \ + --with-tools=all +make $X_MAKE_OPTS "CFLAGS=-s -O3" +make $X_MAKE_OPTS install + +cd $X_BUILD/gcc/bld +make $X_MAKE_OPTS clean +make $X_MAKE_OPTS "CFLAGS=-g0 -O3" "CXXFLAGS=-g0 -O3" "CFLAGS_FOR_TARGET=-g0 -O3" "CXXFLAGS_FOR_TARGET=-g0 -O3" "BOOT_CFLAGS=-g0 -O3" "BOOT_CXXFLAGS=-g0 -O3" +make $X_MAKE_OPTS install + +# These symlinks are not needed anymore. +rm -v $X_DEST/mingw +rm -v $X_DEST/x86_64-w64-mingw32/lib64 + +# https://github.com/msys2/MINGW-packages/issues/7890 +# https://github.com/msys2/MINGW-packages/pull/8248 +rm -v $X_DEST/lib/bfd-plugins/libdep.a + +### BUILD EXTRA STUFF + +prepare gdb 10.2 https://ftpmirror.gnu.org/gnu/gdb/gdb-10.2.tar.xz gdb-10.2.tar.xz +# Hack around undefined reference to BCryptGenRandom by defining HAVE_LIB_BCRYPT to 0. +cp -v $SCRIPT_DIR/gdb-gnulib-import-m4-getrandom.m4 gdb-10.2/gnulib/import/m4/getrandom.m4 +(cd gdb-10.2/gnulib && autoreconf --force --install --verbose) +cd bld +../gdb-10.2/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=$X_DEST --disable-nls +make $X_MAKE_OPTS "CFLAGS=-O3" "CXXFLAGS=-O3" "LDFLAGS=-s" +make $X_MAKE_OPTS install + +cd $X_DEST +7zr a $X_ROOT/mingw.7z . |
