|
|
89a23b |
#!/bin/bash
|
|
|
89a23b |
|
|
|
89a23b |
set -e
|
|
|
89a23b |
|
|
|
89a23b |
VER_BINUTILS="2.29.1"
|
|
|
89a23b |
DIR_BINUTILS="binutils-$VER_BINUTILS"
|
|
|
89a23b |
ARH_BINUTILS="$DIR_BINUTILS.tar.xz"
|
|
|
89a23b |
URL_BINUTILS="https://ftp.gnu.org/gnu/binutils/$ARH_BINUTILS"
|
|
|
89a23b |
|
|
|
89a23b |
VER_GCC="7.2.0"
|
|
|
89a23b |
DIR_GCC="gcc-$VER_GCC"
|
|
|
89a23b |
ARH_GCC="$DIR_GCC.tar.xz"
|
|
|
89a23b |
URL_GCC="https://ftp.gnu.org/gnu/gcc/gcc-$VER_GCC/$ARH_GCC"
|
|
|
89a23b |
|
|
|
89a23b |
VER_MINGW="5.0.3"
|
|
|
89a23b |
DIR_MINGW="mingw-w64-v$VER_MINGW"
|
|
|
89a23b |
ARH_MINGW="$DIR_MINGW.tar.bz2"
|
|
|
89a23b |
URL_MINGW="https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/$ARH_MINGW"
|
|
|
89a23b |
|
|
|
89a23b |
VER_ICONV="1.15"
|
|
|
89a23b |
DIR_ICONV="libiconv-$VER_ICONV"
|
|
|
89a23b |
ARH_ICONV="$DIR_ICONV.tar.gz"
|
|
|
89a23b |
URL_ICONV="https://ftp.gnu.org/pub/gnu/libiconv/$ARH_ICONV"
|
|
|
89a23b |
|
|
|
89a23b |
VER_GETTEXT="0.19.7"
|
|
|
89a23b |
DIR_GETTEXT="gettext-$VER_GETTEXT"
|
|
|
89a23b |
ARH_GETTEXT="$DIR_GETTEXT.tar.gz"
|
|
|
89a23b |
URL_GETTEXT="https://ftp.gnu.org/pub/gnu/gettext/$ARH_GETTEXT"
|
|
|
89a23b |
|
|
|
89a23b |
|
|
|
89a23b |
THREADS=`nproc`
|
|
|
89a23b |
INITIAL_PATH="$PATH"
|
|
|
89a23b |
COMMAND="$0"
|
|
|
89a23b |
|
|
|
89a23b |
|
|
|
89a23b |
if [ "$1" == "host_install" ]; then
|
|
|
89a23b |
PATH="/usr/local/$2/sys-root/bin:$PATH" make install
|
|
|
89a23b |
exit
|
|
|
89a23b |
fi
|
|
|
89a23b |
|
|
|
89a23b |
|
|
|
89a23b |
download() {
|
|
|
89a23b |
mkdir -p "install-mingw/download"
|
|
|
89a23b |
cd "install-mingw/download"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
89a23b |
echo && echo "download" && echo
|
|
|
89a23b |
|
|
|
89a23b |
wget -c --no-cookies --max-redirect 40 "$URL_BINUTILS"
|
|
|
89a23b |
wget -c --no-cookies --max-redirect 40 "$URL_GCC"
|
|
|
89a23b |
wget -c --no-cookies --max-redirect 40 "$URL_MINGW"
|
|
|
89a23b |
wget -c --no-cookies --max-redirect 40 "$URL_ICONV"
|
|
|
89a23b |
wget -c --no-cookies --max-redirect 40 "$URL_GETTEXT"
|
|
|
89a23b |
|
|
|
89a23b |
tar -xf "../download/$ARH_BINUTILS"
|
|
|
89a23b |
tar -xf "../download/$ARH_GCC"
|
|
|
89a23b |
tar -xf "../download/$ARH_MINGW"
|
|
|
89a23b |
tar -xf "../download/$ARH_ICONV"
|
|
|
89a23b |
tar -xf "../download/$ARH_GETTEXT"
|
|
|
89a23b |
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
install_binutils() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
mkdir -p "install-mingw/build/binutils-$ARCH"
|
|
|
89a23b |
cd "install-mingw/build/binutils-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
89a23b |
echo && echo "install binutils $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
89a23b |
"../../download/$DIR_BINUTILS/configure" \
|
|
|
89a23b |
--target="$ARCH" \
|
|
|
89a23b |
--disable-multilib \
|
|
|
89a23b |
--with-sysroot="/usr/local/$ARCH/sys-root" \
|
|
|
89a23b |
--prefix="/usr/local/$ARCH/sys-root"
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo make install
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
install_headers() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
mkdir -p "install-mingw/build/headers-$ARCH"
|
|
|
89a23b |
cd "install-mingw/build/headers-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
89a23b |
echo && echo "install headers $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
89a23b |
"../../download/$DIR_MINGW/mingw-w64-headers/configure" \
|
|
|
89a23b |
--host="$ARCH" \
|
|
|
89a23b |
--prefix="/usr/local/$ARCH/sys-root"
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo make install
|
|
|
89a23b |
pushd "/usr/local/$ARCH/sys-root"
|
|
|
89a23b |
sudo ln -s . mingw
|
|
|
89a23b |
popd
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
install_gcc() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
mkdir -p "install-mingw/build/gcc-$ARCH"
|
|
|
89a23b |
cd "install-mingw/build/gcc-$ARCH"
|
|
|
89a23b |
if [ ! -f "gcc.done" ]; then
|
|
|
89a23b |
echo && echo "install gcc $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
89a23b |
"../../download/$DIR_GCC/configure" \
|
|
|
89a23b |
--target="$ARCH" \
|
|
|
89a23b |
--disable-multilib \
|
|
|
89a23b |
--enable-shared \
|
|
|
b727d1 |
--enable-threads=posix \
|
|
|
89a23b |
--with-sysroot="/usr/local/$ARCH/sys-root" \
|
|
|
89a23b |
--prefix="/usr/local/$ARCH/sys-root"
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS all-gcc || make
|
|
|
89a23b |
sudo make install-gcc
|
|
|
89a23b |
touch "gcc.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
install_crt() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
export PATH="/usr/local/$ARCH/sys-root/bin:$INITIAL_PATH"
|
|
|
89a23b |
mkdir -p "install-mingw/build/crt-$ARCH"
|
|
|
89a23b |
cd "install-mingw/build/crt-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
89a23b |
echo && echo "install crt $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
89a23b |
"../../download/$DIR_MINGW/mingw-w64-crt/configure" \
|
|
|
89a23b |
--host="$ARCH" \
|
|
|
89a23b |
--with-sysroot="/usr/local/$ARCH/sys-root" \
|
|
|
89a23b |
--prefix="/usr/local/$ARCH/sys-root"
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo "../../../$0" host_install "$ARCH"
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
finish_gcc() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
export PATH="/usr/local/$ARCH/sys-root/bin:$INITIAL_PATH"
|
|
|
89a23b |
mkdir -p "install-mingw/build/gcc-$ARCH"
|
|
|
89a23b |
cd "install-mingw/build/gcc-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
89a23b |
echo && echo "finish gcc $ARCH" && echo
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo "../../../$0" host_install "$ARCH"
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
b727d1 |
install_library() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
b727d1 |
local NAME="$2"
|
|
|
89a23b |
export PATH="/usr/local/$ARCH/sys-root/bin:$INITIAL_PATH"
|
|
|
b727d1 |
mkdir -p "install-mingw/build/mingw-$NAME-$ARCH"
|
|
|
b727d1 |
cd "install-mingw/build/mingw-$NAME-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
b727d1 |
echo && echo "install library $NAME $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
b727d1 |
"../../download/$DIR_MINGW/mingw-w64-libraries/$NAME/configure" \
|
|
|
89a23b |
--host="$ARCH" \
|
|
|
89a23b |
--with-sysroot="/usr/local/$ARCH/sys-root" \
|
|
|
b727d1 |
--prefix="/usr/local/$ARCH/sys-root" \
|
|
|
b727d1 |
${@:3}
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo "../../../$0" host_install "$ARCH"
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
b727d1 |
install_tool() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
b727d1 |
local NAME="$2"
|
|
|
89a23b |
export PATH="/usr/local/$ARCH/sys-root/bin:$INITIAL_PATH"
|
|
|
b727d1 |
mkdir -p "install-mingw/build/mingw-$NAME-$ARCH"
|
|
|
b727d1 |
cd "install-mingw/build/mingw-$NAME-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
b727d1 |
echo && echo "install tool $NAME $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
b727d1 |
"../../download/$DIR_MINGW/mingw-w64-tools/$NAME/configure" \
|
|
|
b727d1 |
--target="$ARCH" \
|
|
|
b727d1 |
--prefix="/usr/local/$ARCH/sys-root" \
|
|
|
b727d1 |
${@:3}
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo "../../../$0" host_install "$ARCH"
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
install_iconv() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
export PATH="/usr/local/$ARCH/sys-root/bin:$INITIAL_PATH"
|
|
|
89a23b |
mkdir -p "install-mingw/build/iconv-$ARCH"
|
|
|
89a23b |
cd "install-mingw/build/iconv-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
89a23b |
echo && echo "install iconv $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
89a23b |
"../../download/$DIR_ICONV/configure" \
|
|
|
89a23b |
--host="$ARCH" \
|
|
|
89a23b |
--enable-static \
|
|
|
89a23b |
--enable-shared \
|
|
|
89a23b |
--with-sysroot="/usr/local/$ARCH/sys-root" \
|
|
|
89a23b |
--prefix="/usr/local/$ARCH/sys-root"
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo "../../../$0" host_install "$ARCH"
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
install_gettext() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
export PATH="/usr/local/$ARCH/sys-root/bin:$INITIAL_PATH"
|
|
|
89a23b |
mkdir -p "install-mingw/build/gettext-$ARCH"
|
|
|
89a23b |
cd "install-mingw/build/gettext-$ARCH"
|
|
|
89a23b |
if [ ! -f "done" ]; then
|
|
|
89a23b |
echo && echo "install gettext $ARCH" && echo
|
|
|
89a23b |
if [ ! -f "configure.done" ]; then
|
|
|
89a23b |
"../../download/$DIR_GETTEXT/configure" \
|
|
|
89a23b |
--host="$ARCH" \
|
|
|
89a23b |
--disable-java \
|
|
|
89a23b |
--disable-native-java \
|
|
|
89a23b |
--disable-csharp \
|
|
|
89a23b |
--enable-static \
|
|
|
89a23b |
--enable-shared \
|
|
|
89a23b |
--enable-threads=win32 \
|
|
|
89a23b |
--without-emacs \
|
|
|
89a23b |
--disable-openmp \
|
|
|
89a23b |
--with-sysroot="/usr/local/$ARCH/sys-root" \
|
|
|
89a23b |
--prefix="/usr/local/$ARCH/sys-root"
|
|
|
89a23b |
touch "configure.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
make -j$THREADS || make
|
|
|
89a23b |
sudo "../../../$0" host_install "$ARCH"
|
|
|
89a23b |
touch "done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
install_license() {
|
|
|
89a23b |
local NAME="$1"
|
|
|
89a23b |
local DIR_NAME="$2"
|
|
|
89a23b |
cd "install-mingw/download/$DIR_NAME"
|
|
|
89a23b |
if [ ! -f "../../build/$NAME.license.done" ]; then
|
|
|
89a23b |
echo && echo "install license $NAME" && echo
|
|
|
89a23b |
local TARGET="../../build/$NAME.license"
|
|
|
89a23b |
echo > "$TARGET"
|
|
|
89a23b |
for FILE in README COPYING* MAINTAINERS AUTHORS; do
|
|
|
89a23b |
if [ -f "$FILE" ]; then
|
|
|
89a23b |
echo "" >> "$TARGET"
|
|
|
89a23b |
echo "-------------------------------------" >> "$TARGET"
|
|
|
89a23b |
echo " File: $FILE" >> "$TARGET"
|
|
|
89a23b |
echo "-------------------------------------" >> "$TARGET"
|
|
|
89a23b |
echo "" >> "$TARGET"
|
|
|
89a23b |
cat "$FILE" >> "$TARGET"
|
|
|
89a23b |
fi
|
|
|
89a23b |
done
|
|
|
89a23b |
sudo mkdir -p "/usr/local/share/doc/$NAME"
|
|
|
89a23b |
sudo cp "$TARGET" "/usr/local/share/doc/$NAME/copyright"
|
|
|
89a23b |
touch "../../build/$NAME.license.done"
|
|
|
89a23b |
fi
|
|
|
89a23b |
cd ../../..
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
|
|
|
89a23b |
install() {
|
|
|
89a23b |
local ARCH="$1"
|
|
|
89a23b |
install_binutils "$ARCH"
|
|
|
89a23b |
install_headers "$ARCH"
|
|
|
89a23b |
install_gcc "$ARCH"
|
|
|
89a23b |
install_crt "$ARCH"
|
|
|
b727d1 |
install_library "$ARCH" "winpthreads"
|
|
|
89a23b |
finish_gcc "$ARCH"
|
|
|
b727d1 |
|
|
|
b727d1 |
install_library "$ARCH" "libmangle"
|
|
|
b727d1 |
install_library "$ARCH" "winstorecompat"
|
|
|
b727d1 |
install_tool "$ARCH" "gendef"
|
|
|
b727d1 |
install_tool "$ARCH" "genidl"
|
|
|
b727d1 |
install_tool "$ARCH" "genlib"
|
|
|
b727d1 |
install_tool "$ARCH" "genpeimg"
|
|
|
b727d1 |
install_tool "$ARCH" "widl"
|
|
|
b727d1 |
|
|
|
89a23b |
install_iconv "$ARCH"
|
|
|
89a23b |
install_gettext "$ARCH"
|
|
|
89a23b |
|
|
|
89a23b |
install_license gcc "$DIR_GCC"
|
|
|
89a23b |
install_license g++ "$DIR_GCC"
|
|
|
89a23b |
install_license gfortran "$DIR_GCC"
|
|
|
89a23b |
install_license cc "$DIR_GCC"
|
|
|
89a23b |
install_license c++ "$DIR_GCC"
|
|
|
89a23b |
install_license gfortran "$DIR_GCC"
|
|
|
89a23b |
|
|
|
89a23b |
install_license mingw-w64 "$DIR_MINGW"
|
|
|
89a23b |
install_license iconv "$DIR_ICONV"
|
|
|
89a23b |
install_license gettext "$DIR_GETTEXT"
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
clean() {
|
|
|
89a23b |
echo && echo "clean" && echo
|
|
|
89a23b |
rm -r install-mingw
|
|
|
89a23b |
}
|
|
|
89a23b |
|
|
|
89a23b |
download
|
|
|
89a23b |
install x86_64-w64-mingw32
|
|
|
89a23b |
install i686-w64-mingw32
|
|
|
89a23b |
clean
|
|
|
89a23b |
|
|
|
89a23b |
echo && echo "done" && echo
|