osxcross/tools/gen_cyglto_dll.sh

65 lines
1.8 KiB
Bash
Raw Normal View History

2016-09-22 18:58:45 +02:00
#!/usr/bin/env bash
#
# Build and install the LTO library, which the Cygwin package of
# libLLVM is lacking.
#
2016-09-22 18:58:45 +02:00
pushd "${0%/*}/.." &>/dev/null
source tools/tools.sh
if [[ $PLATFORM != CYGWIN* ]]; then
exit 1
fi
LLVM_CONFIG="llvm-config"
CXXFLAGS="$($LLVM_CONFIG --cxxflags) -fno-PIC"
LDFLAGS="$($LLVM_CONFIG --cxxflags) -Wl,-s"
INCDIR=$($LLVM_CONFIG --includedir)
LIBDIR=$($LLVM_CONFIG --libdir)
LIBS=$($LLVM_CONFIG --libs all)
SYSLIBS="$($LLVM_CONFIG --system-libs) -ledit -lffi"
VERSION=$($LLVM_CONFIG --version | awk -F \. {'print $1$2'} | sed 's/svn//g')
set -e
TMP=$(mktemp -d)
set +e
pushd $TMP &>/dev/null
wget https://raw.githubusercontent.com/llvm-mirror/llvm/release_$VERSION/tools/lto/lto.cpp
wget https://raw.githubusercontent.com/llvm-mirror/llvm/release_$VERSION/tools/lto/LTODisassembler.cpp
wget https://raw.githubusercontent.com/llvm-mirror/llvm/release_$VERSION/tools/lto/lto.exports
echo "{" > cyglto.exports
echo " global:" >> cyglto.exports
2016-09-22 18:58:45 +02:00
while read p; do
echo " $p;" >> cyglto.exports
2016-09-22 18:58:45 +02:00
done < lto.exports
echo " LLVM*;" >> cyglto.exports
echo " local: *;" >> cyglto.exports
echo "};" >> cyglto.exports
if [ $ARCH == "x86_64" ]; then
# https://github.com/tpoechtrager/osxcross/issues/91
mkdir -p llvm/LTO
echo "#undef off_t" > llvm/LTO/LTOModule.h
echo "#define off_t long long" >> llvm/LTO/LTOModule.h
echo "#include_next \"llvm/LTO/LTOModule.h\"" >> llvm/LTO/LTOModule.h
CXXFLAGS="-I $TMP $CXXFLAGS"
fi
2016-09-22 18:58:45 +02:00
popd &>/dev/null
set -x
g++ -shared \
-L$LIBDIR -I$INCDIR $CXXFLAGS $LDFLAGS \
$TMP/lto.cpp $TMP/LTODisassembler.cpp -Wl,-version-script,$TMP/cyglto.exports \
-Wl,--whole-archive $LIBS -Wl,--no-whole-archive $SYSLIBS \
2016-09-22 18:58:45 +02:00
-o /bin/cygLTO.dll -Wl,--out-implib,/lib/libLTO.dll.a
rm -rf $TMP
popd &>/dev/null