diff --git a/build-cross-tools.sh b/build-cross-tools.sh new file mode 100755 index 0000000..6a3a41c --- /dev/null +++ b/build-cross-tools.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e + +if [ $# -lt 3 ]; then + echo $0 native prefix arch + exit 1 +fi +NATIVE="$1" +PREFIX="$2" +CROSS_ARCH="$3" + +export PATH=$NATIVE/bin:$PATH +export EXEEXT=.exe +export HOST=$CROSS_ARCH-w64-mingw32 + +./build-llvm.sh $PREFIX +./strip-llvm.sh $PREFIX +./install-wrappers.sh $PREFIX +./build-mingw-w64-widl.sh $PREFIX +./prepare-cross-toolchain.sh $NATIVE $PREFIX $CROSS_ARCH diff --git a/prepare-cross-toolchain.sh b/prepare-cross-toolchain.sh new file mode 100755 index 0000000..5fcb4a6 --- /dev/null +++ b/prepare-cross-toolchain.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +set -e + +if [ $# -lt 3 ]; then + echo $0 src dest arch + exit 1 +fi +SRC="$1" +DEST="$2" +CROSS_ARCH="$3" + +: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}} + +CLANG_VERSION=$(basename $(dirname $(dirname $(dirname $($SRC/bin/clang --print-libgcc-file-name -rtlib=compiler-rt))))) + +# If linked to a shared libc++/libunwind, we need to bundle those DLLs +# in the bin directory. +for i in libc++ libunwind; do + if [ -f $SRC/$CROSS_ARCH-w64-mingw32/bin/$i.dll ]; then + cp $SRC/$CROSS_ARCH-w64-mingw32/bin/$i.dll $DEST/bin + fi +done + +cp -a $SRC/lib/clang/$CLANG_VERSION/lib $DEST/lib/clang/$CLANG_VERSION +rm -rf $DEST/include +cp -a $SRC/generic-w64-mingw32/include $DEST/include +for arch in $ARCHS; do + mkdir -p $DEST/$arch-w64-mingw32 + for subdir in bin lib; do + cp -a $SRC/$arch-w64-mingw32/$subdir $DEST/$arch-w64-mingw32 + done +done