summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/mingw-w64-build252
1 files changed, 189 insertions, 63 deletions
diff --git a/scripts/mingw-w64-build b/scripts/mingw-w64-build
index 30f95b280..d72fc843d 100755
--- a/scripts/mingw-w64-build
+++ b/scripts/mingw-w64-build
@@ -100,7 +100,7 @@ function die_gracefully {
}
# builds mingw-w64
-function mingw-w64-build { # mingw-w64-build $TARGET_PARAM $TARGET_DIR
+function mingw-w64-build { # mingw-w64-build [args] $TARGET_PARAM $TARGET_DIR
set -o pipefail
# dependencies
@@ -118,8 +118,138 @@ function mingw-w64-build { # mingw-w64-build $TARGET_PARAM $TARGET_DIR
return 1
fi
+ # internal vars
+ local NAME VERSION SELF SELF_NAME HELP
+ NAME="mingw-w64-build"
+ VERSION="6.0.0"
+ SELF="${BASH_SOURCE[0]}"
+ SELF_NAME=$(basename "${SELF}")
+ HELP="\
+usage: ${SELF_NAME} [-h | --help]
+ ${SELF_NAME} [-v | --version]
+ ${SELF_NAME} [--disable-gdb] target [install-dir]
+where:
+ --disable-gdb
+ disable building GDB debugger
+targets:
+ i686
+ i686.clean
+ i686.distclean
+ x86_64
+ x86_64.clean
+ x86_64.distclean
+ pkgclean
+default install-dir: ${HOME}/toolchains/mingw-w64-${MINGW_W64_VER}-gcc-${GCC_VER}"
+ CREL=$(echo -e "\r"$(tput el))
+
+ # args
+ local DISABLE_GDB OPTIND OPTSPEC OPTARRAY
+ DISABLE_GDB=false
+ OPTIND=1
+ OPTSPEC=":-:hv"
+ OPTARRAY=('-h' '--help' '-v' '--version' '--disable-gdb') # all short and long options
+ while getopts "${OPTSPEC}" OPT; do
+ case "${OPT}" in
+ -)
+ case "${OPTARG}" in
+ help)
+ # Print help and exit
+ echo -e "${HELP}"
+ exit 0
+ ;;
+ help=*)
+ # Print help and exit
+ echo -e "${HELP}"
+ exit 0
+ ;;
+ version)
+ # Print version and exit
+ echo -e "${NAME} ${VERSION}"
+ exit 0
+ ;;
+ version=*)
+ # Print version and exit
+ echo -e "${NAME} ${VERSION}"
+ exit 0
+ ;;
+ disable-gdb)
+ # Disable GDB
+ DISABLE_GDB=true
+ ;;
+ *)
+ if [[ "${OPTERR}" == 1 ]]; then
+ # Invalid option specified
+ echo "Invalid option: --${OPTARG}" >&2
+ echo -e "${HELP}"
+ exit 1
+ fi
+ ;;
+ esac
+ ;;
+ h)
+ # Print help and exit
+ echo -e "${HELP}"
+ exit 0
+ ;;
+ v)
+ # Print version and exit
+ echo "${NAME} ${VERSION}"
+ exit 0
+ ;;
+ :)
+ # Option without required value
+ echo "Option -${OPTARG} requires a value" >&2
+ echo -e "${HELP}"
+ exit 1
+ ;;
+ \?)
+ # Invalid option specified
+ echo "Invalid option: -${OPTARG}" >&2
+ echo -e "${HELP}"
+ exit 1
+ ;;
+ esac
+ done
+ shift $((OPTIND - 1))
+
+ # target args
+ local TARGET_PARAM TARGET_DIR
+ TARGET_PARAM="${1}"
+ TARGET_DIR="${2}"
+ if [[ "${TARGET_PARAM:-}" == "" ]]; then
+ echo -e "${HELP}"
+ echo "no target specified" >&2
+ return 1
+ fi
+
+ # target and prefix
+ local TARGET_i686 TARGET_x86_64 PREFIX_i686 PREFIX_x86_64 TARGET PREFIX
+ TARGET_i686="i686-w64-mingw32"
+ TARGET_x86_64="x86_64-w64-mingw32"
+ PREFIX_i686="mingw-w64-i686"
+ PREFIX_x86_64="mingw-w64-x86_64"
+ case "${TARGET_PARAM}" in
+ i686|i686.clean|i686.distclean)
+ TARGET="${TARGET_i686}"
+ PREFIX="${PREFIX_i686}"
+ ;;
+ x86_64|x86_64.clean|x86_64.distclean)
+ TARGET="${TARGET_x86_64}"
+ PREFIX="${PREFIX_x86_64}"
+ ;;
+ pkgclean)
+ TARGET="pkgclean"
+ PREFIX="pkgclean"
+ ;;
+ esac
+ if [[ "${PREFIX:-}" == "" ]]; then
+ echo -e "${HELP}"
+ echo "target not valid: ${TARGET_PARAM}" >&2
+ return 1
+ fi
+
# package names
- local CONFIG_NAME BINUTILS_NAME MINGW_W64_NAME GMP_NAME MPFR_NAME MPC_NAME ISL_NAME GCC_NAME NAMES
+ local CONFIG_NAME BINUTILS_NAME MINGW_W64_NAME GMP_NAME MPFR_NAME MPC_NAME ISL_NAME GCC_NAME GDB_NAME NAMES
CONFIG_NAME="config"
BINUTILS_NAME="binutils"
MINGW_W64_NAME="mingw-w64"
@@ -129,9 +259,13 @@ function mingw-w64-build { # mingw-w64-build $TARGET_PARAM $TARGET_DIR
ISL_NAME="isl"
GCC_NAME="gcc"
NAMES=("${CONFIG_NAME}" "${BINUTILS_NAME}" "${MINGW_W64_NAME}" "${GMP_NAME}" "${MPFR_NAME}" "${MPC_NAME}" "${ISL_NAME}" "${GCC_NAME}")
+ if [[ "${DISABLE_GDB}" == false ]]; then
+ GDB_NAME="gdb"
+ NAMES+=("${GDB_NAME}")
+ fi
# versions
- local CONFIG_VER BINUTILS_VER MINGW_W64_VER GMP_VER MPFR_VER MPC_VER ISL_VER GCC_VER
+ local CONFIG_VER BINUTILS_VER MINGW_W64_VER GMP_VER MPFR_VER MPC_VER ISL_VER GCC_VER GDB_VER VERSIONS
CONFIG_VER="5fe51ff" # config.guess 2019-01-03
BINUTILS_VER="2.31.1"
MINGW_W64_VER="6.0.0"
@@ -139,11 +273,15 @@ function mingw-w64-build { # mingw-w64-build $TARGET_PARAM $TARGET_DIR
MPFR_VER="4.0.1"
MPC_VER="1.1.0"
ISL_VER="0.19"
- GCC_VER="8.2.0"
+ GCC_VER="8.3.0"
VERSIONS=("${CONFIG_VER}" "${BINUTILS_VER}" "${MINGW_W64_VER}" "${GMP_VER}" "${MPFR_VER}" "${MPC_VER}" "${ISL_VER}" "${GCC_VER}")
+ if [[ "${DISABLE_GDB}" == false ]]; then
+ GDB_VER="8.2.1"
+ VERSIONS+=("${GDB_VER}")
+ fi
# filenames
- local CONFIG_PKG BINUTILS_PKG MINGW_W64_PKG GMP_PKG MPFR_PKG MPC_PKG ISL_PKG GCC_PKG PKGS
+ local CONFIG_PKG BINUTILS_PKG MINGW_W64_PKG GMP_PKG MPFR_PKG MPC_PKG ISL_PKG GCC_PKG GDB_PKG PKGS
CONFIG_PKG="config-${CONFIG_VER}.tar.gz"
BINUTILS_PKG="binutils-${BINUTILS_VER}.tar.bz2"
MINGW_W64_PKG="mingw-w64-v${MINGW_W64_VER}.tar.bz2"
@@ -153,9 +291,13 @@ function mingw-w64-build { # mingw-w64-build $TARGET_PARAM $TARGET_DIR
ISL_PKG="isl-${ISL_VER}.tar.bz2"
GCC_PKG="gcc-${GCC_VER}.tar.gz"
PKGS=("${CONFIG_PKG}" "${BINUTILS_PKG}" "${MINGW_W64_PKG}" "${GMP_PKG}" "${MPFR_PKG}" "${MPC_PKG}" "${ISL_PKG}" "${GCC_PKG}")
+ if [[ "${DISABLE_GDB}" == false ]]; then
+ GDB_PKG="gdb-${GDB_VER}.tar.gz"
+ PKGS+=("${GDB_PKG}")
+ fi
# urls
- local CONFIG_URLS BINUTILS_URLS MINGW_W64_URLS GMP_URLS MPFR_URLS MPC_URLS ISL_URLS GCC_URLS URLS_VARNAMES
+ local CONFIG_URLS BINUTILS_URLS MINGW_W64_URLS GMP_URLS MPFR_URLS MPC_URLS ISL_URLS GCC_URLS GDB_URLS URLS_VARNAMES
CONFIG_URLS=("https://git.savannah.gnu.org/gitweb/?p=config.git;a=snapshot;h=${CONFIG_VER};sf=tgz")
BINUTILS_URLS=("https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VER}.tar.bz2")
MINGW_W64_URLS=("http://downloads.sourceforge.net/project/mingw-w64/mingw-w64/mingw-w64-release/mingw-w64-v${MINGW_W64_VER}.tar.bz2")
@@ -165,9 +307,13 @@ function mingw-w64-build { # mingw-w64-build $TARGET_PARAM $TARGET_DIR
ISL_URLS=("http://isl.gforge.inria.fr/isl-${ISL_VER}.tar.bz2")
GCC_URLS=("https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VER}/gcc-${GCC_VER}.tar.gz")
URLS_VARNAMES=('CONFIG_URLS' 'BINUTILS_URLS' 'MINGW_W64_URLS' 'GMP_URLS' 'MPFR_URLS' 'MPC_URLS' 'ISL_URLS' 'GCC_URLS')
+ if [[ "${DISABLE_GDB}" == false ]]; then
+ GDB_URLS=("https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VER}.tar.gz")
+ URLS_VARNAMES+=('GDB_URLS')
+ fi
# checksums
- local CONFIG_SHA256 BINUTILS_SHA256 MINGW_W64_SHA256 GMP_SHA256 MPFR_SHA256 MPC_SHA256 ISL_SHA256 GCC_SHA256 CHECKSUMS
+ local CONFIG_SHA256 BINUTILS_SHA256 MINGW_W64_SHA256 GMP_SHA256 MPFR_SHA256 MPC_SHA256 ISL_SHA256 GCC_SHA256 GDB_SHA256 CHECKSUMS
CONFIG_SHA256="6ba0228df0895f24c6cf61679c684a179db071384e12b07f8b1c84c2c180bf0a"
BINUTILS_SHA256="ffcc382695bf947da6135e7436b8ed52d991cf270db897190f19d6f9838564d0"
MINGW_W64_SHA256="805e11101e26d7897fce7d49cbb140d7bac15f3e085a91e0001e80b2adaf48f0"
@@ -175,67 +321,18 @@ function mingw-w64-build { # mingw-w64-build $TARGET_PARAM $TARGET_DIR
MPFR_SHA256="e650f8723bfc6eca4f222c021db3d5d4cebe2e21c82498329bb9e6815b99c88c"
MPC_SHA256="6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e"
ISL_SHA256="d59726f34f7852a081fbd3defd1ab2136f174110fc2e0c8d10bb122173fa9ed8"
- GCC_SHA256="1b0f36be1045ff58cbb9c83743835367b860810f17f0195a4e093458b372020f"
+ GCC_SHA256="ea71adc1c3d86330874b8df19611424b143308f0d6612d542472600532c96d2d"
CHECKSUMS=("${CONFIG_SHA256}" "${BINUTILS_SHA256}" "${MINGW_W64_SHA256}" "${GMP_SHA256}" "${MPFR_SHA256}" "${MPC_SHA256}" "${ISL_SHA256}" "${GCC_SHA256}")
-
- # internal vars
- local NAME VERSION SELF SELF_NAME HELP
- NAME="mingw-w64-build"
- VERSION="5.0.0"
- SELF="${BASH_SOURCE[0]}"
- SELF_NAME=$(basename "${SELF}")
- HELP="\
-usage: ${SELF_NAME} target [install-dir]
-targets:
- i686
- i686.clean
- i686.distclean
- x86_64
- x86_64.clean
- x86_64.distclean
- pkgclean
-default install-dir: ${HOME}/toolchains/mingw-w64-${MINGW_W64_VER}-gcc-${GCC_VER}"
- CREL=$(echo -e "\r"$(tput el))
-
- # args
- local TARGET_PARAM TARGET_DIR
- TARGET_PARAM="${1}"
- TARGET_DIR="${2}"
- if [[ "${TARGET_PARAM:-}" == "" ]]; then
- echo -e "${HELP}"
- echo "no target specified" >&2
- return 1
+ if [[ "${DISABLE_GDB}" == false ]]; then
+ GDB_SHA256="0107985f1edb8dddef6cdd68a4f4e419f5fec0f488cc204f0b7d482c0c6c9282"
+ CHECKSUMS+=("${GDB_SHA256}")
fi
+
+ # target dir
if [[ "${TARGET_DIR:-}" == "" ]]; then
TARGET_DIR="${HOME}/toolchains/mingw-w64-${MINGW_W64_VER}-gcc-${GCC_VER}"
fi
- # target and prefix
- local TARGET_i686 TARGET_x86_64 PREFIX_i686 PREFIX_x86_64 TARGET PREFIX
- TARGET_i686="i686-w64-mingw32"
- TARGET_x86_64="x86_64-w64-mingw32"
- PREFIX_i686="mingw-w64-i686"
- PREFIX_x86_64="mingw-w64-x86_64"
- case "${TARGET_PARAM}" in
- i686|i686.clean|i686.distclean)
- TARGET="${TARGET_i686}"
- PREFIX="${PREFIX_i686}"
- ;;
- x86_64|x86_64.clean|x86_64.distclean)
- TARGET="${TARGET_x86_64}"
- PREFIX="${PREFIX_x86_64}"
- ;;
- pkgclean)
- TARGET="pkgclean"
- PREFIX="pkgclean"
- ;;
- esac
- if [[ "${PREFIX:-}" == "" ]]; then
- echo -e "${HELP}"
- echo "target not valid: ${TARGET_PARAM}" >&2
- return 1
- fi
-
# cleaning and directory creation
local MINGW_W64_DIR PKG_DIR SOURCE_DIR BUILD_DIR
MINGW_W64_DIR="${TARGET_DIR}/${PREFIX}"
@@ -351,7 +448,10 @@ default install-dir: ${HOME}/toolchains/mingw-w64-${MINGW_W64_VER}-gcc-${GCC_VER
# build
local TOTAL
- TOTAL=9
+ TOTAL=11
+ if [[ "${DISABLE_GDB}" == true ]]; then
+ TOTAL="$((${TOTAL} - 1))"
+ fi
echo ""
echo -n "Building "
@@ -494,6 +594,32 @@ default install-dir: ${HOME}/toolchains/mingw-w64-${MINGW_W64_VER}-gcc-${GCC_VER
make -j "${CPU_COUNT}" >> "${BUILD_DIR}/gcc.log" 2>&1 || return 1
make install-strip >> "${BUILD_DIR}/gcc.log" 2>&1 || return 1
+ # winpthreads
+ echo -en "${CREL}"
+ printf "Building [%02i/%02i] %s " "10" "${TOTAL}" "winpthreads"
+ touch "${BUILD_DIR}/winpthreads.log"
+ mkdir -pv "${BUILD_DIR}/winpthreads" > "${BUILD_DIR}/winpthreads.log" 2>&1 || return 1
+ cd "${BUILD_DIR}/winpthreads"
+ "${SOURCE_DIR}/mingw-w64/mingw-w64-v${MINGW_W64_VER}/mingw-w64-libraries/winpthreads/configure" --build="${SYS_TYPE}" --host="${TARGET}" --prefix="${MINGW_W64_DIR}" --disable-shared --enable-static >> "${BUILD_DIR}/winpthreads.log" 2>&1 || return 1
+ make -j "${CPU_COUNT}" >> "${BUILD_DIR}/winpthreads.log" 2>&1 || return 1
+ make install >> "${BUILD_DIR}/winpthreads.log" 2>&1 || return 1
+
+ # gdb
+ if [[ "${DISABLE_GDB}" == false ]]; then
+ echo -en "${CREL}"
+ printf "Building [%02i/%02i] %s " "11" "${TOTAL}" "gdb"
+ touch "${BUILD_DIR}/gdb.log"
+ mkdir -pv "${BUILD_DIR}/gdb" > "${BUILD_DIR}/gdb.log" 2>&1 || return 1
+ cd "${BUILD_DIR}/gdb"
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=18113
+ echo '#!/bin/sh' > makeinfo
+ echo 'echo "makeinfo (GNU texinfo) 5.2"' >> makeinfo
+ chmod a+x makeinfo
+ "${SOURCE_DIR}/gdb/gdb-${GDB_VER}/configure" --build="${SYS_TYPE}" --host="${TARGET}" --prefix="${MINGW_W64_DIR}" --disable-shared --enable-static MAKEINFO="${SOURCE_DIR}/mingw-w64/mingw-w64-v${MINGW_W64_VER}/mingw-w64-libraries/gdb/makeinfo" >> "${BUILD_DIR}/gdb.log" 2>&1 || return 1
+ make -j "${CPU_COUNT}" >> "${BUILD_DIR}/gdb.log" 2>&1 || return 1
+ make install >> "${BUILD_DIR}/gdb.log" 2>&1 || return 1
+ fi
+
# clean up
cd "${MINGW_W64_DIR}"
find . -name "*.la" -type f -exec rm {} ";" >/dev/null 2>&1