Skip to content

Commit c8d181f

Browse files
committed
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.
1 parent 57c4f47 commit c8d181f

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

Dockerfile.cross

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ RUN ./install-wrappers.sh $CROSS_TOOLCHAIN_PREFIX --host=$HOST
4040
COPY prepare-cross-toolchain.sh .
4141
RUN ./prepare-cross-toolchain.sh $TOOLCHAIN_PREFIX $CROSS_TOOLCHAIN_PREFIX $CROSS_ARCH
4242

43+
COPY build-make.sh .
44+
RUN ./build-make.sh $CROSS_TOOLCHAIN_PREFIX --host=$HOST
45+
4346
ARG TAG
4447
RUN ln -s $CROSS_TOOLCHAIN_PREFIX llvm-mingw && \
4548
zip -9r /llvm-mingw-$TAG$CROSS_ARCH.zip llvm-mingw && \

build-cross-tools.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ HOST=$CROSS_ARCH-w64-mingw32
1818
./build-mingw-w64.sh $PREFIX --skip-include-triplet-prefix --host=$HOST
1919
./install-wrappers.sh $PREFIX --host=$HOST
2020
./prepare-cross-toolchain.sh $NATIVE $PREFIX $CROSS_ARCH
21+
./build-make.sh $PREFIX --host=$HOST

build-make.sh

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
unset HOST
6+
7+
: ${MAKE_VERSION:=4.2.1}
8+
9+
while [ $# -gt 0 ]; do
10+
case "$1" in
11+
--host=*)
12+
HOST="${1#*=}"
13+
;;
14+
*)
15+
PREFIX="$1"
16+
;;
17+
esac
18+
shift
19+
done
20+
if [ -z "$PREFIX" ]; then
21+
echo $0 [--host=<triple>] dest
22+
exit 1
23+
fi
24+
25+
mkdir -p "$PREFIX"
26+
PREFIX="$(cd "$PREFIX" && pwd)"
27+
28+
: ${CORES:=$(nproc 2>/dev/null)}
29+
: ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)}
30+
: ${CORES:=4}
31+
: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}}
32+
33+
download() {
34+
if [ -n "$(which wget)" ]; then
35+
wget "$1"
36+
else
37+
curl -LO "$1"
38+
fi
39+
}
40+
41+
if [ ! -d make-$MAKE_VERSION ]; then
42+
download https://ftp.gnu.org/gnu/make/make-$MAKE_VERSION.tar.bz2
43+
tar -jxf make-$MAKE_VERSION.tar.bz2
44+
fi
45+
46+
cd make-$MAKE_VERSION
47+
48+
if [ -n "$HOST" ]; then
49+
CONFIGFLAGS="$CONFIGFLAGS --host=$HOST"
50+
CROSS_NAME=-$HOST
51+
fi
52+
53+
mkdir -p build$CROSS_NAME
54+
cd build$CROSS_NAME
55+
../configure --prefix="$PREFIX" $CONFIGFLAGS --program-prefix=mingw32- --enable-job-server LDFLAGS="-Wl,-s"
56+
make -j$CORES
57+
make install-binPROGRAMS

0 commit comments

Comments
 (0)