From f5008d538008f8fd81255cbdef9c87ec55f59fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Tue, 16 Oct 2018 16:14:37 +0300 Subject: [PATCH] Merge build-mingw-w64-widl.sh back into build-mingw-w64.sh This allows checking out the mingw-w64 repo if it is missing, when building widl. --- Dockerfile | 2 +- Dockerfile.dev | 2 +- build-cross-tools.sh | 2 +- build-mingw-w64-widl.sh | 51 ---------------- build-mingw-w64.sh | 132 ++++++++++++++++++++++++++++------------ 5 files changed, 96 insertions(+), 93 deletions(-) delete mode 100755 build-mingw-w64-widl.sh diff --git a/Dockerfile b/Dockerfile index 0bd335e..e7ad0c4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ RUN ./install-wrappers.sh $TOOLCHAIN_PREFIX && \ rm -rf /build # Build MinGW-w64, compiler-rt and mingw-w64's extra libraries -COPY build-mingw-w64.sh build-mingw-w64-widl.sh build-compiler-rt.sh build-mingw-w64-libraries.sh ./ +COPY build-mingw-w64.sh build-compiler-rt.sh build-mingw-w64-libraries.sh ./ RUN ./build-mingw-w64.sh $TOOLCHAIN_PREFIX && \ ./build-compiler-rt.sh $TOOLCHAIN_PREFIX && \ ./build-mingw-w64-libraries.sh $TOOLCHAIN_PREFIX && \ diff --git a/Dockerfile.dev b/Dockerfile.dev index 20353fe..f2caf5b 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -37,7 +37,7 @@ COPY install-wrappers.sh ./ RUN ./install-wrappers.sh $TOOLCHAIN_PREFIX # Build MinGW-w64 -COPY build-mingw-w64.sh build-mingw-w64-widl.sh ./ +COPY build-mingw-w64.sh ./ RUN ./build-mingw-w64.sh $TOOLCHAIN_PREFIX # Build compiler-rt diff --git a/build-cross-tools.sh b/build-cross-tools.sh index ccbd584..fa2e614 100755 --- a/build-cross-tools.sh +++ b/build-cross-tools.sh @@ -16,6 +16,6 @@ export HOST=$CROSS_ARCH-w64-mingw32 ./build-llvm.sh $PREFIX ./strip-llvm.sh $PREFIX -./build-mingw-w64-widl.sh $PREFIX --skip-triplet-prefix +./build-mingw-w64.sh $PREFIX --skip-include-triplet-prefix ./install-wrappers.sh $PREFIX ./prepare-cross-toolchain.sh $NATIVE $PREFIX $CROSS_ARCH diff --git a/build-mingw-w64-widl.sh b/build-mingw-w64-widl.sh deleted file mode 100755 index 50735e9..0000000 --- a/build-mingw-w64-widl.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh - -set -e - -while [ $# -gt 0 ]; do - if [ "$1" = "--skip-triplet-prefix" ]; then - SKIP_TRIPLET_PREFIX=1 - else - PREFIX="$1" - fi - shift -done -if [ -z "$PREFIX" ]; then - echo $0 [--skip-triplet-prefix] dest - exit 1 -fi -# Not adding $PREFIX/bin to $PATH here, since that is expected to be -# a cross toolchain; the compiler is expected to be in $PATH already here. - -: ${CORES:=4} -: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}} - -if [ -n "$HOST" ]; then - CONFIGFLAGS="$CONFIGFLAGS --host=$HOST" - CROSS_NAME=$HOST- - EXEEXT=.exe -fi -if [ -n "$SKIP_TRIPLET_PREFIX" ]; then - CONFIGFLAGS="$CONFIGFLAGS --with-widl-includedir=$PREFIX/include" - # If using the same prefix, it's enough to build one single binary. - ALL_ARCHS="$ARCHS" - ARCHS=x86_64 -fi - -cd mingw-w64/mingw-w64-tools/widl -for arch in $ARCHS; do - mkdir -p build-$CROSS_NAME$arch - cd build-$CROSS_NAME$arch - ../configure --prefix=$PREFIX --target=$arch-w64-mingw32 $CONFIGFLAGS LDFLAGS="-Wl,-s" - make -j$CORES - make install - cd .. -done -if [ -n "$SKIP_TRIPLET_PREFIX" ]; then - cd $PREFIX/bin - for arch in $ALL_ARCHS; do - if [ "$arch" != "$ARCHS" ]; then - ln -sf $ARCHS-w64-mingw32-widl$EXEEXT $arch-w64-mingw32-widl$EXEEXT - fi - done -fi diff --git a/build-mingw-w64.sh b/build-mingw-w64.sh index 89d8e52..c0920d3 100755 --- a/build-mingw-w64.sh +++ b/build-mingw-w64.sh @@ -2,12 +2,26 @@ set -e -if [ $# -lt 1 ]; then - echo $0 dest +while [ $# -gt 0 ]; do + if [ "$1" = "--skip-include-triplet-prefix" ]; then + SKIP_INCLUDE_TRIPLET_PREFIX=1 + else + PREFIX="$1" + fi + shift +done +if [ -z "$PREFIX" ]; then + echo $0 [--skip-include-triplet-prefix] dest exit 1 fi -PREFIX="$1" -export PATH=$PREFIX/bin:$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 : ${CORES:=4} : ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}} @@ -24,44 +38,84 @@ if [ -n "$SYNC" ] || [ -n "$CHECKOUT" ]; then git checkout 5a61034d17feafe36d12d9b3069eb49dc91c9192 fi -cd mingw-w64-headers -mkdir -p build -cd build -../configure --prefix=$PREFIX/generic-w64-mingw32 \ - --enable-secure-api --enable-idl --with-default-win32-winnt=0x600 --with-default-msvcrt=ucrt INSTALL="install -C" -make install -cd ../.. -for arch in $ARCHS; do - mkdir -p $PREFIX/$arch-w64-mingw32 - ln -sfn ../generic-w64-mingw32/include $PREFIX/$arch-w64-mingw32/include -done +# 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-crt + cd mingw-w64-headers + mkdir -p build + cd build + ../configure --prefix=$HEADER_ROOT \ + --enable-secure-api --enable-idl --with-default-win32-winnt=0x600 --with-default-msvcrt=ucrt INSTALL="install -C" + make install + cd ../.. + if [ -z "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then + for arch in $ARCHS; do + mkdir -p $PREFIX/$arch-w64-mingw32 + ln -sfn ../generic-w64-mingw32/include $PREFIX/$arch-w64-mingw32/include + done + fi + + cd mingw-w64-crt + for arch in $ARCHS; do + 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=ucrt" + ../configure --host=$arch-w64-mingw32 --prefix=$PREFIX/$arch-w64-mingw32 $FLAGS \ + CC=$arch-w64-mingw32-clang AR=llvm-ar RANLIB=llvm-ranlib DLLTOOL=llvm-dlltool + make -j$CORES + make install + cd .. + done + cd .. +fi + +if [ -n "$HOST" ]; then + CONFIGFLAGS="$CONFIGFLAGS --host=$HOST" + CROSS_NAME=$HOST- + EXEEXT=.exe +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 +fi + +cd mingw-w64-tools/widl for arch in $ARCHS; do - 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=ucrt" - ../configure --host=$arch-w64-mingw32 --prefix=$PREFIX/$arch-w64-mingw32 $FLAGS \ - CC=$arch-w64-mingw32-clang AR=llvm-ar RANLIB=llvm-ranlib DLLTOOL=llvm-dlltool + mkdir -p build-$CROSS_NAME$arch + cd build-$CROSS_NAME$arch + ../configure --prefix=$PREFIX --target=$arch-w64-mingw32 $CONFIGFLAGS LDFLAGS="-Wl,-s" make -j$CORES make install cd .. done -cd .. - -cd .. -./build-mingw-w64-widl.sh "$PREFIX" +if [ -n "$SKIP_INCLUDE_TRIPLET_PREFIX" ]; then + cd $PREFIX/bin + for arch in $ALL_ARCHS; do + if [ "$arch" != "$ARCHS" ]; then + ln -sf $ARCHS-w64-mingw32-widl$EXEEXT $arch-w64-mingw32-widl$EXEEXT + fi + done +fi