2014-11-10 20:43:14 +01:00
|
|
|
#!/usr/bin/env bash
|
2017-01-18 10:47:13 +01:00
|
|
|
#
|
|
|
|
# Build and install Clang/LLVM, using `gcc`.
|
|
|
|
#
|
|
|
|
# You only need to run this if your distribution does not provide
|
|
|
|
# clang - or if you want to build your own version from a recent
|
|
|
|
# source tree.
|
|
|
|
#
|
2014-11-10 20:43:14 +01:00
|
|
|
|
|
|
|
pushd "${0%/*}" &>/dev/null
|
|
|
|
|
|
|
|
DESC=clang
|
|
|
|
USESYSTEMCOMPILER=1
|
|
|
|
|
|
|
|
source tools/tools.sh
|
|
|
|
|
2015-05-09 17:30:41 +02:00
|
|
|
mkdir -p $BUILD_DIR
|
|
|
|
|
2014-11-10 20:43:14 +01:00
|
|
|
source $BASE_DIR/tools/trap_exit.sh
|
|
|
|
|
2019-10-09 11:34:47 +02:00
|
|
|
MIRROR="https://releases.llvm.org"
|
2014-11-10 20:43:14 +01:00
|
|
|
|
|
|
|
if [ -z "$CLANG_VERSION" ]; then
|
2019-06-03 18:35:37 +02:00
|
|
|
CLANG_VERSION=8.0.0
|
2014-11-10 20:43:14 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "$INSTALLPREFIX" ]; then
|
|
|
|
INSTALLPREFIX="/usr/local"
|
|
|
|
fi
|
|
|
|
|
|
|
|
require wget
|
2016-09-23 21:42:13 +02:00
|
|
|
require cmake
|
2014-11-10 20:43:14 +01:00
|
|
|
|
|
|
|
function warn_if_installed()
|
|
|
|
{
|
2014-12-06 16:13:40 +01:00
|
|
|
set +e
|
2014-11-10 20:43:14 +01:00
|
|
|
which $1 &>/dev/null && \
|
|
|
|
{
|
|
|
|
echo ""
|
|
|
|
echo "It is highly recommended to uninstall previous $2 versions first:"
|
|
|
|
echo "-> $(which $1 2>/dev/null)"
|
|
|
|
echo ""
|
|
|
|
}
|
2014-12-06 16:13:40 +01:00
|
|
|
set -e
|
2014-11-10 20:43:14 +01:00
|
|
|
}
|
|
|
|
|
2014-11-11 22:54:03 +01:00
|
|
|
if [ $PLATFORM != "Darwin" -a $PLATFORM != "FreeBSD" ]; then
|
2014-11-10 20:43:14 +01:00
|
|
|
warn_if_installed clang clang
|
|
|
|
warn_if_installed llvm-config llvm
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Building Clang/LLVM $CLANG_VERSION may take a long time."
|
|
|
|
echo "Installation Prefix: $INSTALLPREFIX"
|
2015-06-27 19:01:56 +02:00
|
|
|
|
|
|
|
if [ -z "$UNATTENDED" ]; then
|
2015-10-04 19:07:55 +02:00
|
|
|
echo ""
|
2015-06-27 19:01:56 +02:00
|
|
|
read -p "Press enter to start building."
|
|
|
|
echo ""
|
|
|
|
fi
|
2014-11-10 20:43:14 +01:00
|
|
|
|
2014-11-11 22:54:03 +01:00
|
|
|
pushd $TARBALL_DIR &>/dev/null
|
2014-11-10 20:43:14 +01:00
|
|
|
|
2015-07-17 19:55:29 +02:00
|
|
|
if [ -z "$PKGCOMPRESSOR" ]; then
|
|
|
|
PKGCOMPRESSOR="tar.xz"
|
2018-12-12 20:29:18 +01:00
|
|
|
[ $CLANG_VERSION == "3.4.2" ] && PKGCOMPRESSOR="tar.gz"
|
2015-07-17 19:55:29 +02:00
|
|
|
fi
|
2014-11-10 20:43:14 +01:00
|
|
|
|
2018-12-12 20:27:58 +01:00
|
|
|
LLVM_PKG="$MIRROR/${CLANG_VERSION}/"
|
2015-07-17 19:55:29 +02:00
|
|
|
LLVM_PKG+="llvm-${CLANG_VERSION}.src.${PKGCOMPRESSOR}"
|
2014-11-10 20:43:14 +01:00
|
|
|
|
2018-12-12 20:27:58 +01:00
|
|
|
CLANG_PKG="$MIRROR/${CLANG_VERSION}/"
|
2015-07-17 19:55:29 +02:00
|
|
|
CLANG_PKG+="cfe-${CLANG_VERSION}.src.${PKGCOMPRESSOR}"
|
2014-11-10 20:43:14 +01:00
|
|
|
|
|
|
|
wget -c $LLVM_PKG
|
|
|
|
wget -c $CLANG_PKG
|
2014-11-11 22:54:03 +01:00
|
|
|
|
2014-11-10 20:43:14 +01:00
|
|
|
popd &>/dev/null
|
|
|
|
|
2014-11-11 22:54:03 +01:00
|
|
|
pushd $BUILD_DIR &>/dev/null
|
|
|
|
|
2014-11-10 20:43:14 +01:00
|
|
|
echo "cleaning up ..."
|
|
|
|
|
|
|
|
rm -rf llvm* 2>/dev/null
|
|
|
|
|
2019-06-04 18:34:11 +02:00
|
|
|
extract "$TARBALL_DIR/$(basename $LLVM_PKG)"
|
2014-11-10 20:43:14 +01:00
|
|
|
|
|
|
|
pushd llvm* &>/dev/null
|
|
|
|
pushd tools &>/dev/null
|
|
|
|
|
2019-06-04 18:34:11 +02:00
|
|
|
extract "$TARBALL_DIR/$(basename $CLANG_PKG)"
|
|
|
|
echo ""
|
|
|
|
|
2014-11-10 20:43:14 +01:00
|
|
|
[ -e clang* ] && mv clang* clang
|
|
|
|
[ -e cfe* ] && mv cfe* clang
|
|
|
|
|
|
|
|
popd &>/dev/null
|
|
|
|
|
|
|
|
function build()
|
|
|
|
{
|
|
|
|
stage=$1
|
|
|
|
mkdir -p $stage
|
|
|
|
pushd $stage &>/dev/null
|
2016-09-23 21:42:13 +02:00
|
|
|
cmake .. \
|
2019-06-03 18:35:37 +02:00
|
|
|
-DCMAKE_INSTALL_PREFIX=$INSTALLPREFIX \
|
|
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
|
|
-DLLVM_ENABLE_ASSERTIONS=OFF \
|
|
|
|
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=1
|
2014-11-10 20:43:14 +01:00
|
|
|
$MAKE $2 -j $JOBS VERBOSE=1
|
|
|
|
popd &>/dev/null
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ -n "$DISABLE_BOOTSTRAP" ]; then
|
|
|
|
build build
|
|
|
|
else
|
2016-09-23 21:42:13 +02:00
|
|
|
build build_stage1 clang
|
2014-11-10 20:43:14 +01:00
|
|
|
|
2016-09-23 21:42:13 +02:00
|
|
|
export CC=$PWD/build_stage1/bin/clang
|
|
|
|
export CXX=$PWD/build_stage1/bin/clang++
|
2014-11-10 20:43:14 +01:00
|
|
|
|
|
|
|
if [ -z "$PORTABLE" ]; then
|
|
|
|
export CFLAGS="-march=native"
|
|
|
|
export CXXFLAGS="-march=native"
|
|
|
|
fi
|
|
|
|
|
|
|
|
build build_stage2
|
|
|
|
|
|
|
|
if [ -n "$ENABLE_FULL_BOOTSTRAP" ]; then
|
2016-09-23 21:42:13 +02:00
|
|
|
CC=$PWD/build_stage2/bin/clang \
|
|
|
|
CXX=$PWD/build_stage2/bin/clang++ \
|
2014-11-10 20:43:14 +01:00
|
|
|
build build_stage3
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "Done!"
|
|
|
|
echo ""
|
|
|
|
echo -n "cd into '$PWD/$stage' and type 'make install' to install "
|
|
|
|
echo "clang/llvm to '$INSTALLPREFIX'"
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
popd &>/dev/null # llvm
|
|
|
|
popd &>/dev/null
|