build-mingw-w64: Split out building tools to a separate script
This simplifies build-mingw-w64.sh. When building on native windows (where we also provide unprefixed tools, we can't have the yet incomplete compiler toolchain in $PATH when building the mingw-w64 tools. (Logically, build-mingw-w64-tools belong with build-llvm and install-wrappers; using the original system compiler to build tools that are supposed to run on the current machine, as opposed to the cross target, like when building the runtimes.)
This commit is contained in:
1 parent
57b7ffd84d
commit
3fd3e58979
6 files changed
+160
-116
No files matched your search
+45
-113
@@ -19,7 +19,6 @@ set -e
|
||||
: ${DEFAULT_WIN32_WINNT:=0x601}
|
||||
: ${DEFAULT_MSVCRT:=ucrt}
|
||||
: ${MINGW_W64_VERSION:=76e56e6fb70d3a21e054c2c0de8822c108807d28}
|
||||
unset HOST
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
@@ -32,9 +31,6 @@ while [ $# -gt 0 ]; do
|
||||
--with-default-msvcrt=*)
|
||||
DEFAULT_MSVCRT="${1#*=}"
|
||||
;;
|
||||
--host=*)
|
||||
HOST="${1#*=}"
|
||||
;;
|
||||
*)
|
||||
PREFIX="$1"
|
||||
;;
|
||||
@@ -43,7 +39,7 @@ while [ $# -gt 0 ]; do
|
||||
done
|
||||
if [ -z "$CHECKOUT_ONLY" ]; then
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo $0 [--skip-include-triplet-prefix] [--with-default-win32-winnt=0x601] [--with-default-msvcrt=ucrt] [--host=<triple>] dest
|
||||
echo $0 [--skip-include-triplet-prefix] [--with-default-win32-winnt=0x601] [--with-default-msvcrt=ucrt] dest
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -70,123 +66,59 @@ if [ "$(which gmake)" != "" ]; then
|
||||
MAKE=gmake
|
||||
fi
|
||||
|
||||
ORIGPATH="$PATH"
|
||||
if [ -z "$HOST" ]; then
|
||||
# The newly built toolchain isn't crosscompiled; add it to the path.
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
else
|
||||
# Crosscompiling the toolchain itself; the cross compiler is
|
||||
# expected to already be in $PATH.
|
||||
true
|
||||
fi
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
: ${CORES:=$(nproc 2>/dev/null)}
|
||||
: ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)}
|
||||
: ${CORES:=4}
|
||||
: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}}
|
||||
|
||||
# If crosscompiling the toolchain itself, we already have a mingw-w64
|
||||
# runtime and don't need to rebuild it.
|
||||
if [ -z "$HOST" ]; then
|
||||
if [ -z "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then
|
||||
HEADER_ROOT="$PREFIX/generic-w64-mingw32"
|
||||
else
|
||||
HEADER_ROOT="$PREFIX"
|
||||
fi
|
||||
|
||||
cd mingw-w64-headers
|
||||
[ -z "$CLEAN" ] || rm -rf build
|
||||
mkdir -p build
|
||||
cd build
|
||||
../configure --prefix="$HEADER_ROOT" \
|
||||
--enable-idl --with-default-win32-winnt=$DEFAULT_WIN32_WINNT --with-default-msvcrt=$DEFAULT_MSVCRT INSTALL="install -C"
|
||||
$MAKE install
|
||||
cd ../..
|
||||
if [ -z "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then
|
||||
for arch in $ARCHS; do
|
||||
mkdir -p "$PREFIX/$arch-w64-mingw32"
|
||||
if [ ! -e "$PREFIX/$arch-w64-mingw32/include" ]; then
|
||||
ln -sfn ../generic-w64-mingw32/include "$PREFIX/$arch-w64-mingw32/include"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
cd mingw-w64-crt
|
||||
for arch in $ARCHS; do
|
||||
[ -z "$CLEAN" ] || rm -rf build-$arch
|
||||
mkdir -p build-$arch
|
||||
cd build-$arch
|
||||
case $arch in
|
||||
armv7)
|
||||
FLAGS="--disable-lib32 --disable-lib64 --enable-libarm32"
|
||||
;;
|
||||
aarch64)
|
||||
FLAGS="--disable-lib32 --disable-lib64 --enable-libarm64"
|
||||
;;
|
||||
i686)
|
||||
FLAGS="--enable-lib32 --disable-lib64"
|
||||
;;
|
||||
x86_64)
|
||||
FLAGS="--disable-lib32 --enable-lib64"
|
||||
;;
|
||||
esac
|
||||
FLAGS="$FLAGS --with-default-msvcrt=$DEFAULT_MSVCRT"
|
||||
../configure --host=$arch-w64-mingw32 --prefix="$PREFIX/$arch-w64-mingw32" $FLAGS
|
||||
$MAKE -j$CORES
|
||||
$MAKE install
|
||||
cd ..
|
||||
done
|
||||
cd ..
|
||||
fi
|
||||
|
||||
if [ -n "$HOST" ]; then
|
||||
CONFIGFLAGS="$CONFIGFLAGS --host=$HOST"
|
||||
CROSS_NAME=$HOST-
|
||||
EXEEXT=.exe
|
||||
if [ -z "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then
|
||||
HEADER_ROOT="$PREFIX/generic-w64-mingw32"
|
||||
else
|
||||
case $(uname) in
|
||||
MINGW*)
|
||||
EXEEXT=.exe
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ -n "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then
|
||||
CONFIGFLAGS="$CONFIGFLAGS --with-widl-includedir=$PREFIX/include"
|
||||
# If using the same includedir for all archs, it's enough to
|
||||
# build one single binary.
|
||||
ALL_ARCHS="$ARCHS"
|
||||
ARCHS=x86_64
|
||||
HEADER_ROOT="$PREFIX"
|
||||
fi
|
||||
|
||||
# If building on windows, we've installed prefixless wrappers - these break
|
||||
# building widl, as the toolchain isn't functional yet. Restore the original
|
||||
# path.
|
||||
export PATH="$ORIGPATH"
|
||||
cd mingw-w64-tools/widl
|
||||
for arch in $ARCHS; do
|
||||
[ -z "$CLEAN" ] || rm -rf build-$CROSS_NAME$arch
|
||||
mkdir -p build-$CROSS_NAME$arch
|
||||
cd build-$CROSS_NAME$arch
|
||||
../configure --prefix="$PREFIX" --target=$arch-w64-mingw32 $CONFIGFLAGS
|
||||
$MAKE -j$CORES
|
||||
$MAKE install-strip
|
||||
cd ..
|
||||
done
|
||||
cd "$PREFIX/bin"
|
||||
if [ -n "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then
|
||||
for arch in $ALL_ARCHS; do
|
||||
if [ "$arch" != "$ARCHS" ]; then
|
||||
ln -sf $ARCHS-w64-mingw32-widl$EXEEXT $arch-w64-mingw32-widl$EXEEXT
|
||||
cd mingw-w64-headers
|
||||
[ -z "$CLEAN" ] || rm -rf build
|
||||
mkdir -p build
|
||||
cd build
|
||||
../configure --prefix="$HEADER_ROOT" \
|
||||
--enable-idl --with-default-win32-winnt=$DEFAULT_WIN32_WINNT --with-default-msvcrt=$DEFAULT_MSVCRT INSTALL="install -C"
|
||||
$MAKE install
|
||||
cd ../..
|
||||
if [ -z "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then
|
||||
for arch in $ARCHS; do
|
||||
mkdir -p "$PREFIX/$arch-w64-mingw32"
|
||||
if [ ! -e "$PREFIX/$arch-w64-mingw32/include" ]; then
|
||||
ln -sfn ../generic-w64-mingw32/include "$PREFIX/$arch-w64-mingw32/include"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -n "$EXEEXT" ]; then
|
||||
if [ -z "$HOST" ] && [ -f clang$EXEEXT ]; then
|
||||
HOST=$(./clang -dumpmachine | sed 's/-.*//')-w64-mingw32
|
||||
fi
|
||||
if [ -n "$HOST" ]; then
|
||||
ln -sf $HOST-widl$EXEEXT widl$EXEEXT
|
||||
fi
|
||||
fi
|
||||
|
||||
cd mingw-w64-crt
|
||||
for arch in $ARCHS; do
|
||||
[ -z "$CLEAN" ] || rm -rf build-$arch
|
||||
mkdir -p build-$arch
|
||||
cd build-$arch
|
||||
case $arch in
|
||||
armv7)
|
||||
FLAGS="--disable-lib32 --disable-lib64 --enable-libarm32"
|
||||
;;
|
||||
aarch64)
|
||||
FLAGS="--disable-lib32 --disable-lib64 --enable-libarm64"
|
||||
;;
|
||||
i686)
|
||||
FLAGS="--enable-lib32 --disable-lib64"
|
||||
;;
|
||||
x86_64)
|
||||
FLAGS="--disable-lib32 --enable-lib64"
|
||||
;;
|
||||
esac
|
||||
FLAGS="$FLAGS --with-default-msvcrt=$DEFAULT_MSVCRT"
|
||||
../configure --host=$arch-w64-mingw32 --prefix="$PREFIX/$arch-w64-mingw32" $FLAGS
|
||||
$MAKE -j$CORES
|
||||
$MAKE install
|
||||
cd ..
|
||||
done
|
||||
cd ..
|
||||
Reference in new issue
Block a user