Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

153 lines
4.6KB

  1. #!/bin/bash
  2. set -ex
  3. BUILD_DIR=${TRAVIS_BUILD_DIR}
  4. mkdir -p "${DEPENDENCY_DIR}" && cd "${DEPENDENCY_DIR}"
  5. # --- CMake
  6. CMAKE_INSTALLER=install-cmake.sh
  7. if [[ ! -f ${CMAKE_INSTALLER} ]]
  8. then
  9. curl -sSL https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.sh -o ${CMAKE_INSTALLER}
  10. chmod +x ${CMAKE_INSTALLER}
  11. fi
  12. sudo ./${CMAKE_INSTALLER} --prefix=/usr/local --skip-license
  13. cmake --version
  14. cd ${DEPENDENCY_DIR}
  15. # --- LibC++
  16. #if [[ "${CXX}" = clang* ]]
  17. #then
  18. # if [[ ! -d "${DEPENDENCY_DIR}/llvm-source" ]]
  19. # then
  20. # LLVM_RELEASE=release_50
  21. # git clone --depth=1 -b ${LLVM_RELEASE} https://github.com/llvm-mirror/llvm.git llvm-source
  22. # git clone --depth=1 -b ${LLVM_RELEASE} https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx
  23. # git clone --depth=1 -b ${LLVM_RELEASE} https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi
  24. # fi
  25. #
  26. # mkdir -p build && cd build
  27. #
  28. # cmake -DCMAKE_C_COMPILER=${CC} \
  29. # -DCMAKE_CXX_COMPILER=${CXX} \
  30. # -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  31. # -DCMAKE_INSTALL_PREFIX=/usr \
  32. # -DLIBCXX_ABI_UNSTABLE=ON \
  33. # ../llvm-source
  34. # make cxx -j4
  35. #
  36. # sudo make install-cxxabi install-cxx
  37. # rm -rf *
  38. #fi
  39. # source: https://github.com/ericniebler/range-v3
  40. TRUNK_VERSION="5.*"
  41. set -e
  42. # The pattern of clang --version is: clang version X.Y.Z (sometimes, see below).
  43. COMPILER_VERSION_OUTPUT="$($CXX --version)"
  44. arr=(${COMPILER_VERSION_OUTPUT// / })
  45. COMPILER="${arr[0]}"
  46. VERSION="${arr[2]}"
  47. case $COMPILER in
  48. "clang")
  49. # Some Ubuntu clang builds are advertised as "just clang", but the
  50. # Version still follows the pattern: 3.6.2-svn240577-1~exp1
  51. # echo "Compiler is clang :)"
  52. arr2=(${VERSION//-/ })
  53. VERSION="${arr2[0]}"
  54. ;;
  55. "Ubuntu")
  56. # Ubuntu renames _some_ (not all) of its clang compilers, the pattern of
  57. # clang --version is then:
  58. # Ubuntu clang version 3.6.2-svn240577-1~exp1
  59. COMPILER="${arr[1]}"
  60. VERSION="${arr[3]}"
  61. arr2=(${VERSION//-/ })
  62. VERSION="${arr2[0]}"
  63. ;;
  64. *)
  65. echo "case did not match: compiler: ${COMPILER}"
  66. exit 1
  67. ;;
  68. esac
  69. if [ ${COMPILER} != "clang" ]; then
  70. echo "Error: trying to install libc++ for a compiler that is not clang: ${COMPILER}"
  71. exit 1
  72. fi
  73. if [ -z ${VERSION+x} ]; then
  74. echo "libc++ version is not set. To set the libc++ version: ./install_libcxx.sh -v X.Y.Z"
  75. exit 4
  76. fi
  77. if [[ ${VERSION} == $TRUNK_VERSION ]]; then
  78. echo "Fetching libc++ and libc++abi tip-of-trunk..."
  79. # Checkout LLVM sources
  80. git clone --depth=1 https://github.com/llvm-mirror/llvm.git llvm-source
  81. git clone --depth=1 https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx
  82. git clone --depth=1 https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi
  83. else
  84. echo "Fetching libc++/libc++abi version: ${VERSION}..."
  85. LLVM_URL="http://releases.llvm.org/${VERSION}/llvm-${VERSION}.src.tar.xz"
  86. LIBCXX_URL="http://releases.llvm.org/${VERSION}/libcxx-${VERSION}.src.tar.xz"
  87. LIBCXXABI_URL="http://releases.llvm.org/${VERSION}/libcxxabi-${VERSION}.src.tar.xz"
  88. curl -O $LLVM_URL
  89. curl -O $LIBCXX_URL
  90. curl -O $LIBCXXABI_URL
  91. mkdir llvm-source
  92. mkdir llvm-source/projects
  93. mkdir llvm-source/projects/libcxx
  94. mkdir llvm-source/projects/libcxxabi
  95. tar -xf llvm-${VERSION}.src.tar.xz -C llvm-source --strip-components=1
  96. tar -xf libcxx-${VERSION}.src.tar.xz -C llvm-source/projects/libcxx --strip-components=1
  97. tar -xf libcxxabi-${VERSION}.src.tar.xz -C llvm-source/projects/libcxxabi --strip-components=1
  98. fi
  99. mkdir llvm-build
  100. cd llvm-build
  101. # - libc++ versions < 4.x do not have the install-cxxabi and install-cxx targets
  102. # - only ASAN is enabled for clang/libc++ versions < 4.x
  103. if [[ $VERSION == *"3."* ]]; then
  104. cmake -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} \
  105. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr \
  106. ../llvm-source
  107. if [[ $SANITIZER == "Address;Undefined" ]]; then
  108. ASAN_FLAGS="-fsanitize=address"
  109. cmake -DCMAKE_CXX_FLAGS="${ASAN_FLAGS}" -DCMAKE_EXE_LINKER_FLAGS="${ASAN_FLAGS}" ../llvm-source
  110. fi
  111. make cxx -j2 VERBOSE=0
  112. sudo cp -r lib/* /usr/lib/
  113. sudo cp -r include/c++ /usr/include/
  114. else
  115. cmake -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} \
  116. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr \
  117. -DLIBCXX_ABI_UNSTABLE=ON \
  118. -DLLVM_USE_SANITIZER=${SANITIZER} \
  119. ../llvm-source
  120. make cxx -j2 VERBOSE=0
  121. sudo make install-cxxabi install-cxx
  122. fi
  123. cd ${BUILD_DIR}