mirror of
https://github.com/ValveSoftware/Proton.git
synced 2024-12-27 23:25:50 +03:00
add build-mingw-w64 script
This commit is contained in:
parent
b3e80d99d8
commit
48d6c81c73
141
build-mingw-w64.sh
Executable file
141
build-mingw-w64.sh
Executable file
@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Makes a local build of mingw-w64 in this directory and installs it to the given path."
|
||||
echo ""
|
||||
echo "usage:"
|
||||
echo -e "\t$0 <installation path e.g. \$HOME/.local>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$MAKEFLAGS" ]; then
|
||||
JOBS=-j$(($(nproc) - 1))
|
||||
fi
|
||||
|
||||
DST_DIR="$1"
|
||||
|
||||
BINUTILS_VER=2.32
|
||||
BINUTILS_SRCTARBALL=binutils-$BINUTILS_VER.tar.xz
|
||||
BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/$BINUTILS_SRCTARBALL"
|
||||
BINUTILS_SRCDIR=binutils-$BINUTILS_VER
|
||||
|
||||
GCC_VER=9.2.0
|
||||
GCC_SRCTARBALL=gcc-$GCC_VER.tar.xz
|
||||
GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_SRCTARBALL"
|
||||
GCC_SRCDIR=gcc-$GCC_VER
|
||||
|
||||
MINGW_W64_GITVER=v6.0.0
|
||||
MINGW_W64_GITURL="git://git.code.sf.net/p/mingw-w64/mingw-w64"
|
||||
MINGW_W64_SRCDIR=mingw-w64-git
|
||||
|
||||
function setup_src {
|
||||
if [ ! -e "$BINUTILS_SRCTARBALL" ]; then
|
||||
wget -O "$BINUTILS_SRCTARBALL" "$BINUTILS_URL"
|
||||
fi
|
||||
|
||||
if [ ! -e "$BINUTILS_SRCDIR" ]; then
|
||||
tar -xf "$BINUTILS_SRCTARBALL"
|
||||
fi
|
||||
|
||||
if [ ! -e "$GCC_SRCTARBALL" ]; then
|
||||
wget -O "$GCC_SRCTARBALL" "$GCC_URL"
|
||||
fi
|
||||
|
||||
if [ ! -e "$GCC_SRCDIR" ]; then
|
||||
tar -xf "$GCC_SRCTARBALL"
|
||||
fi
|
||||
|
||||
if [ ! -e "$MINGW_W64_SRCDIR" ]; then
|
||||
#shallow clone, we just want this one version
|
||||
git clone -b $MINGW_W64_GITVER --depth 1 \
|
||||
"$MINGW_W64_GITURL" "$MINGW_W64_SRCDIR"
|
||||
fi
|
||||
}
|
||||
|
||||
function build_arch {
|
||||
BUILD_ARCH=$(gcc -dumpmachine) #machine which is building the compiler
|
||||
HOST_ARCH=$1 #machine which will run the compiler
|
||||
WIN32_TARGET_ARCH=$2 #machine which we are building for
|
||||
NEWPATH=$DST_DIR/bin:$PATH
|
||||
|
||||
mkdir -p build-$WIN32_TARGET_ARCH/
|
||||
pushd build-$WIN32_TARGET_ARCH/
|
||||
|
||||
mkdir -p binutils/
|
||||
pushd binutils/
|
||||
if [ ! -e Makefile ]; then
|
||||
../../$BINUTILS_SRCDIR/configure --prefix=$DST_DIR/ --build=$BUILD_ARCH --host=$HOST_ARCH --target=$WIN32_TARGET_ARCH --disable-multilib --enable-lto $BINUTILS_EXTRA_CONFIGURE
|
||||
fi
|
||||
make $JOBS configure-host
|
||||
make $JOBS LDFLAGS=-all-static
|
||||
make $JOBS install
|
||||
popd
|
||||
|
||||
mkdir -p mingw-w64-headers/
|
||||
pushd mingw-w64-headers/
|
||||
if [ ! -e Makefile ]; then
|
||||
PATH=$NEWPATH:$PATH ../../$MINGW_W64_SRCDIR/mingw-w64-headers/configure --prefix=$DST_DIR/$WIN32_TARGET_ARCH/ --host=$WIN32_TARGET_ARCH --enable-sdk=all --enable-secure-api --enable-idl $MINGW_W64_HEADERS_EXTRA_CONFIGURE
|
||||
fi
|
||||
PATH=$NEWPATH:$PATH make $JOBS install
|
||||
popd
|
||||
|
||||
mkdir -p gcc/
|
||||
pushd gcc/
|
||||
if [ ! -e Makefile ]; then
|
||||
#arguments mostly taken from Arch AUR mingw-w64-gcc PKGBUILD,
|
||||
#except "--disable-dw2-exceptions" swapped for "--disable-sjlj-exceptions --with-dwarf2"
|
||||
#for performance reasons on 32-bit
|
||||
LDFLAGS=-static PATH=$NEWPATH:$PATH ../../$GCC_SRCDIR/configure --prefix=$DST_DIR/ \
|
||||
--build=$BUILD_ARCH --host=$HOST_ARCH --target=$WIN32_TARGET_ARCH --with-gnu-ld --with-gnu-as \
|
||||
--enable-languages=c,c++ --disable-multilib --enable-threads=posix --enable-fully-dynamic-string \
|
||||
--enable-libstdcxx-time=yes --enable-libstdcxx-filesystem-ts=yes --enable-cloog-backend=isl \
|
||||
--enable-lto --disable-sjlj-exceptions --with-dwarf2 \
|
||||
$GCC_EXTRA_CONFIGURE
|
||||
fi
|
||||
PATH=$NEWPATH make $JOBS all-gcc
|
||||
PATH=$NEWPATH make $JOBS install-gcc
|
||||
popd
|
||||
|
||||
mkdir -p mingw-w64-crt/
|
||||
pushd mingw-w64-crt/
|
||||
if [ ! -e Makefile ]; then
|
||||
PATH=$NEWPATH ../../$MINGW_W64_SRCDIR/mingw-w64-crt/configure --prefix=$DST_DIR/$WIN32_TARGET_ARCH/ --host=$WIN32_TARGET_ARCH $MINGW_W64_CRT_EXTRA_CONFIGURE
|
||||
fi
|
||||
PATH=$NEWPATH make $JOBS
|
||||
PATH=$NEWPATH make $JOBS install
|
||||
popd
|
||||
|
||||
mkdir -p mingw-w64-winpthreads/
|
||||
pushd mingw-w64-winpthreads/
|
||||
if [ ! -e Makefile ]; then
|
||||
PATH=$NEWPATH ../../$MINGW_W64_SRCDIR/mingw-w64-libraries/winpthreads/configure --prefix=$DST_DIR/$WIN32_TARGET_ARCH/ --host=$WIN32_TARGET_ARCH $MINGW_W64_WINPTHREADS_EXTRA_CONFIGURE
|
||||
fi
|
||||
PATH=$NEWPATH make $JOBS
|
||||
PATH=$NEWPATH make $JOBS install
|
||||
popd
|
||||
|
||||
pushd gcc/
|
||||
#below steps require libgcc in default library location, but
|
||||
#"canadian" build doesn't handle that, so install it explicitly
|
||||
PATH=$NEWPATH make configure-target-libgcc
|
||||
PATH=$NEWPATH make -C $WIN32_TARGET_ARCH/libgcc $JOBS
|
||||
PATH=$NEWPATH make -C $WIN32_TARGET_ARCH/libgcc $JOBS install
|
||||
|
||||
PATH=$NEWPATH make $JOBS
|
||||
PATH=$NEWPATH make $JOBS install
|
||||
popd
|
||||
|
||||
popd
|
||||
}
|
||||
|
||||
setup_src
|
||||
|
||||
mkdir -p $DST_DIR
|
||||
|
||||
build_arch i686-linux-gnu i686-w64-mingw32
|
||||
|
||||
build_arch x86_64-linux-gnu x86_64-w64-mingw32
|
||||
|
||||
echo "Done!"
|
Loading…
Reference in New Issue
Block a user