From c8d181fa905bb40e9c9506cfce028d194c59ef8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Sat, 21 Dec 2019 00:12:04 +0200 Subject: [PATCH] Build a mingw32-make.exe when cross building toolchains This can be used e.g. for building Qt without any MSYS installation, and should also work for cmake, if using the mingw makefiles generator. --- Dockerfile.cross | 3 +++ build-cross-tools.sh | 1 + build-make.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100755 build-make.sh diff --git a/Dockerfile.cross b/Dockerfile.cross index a5eb0c6..1ecd391 100644 --- a/Dockerfile.cross +++ b/Dockerfile.cross @@ -40,6 +40,9 @@ RUN ./install-wrappers.sh $CROSS_TOOLCHAIN_PREFIX --host=$HOST COPY prepare-cross-toolchain.sh . RUN ./prepare-cross-toolchain.sh $TOOLCHAIN_PREFIX $CROSS_TOOLCHAIN_PREFIX $CROSS_ARCH +COPY build-make.sh . +RUN ./build-make.sh $CROSS_TOOLCHAIN_PREFIX --host=$HOST + ARG TAG RUN ln -s $CROSS_TOOLCHAIN_PREFIX llvm-mingw && \ zip -9r /llvm-mingw-$TAG$CROSS_ARCH.zip llvm-mingw && \ diff --git a/build-cross-tools.sh b/build-cross-tools.sh index dd32e3d..b1299a7 100755 --- a/build-cross-tools.sh +++ b/build-cross-tools.sh @@ -18,3 +18,4 @@ HOST=$CROSS_ARCH-w64-mingw32 ./build-mingw-w64.sh $PREFIX --skip-include-triplet-prefix --host=$HOST ./install-wrappers.sh $PREFIX --host=$HOST ./prepare-cross-toolchain.sh $NATIVE $PREFIX $CROSS_ARCH +./build-make.sh $PREFIX --host=$HOST diff --git a/build-make.sh b/build-make.sh new file mode 100755 index 0000000..83f27f5 --- /dev/null +++ b/build-make.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +set -e + +unset HOST + +: ${MAKE_VERSION:=4.2.1} + +while [ $# -gt 0 ]; do + case "$1" in + --host=*) + HOST="${1#*=}" + ;; + *) + PREFIX="$1" + ;; + esac + shift +done +if [ -z "$PREFIX" ]; then + echo $0 [--host=] dest + exit 1 +fi + +mkdir -p "$PREFIX" +PREFIX="$(cd "$PREFIX" && pwd)" + +: ${CORES:=$(nproc 2>/dev/null)} +: ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)} +: ${CORES:=4} +: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}} + +download() { + if [ -n "$(which wget)" ]; then + wget "$1" + else + curl -LO "$1" + fi +} + +if [ ! -d make-$MAKE_VERSION ]; then + download https://ftp.gnu.org/gnu/make/make-$MAKE_VERSION.tar.bz2 + tar -jxf make-$MAKE_VERSION.tar.bz2 +fi + +cd make-$MAKE_VERSION + +if [ -n "$HOST" ]; then + CONFIGFLAGS="$CONFIGFLAGS --host=$HOST" + CROSS_NAME=-$HOST +fi + +mkdir -p build$CROSS_NAME +cd build$CROSS_NAME +../configure --prefix="$PREFIX" $CONFIGFLAGS --program-prefix=mingw32- --enable-job-server LDFLAGS="-Wl,-s" +make -j$CORES +make install-binPROGRAMS