blob: 113f9d4de6e478d9899104722e00d8548f4b09c2 [file] [log] [blame]
#!/bin/bash
#-------------------------------------------------------------------------------------------------------
# Copyright (C) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
#-------------------------------------------------------------------------------------------------------
LLVM_VERSION="5.0.0"
DEFAULT_COLOR='\033[0m'
ERROR_COLOR='\033[0;31m'
GREEN_COLOR='\033[0;32m'
CC_URL="git://sourceware.org/git/binutils-gdb.git\nhttp://llvm.org/releases/${LLVM_VERSION}/\n"
if [[ $1 == '-y' || $1 == '-Y' ]]; then
ALWAYS_YES=1
fi
WARN_LICENSE () {
echo -e "${ERROR_COLOR}"
echo -e "----------------------------------------------------------------"
echo -e "${DEFAULT_COLOR}"
echo -e "This script will download LLVM/CLANG and LLVM Gold Bintools from\n${CC_URL}\n"
echo "These software are licensed to you by its publisher(s), not Microsoft."
echo "Microsoft is not responsible for the software."
echo "Your installation and use of the software is subject to the publisher's terms available here:"
echo -e "http://llvm.org/docs/DeveloperPolicy.html#license\nhttp://llvm.org/docs/GoldPlugin.html#licensing"
echo -e "${ERROR_COLOR}"
echo -e "----------------------------------------------------------------\n"
echo -e "${GREEN_COLOR}If you don't agree, press Ctrl+C to terminate${DEFAULT_COLOR}"
WAIT_QUESTION="Hit ENTER to continue (or wait 20 seconds)"
if [[ $ALWAYS_YES == 1 ]]; then
echo "$WAIT_QUESTION : Y"
else
read -t 20 -p "$WAIT_QUESTION"
fi
echo -e "\nWell, this will take some time... [and free memory 2GB+]\n"
}
WARN_PACKAGE () {
echo -e "\n${GREEN_COLOR}"
echo -e "----------------------------------------------------------------${DEFAULT_COLOR}"
echo "This script requires (texinfo texi2html csh gawk automake libtool libtool-bin bison flex ncurses-devel)"
echo "Automated installation of these requirements is supported with apt-get and yum only."
echo ""
echo "If you don't have these packages are installed, press Ctrl+C to terminate"
echo -e "${GREEN_COLOR}----------------------------------------------------------------"
echo -e "${DEFAULT_COLOR}"
WAIT_QUESTION="Hit ENTER to continue (or wait 20 seconds)"
if [[ $ALWAYS_YES == 1 ]]; then
echo "$WAIT_QUESTION : Y"
else
read -t 20 -p "$WAIT_QUESTION"
fi
}
DOWNLOAD_HELPER() {
WGET_CTR=1
while [ 1 ]; do
wget --no-dns-cache --tries=3 --retry-connrefused --waitretry=3 $1 >/dev/null 2>&1
if [[ $? == 0 ]]; then
break;
else
if [[ $WGET_CTR == 3 ]]; then
echo "Failed to download $1"
exit 1
fi
WGET_CTR=$(($WGET_CTR + 1))
echo "${WGET_CTR}. try...."
fi
done;
}
ROOT=${PWD}/cc-toolchain/
GOLD_PLUGIN=""
if [ ! -d ./cc-toolchain/src/llvm/projects/compiler-rt ]; then
rm -rf cc-toolchain
mkdir cc-toolchain
cd cc-toolchain
mkdir src
mkdir bin
cd src
if [[ "$OSTYPE" =~ "darwin" ]]; then # osx
echo "This script is not prepared for OSX"
exit 0
else
WARN_LICENSE
apt-get -v >/dev/null 2>&1
if [ $? == 0 ]; then # debian
apt-get install -y apt-file texinfo texi2html csh gawk automake libtool \
libtool-bin bison flex libncurses5-dev
if [ $? != 0 ]; then
WARN_PACKAGE
fi
else
yum -v >/dev/null 2>&1
if [ $? == 0 ]; then # redhat
yum install -y texinfo texi2html csh gawk automake libtool libtool-bin bison flex ncurses-devel
else
WARN_PACKAGE
fi
fi
fi
mkdir lto_utils
cd lto_utils
echo "Downloading LLVM Gold Plugin"
git clone --depth 1 git://sourceware.org/git/binutils-gdb.git binutils >/dev/null 2>&1
mkdir binutils_compile; cd binutils_compile
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/build/lib/"
../binutils/configure --enable-gold --enable-plugins --disable-werror --prefix="${ROOT}/build"
make -j4
make install
if [ $? != 0 ]; then
exit 1
fi
echo -e "\n\n\n\n"
cd "${ROOT}/src/"
echo "Downloading LLVM ${LLVM_VERSION}"
DOWNLOAD_HELPER "http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz"
tar xf "llvm-${LLVM_VERSION}.src.tar.xz"
if [ $? == 0 ]; then
rm "llvm-${LLVM_VERSION}.src.tar.xz"
mv "llvm-${LLVM_VERSION}.src" llvm
else
exit 1
fi
cd llvm/tools/
echo "Downloading Clang ${LLVM_VERSION}"
DOWNLOAD_HELPER "http://llvm.org/releases/${LLVM_VERSION}/cfe-${LLVM_VERSION}.src.tar.xz"
tar xf "cfe-${LLVM_VERSION}.src.tar.xz"
if [ $? == 0 ]; then
mv "cfe-${LLVM_VERSION}.src" clang
rm "cfe-${LLVM_VERSION}.src.tar.xz"
else
exit 1
fi
mkdir -p ../projects/
cd ../projects/
echo "Downloading Compiler-RT ${LLVM_VERSION}"
DOWNLOAD_HELPER "http://llvm.org/releases/${LLVM_VERSION}/compiler-rt-${LLVM_VERSION}.src.tar.xz"
tar xf "compiler-rt-${LLVM_VERSION}.src.tar.xz"
if [ $? == 0 ]; then
mv "compiler-rt-${LLVM_VERSION}.src" compiler-rt
rm "compiler-rt-${LLVM_VERSION}.src.tar.xz"
else
exit 1
fi
fi
GOLD_PLUGIN=-DLLVM_BINUTILS_INCDIR="${ROOT}/src/lto_utils/binutils/include"
mkdir -p "${ROOT}/build"
cd "${ROOT}/src/llvm"
mkdir -p build_
cd build_
cmake ../ -DCMAKE_INSTALL_PREFIX="${ROOT}/build" -DCMAKE_BUILD_TYPE=Release ${GOLD_PLUGIN}
if [ $? != 0 ]; then
cd ..
rm -rf build_
mkdir build_
exit 1
fi
make -j4 install
if [ $? == 0 ]; then
echo -e "Done!\n./build.sh args are given below;\n\n"
# Create a local bfd-plugins and copy LLVMgold.so into there.
mkdir -p "${ROOT}/build/lib/bfd-plugins/"
cp "${ROOT}/build/lib/LLVMgold.so" "${ROOT}/build/lib/bfd-plugins/"
echo "--cxx=${ROOT}/build/bin/clang++ --cc=${ROOT}/build/bin/clang"
fi