| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #!/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
|