about summary refs log tree commit diff homepage
path: root/scripts/build/p-llvm.inc
diff options
context:
space:
mode:
authorMartin Nowack <m.nowack@imperial.ac.uk>2020-01-23 15:28:56 +0000
committerCristian Cadar <c.cadar@imperial.ac.uk>2020-02-13 17:39:21 +0000
commit2e8d6aed747a988871b6836012301708950a74ef (patch)
tree35ac617795950d9d23672fdec50a6d78dba31d3e /scripts/build/p-llvm.inc
parentdbda156217c532a7e1a65e8c216e593a64c0b8fc (diff)
downloadklee-2e8d6aed747a988871b6836012301708950a74ef.tar.gz
Use git repository to build LLVM
LLVM changed from svn to github. Use the github mirror to have faster build times.
Patches were updated to follow the new structure.

Patches also support building underr Ubuntu 18.04
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.