about summary refs log tree commit diff homepage
path: root/scripts/build/p-llvm.inc
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build/p-llvm.inc')
-rw-r--r--scripts/build/p-llvm.inc37
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.