diff options
Diffstat (limited to 'scripts/build/p-llvm.inc')
-rw-r--r-- | scripts/build/p-llvm.inc | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/scripts/build/p-llvm.inc b/scripts/build/p-llvm.inc index d0c362c2..845f1b9d 100644 --- a/scripts/build/p-llvm.inc +++ b/scripts/build/p-llvm.inc @@ -93,21 +93,26 @@ download_llvm() { # Skip step if we already checked out code [[ -f "${LLVM_SRC_BASE}/.src_checked_out" ]] && return 0 - # Checkout LLVM code - svn co "http://llvm.org/svn/llvm-project/llvm/branches/release_${LLVM_VERSION_SHORT}" "${LLVM_SRC_BASE}" - cd "${LLVM_SRC_BASE}/tools" || (echo "Directory does not exist"; exit 1) - svn co "http://llvm.org/svn/llvm-project/cfe/branches/release_${LLVM_VERSION_SHORT}" clang - cd "${LLVM_SRC_BASE}/projects" || (echo "Directory does not exist"; exit 1) - svn co "http://llvm.org/svn/llvm-project/compiler-rt/branches/release_${LLVM_VERSION_SHORT}" compiler-rt - cd "${LLVM_SRC_BASE}/projects" || (echo "Directory does not exist"; exit 1) - svn co "http://llvm.org/svn/llvm-project/libcxx/branches/release_${LLVM_VERSION_SHORT}" libcxx - cd "${LLVM_SRC_BASE}/projects" || (echo "Directory does not exist"; exit 1) - svn co "http://llvm.org/svn/llvm-project/libcxxabi/branches/release_${LLVM_VERSION_SHORT}" libcxxabi + source "${DIR}/common-functions" + local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}" + + branch_name="release/${LLVM_VERSION_MAJOR}.x" + if [[ "${LLVM_VERSION_MAJOR}" -le 3 ]]; then + branch_name="release/${LLVM_VERSION}.x" + fi + git_clone_or_update "https://github.com/llvm/llvm-project.git" "${LLVM_SRC_BASE}" "${branch_name}" || exit 1 + if [[ "${LLVM_VERSION_MAJOR}" -le 8 ]]; then + # Fix the linking for older versions + ln -s "${LLVM_SRC_BASE}/clang" "${LLVM_SRC_BASE}/llvm/tools/" + ln -s "${LLVM_SRC_BASE}/compiler-rt" "${LLVM_SRC_BASE}/llvm/projects/" + ln -s "${LLVM_SRC_BASE}/libcxx" "${LLVM_SRC_BASE}/llvm/projects/" + ln -s "${LLVM_SRC_BASE}/libcxxabi" "${LLVM_SRC_BASE}/llvm/projects/" + fi # Apply existing patches if needed if [ -f "${DIR}/patches/llvm${LLVM_VERSION_SHORT}.patch" ]; then cd "${LLVM_SRC_BASE}" || (echo "Directory does not exist"; exit 1) - patch -p0 -i "${DIR}/patches/llvm${LLVM_VERSION_SHORT}.patch" + patch -p1 --follow-symlinks -i "${DIR}/patches/llvm${LLVM_VERSION_SHORT}.patch" || return 1 fi touch "${LLVM_SRC_BASE}/.src_checked_out" @@ -124,7 +129,7 @@ build_llvm() { # Build uninstrumented compiler mkdir -p "${SANITIZER_LLVM_UNINSTRUMENTED}" cd "${SANITIZER_LLVM_UNINSTRUMENTED}" - cmake -GNinja -DCMAKE_BUILD_TYPE=Release "${LLVM_SRC_BASE}" + cmake -GNinja -DCMAKE_BUILD_TYPE=Release "${LLVM_SRC_BASE}/llvm" ninja # Build instrumented libc/libc++ @@ -134,7 +139,7 @@ build_llvm() { -DLLVM_USE_SANITIZER=MemoryWithOrigins \ "${SANITIZER_CMAKE_C_COMPILER[@]}" \ "${SANITIZER_CMAKE_CXX_COMPILER[@]}" \ - "${LLVM_SRC_BASE}" + "${LLVM_SRC_BASE}/llvm" ninja cxx cxxabi # Build instrumented clang @@ -154,7 +159,7 @@ build_llvm() { -DLLVM_ENABLE_LIBCXX=ON \ -DCMAKE_EXE_LINKER_FLAGS="${LD_F}" \ -DCMAKE_INSTALL_PREFIX="${LLVM_INSTALL}" \ - "${LLVM_SRC_BASE}" + "${LLVM_SRC_BASE}/llvm" # Build clang as a dependency and install all needed packages ninja clang return 0 @@ -226,9 +231,9 @@ build_llvm() { fi if [[ -n "${variables[*]}" ]]; then - "${variables[*]}" cmake "${CONFIG[@]}" "${LLVM_SRC_BASE}" + "${variables[*]}" cmake "${CONFIG[@]}" "${LLVM_SRC_BASE}/llvm" else - cmake "${CONFIG[@]}" "${LLVM_SRC_BASE}" + cmake "${CONFIG[@]}" "${LLVM_SRC_BASE}/llvm" fi # Linking LLVM can require a lot of memory. |