From 58d27e7518cf0f9a1d7b66215d7e320f0b0377af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Cser=C3=A9p?= Date: Sat, 13 Jan 2024 13:58:29 +0100 Subject: [PATCH] Upgrade LLVM to v15. --- .github/scripts/ubuntu-20.04/setup_build.sh | 11 +++++++++-- .github/scripts/ubuntu-22.04/setup_build.sh | 2 +- .github/workflows/ci.yml | 4 ++-- .gitlab/build-deps.sh | 8 ++++---- doc/deps.md | 19 ++++++++++++++----- docker/dev/Dockerfile | 6 +++--- docker/runtime/Dockerfile | 2 +- docker/web/Dockerfile | 2 +- plugins/cpp/parser/src/clangastvisitor.h | 2 +- plugins/cpp/parser/src/ppincludecallback.cpp | 2 +- plugins/cpp/parser/src/ppincludecallback.h | 2 +- 11 files changed, 38 insertions(+), 22 deletions(-) diff --git a/.github/scripts/ubuntu-20.04/setup_build.sh b/.github/scripts/ubuntu-20.04/setup_build.sh index fcadee4c7..a19925d6e 100755 --- a/.github/scripts/ubuntu-20.04/setup_build.sh +++ b/.github/scripts/ubuntu-20.04/setup_build.sh @@ -1,6 +1,13 @@ #!/bin/bash +# Add official LLVM repositories +wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - +echo "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main" | sudo tee /etc/apt/sources.list.d/llvm.list +echo "deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main" | sudo tee -a /etc/apt/sources.list.d/llvm.list +sudo apt-get update + # Install required packages for CodeCompass build -sudo apt-get install -y git cmake make g++ libboost-all-dev llvm-11-dev clang-11 \ - libclang-11-dev odb libodb-dev default-jdk libssl-dev \ +sudo apt-get install -y git cmake make g++ libboost-all-dev \ + llvm-15-dev clang-15 libclang-15-dev odb \ + libodb-dev default-jdk libssl-dev \ libgraphviz-dev libmagic-dev libgit2-dev ctags doxygen libgtest-dev npm libldap2-dev diff --git a/.github/scripts/ubuntu-22.04/setup_build.sh b/.github/scripts/ubuntu-22.04/setup_build.sh index 1197d33c1..99627a015 100755 --- a/.github/scripts/ubuntu-22.04/setup_build.sh +++ b/.github/scripts/ubuntu-22.04/setup_build.sh @@ -2,7 +2,7 @@ # Install required packages for CodeCompass build sudo apt install git cmake make g++ libboost-all-dev \ - llvm-11-dev clang-11 libclang-11-dev \ + llvm-15-dev clang-15 libclang-15-dev \ gcc-11-plugin-dev thrift-compiler libthrift-dev \ default-jdk libssl-dev libgraphviz-dev libmagic-dev libgit2-dev exuberant-ctags doxygen \ libldap2-dev libgtest-dev \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ad881a45b..228259a58 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -137,8 +137,8 @@ jobs: -DCMAKE_INSTALL_PREFIX=$HOME/${{ matrix.os }}/${{ matrix.db }}/cc-install -DDATABASE=$DB_TYPE -DCMAKE_BUILD_TYPE=$BUILD_TYPE - -DLLVM_DIR=/usr/lib/llvm-11/cmake - -DClang_DIR=/usr/lib/cmake/clang-11 + -DLLVM_DIR=/usr/lib/llvm-15/cmake + -DClang_DIR=/usr/lib/cmake/clang-15 -DTEST_DB=$DB_CONNSTRING - name: Build diff --git a/.gitlab/build-deps.sh b/.gitlab/build-deps.sh index 09db12e0d..5eda39c88 100644 --- a/.gitlab/build-deps.sh +++ b/.gitlab/build-deps.sh @@ -250,9 +250,9 @@ export PATH=$DEPS_INSTALL_RUNTIME_DIR/python-install/bin:$PATH if [ ! -f $DEPS_INSTALL_RUNTIME_DIR/llvm-install/bin/clang ]; then cd $PACKAGES_DIR - wget --no-verbose --no-clobber https://github.com/llvm/llvm-project/archive/llvmorg-11.1.0.tar.gz - tar -xf llvmorg-11.1.0.tar.gz - mv llvm-project-llvmorg-11.1.0 llvm-project + wget --no-verbose --no-clobber https://github.com/llvm/llvm-project/archive/llvmorg-15.0.7.tar.gz + tar -xf llvmorg-15.0.7.tar.gz + mv llvm-project-llvmorg-15.0.7 llvm-project mkdir llvm-project/build cd llvm-project/build @@ -264,7 +264,7 @@ if [ ! -f $DEPS_INSTALL_RUNTIME_DIR/llvm-install/bin/clang ]; then -DLLVM_ENABLE_RTTI=ON make install --quiet --jobs $(nproc) - rm -f $PACKAGES_DIR/llvmorg-11.1.0.tar.gz + rm -f $PACKAGES_DIR/llvmorg-15.0.7.tar.gz else echo "Found LLVM/Clang in cache." fi diff --git a/doc/deps.md b/doc/deps.md index 221e795fb..b33c20fe8 100644 --- a/doc/deps.md +++ b/doc/deps.md @@ -15,7 +15,7 @@ be installed from the official repository of the given Linux distribution. is required. (Alternatively, you can compile with Clang.) - **`gcc-X`, `gcc-X-plugin-dev`**: For building ODB. - **`libboost-all-dev`**: Boost can be used during the development. -- **`llvm-11-dev`**, **`clang-11`**, **`libclang-11-dev`**: C++ parser uses +- **`llvm-15-dev`**, **`clang-15`**, **`libclang-15-dev`**: C++ parser uses LLVM/Clang for parsing the source code. - **`odb`**, **`libodb-dev`**: For persistence ODB can be used which is an Object Relation Mapping (ORM) system. @@ -52,9 +52,18 @@ known issues. #### Ubuntu 20.04 ("Focal Fossa") LTS +The standard Ubuntu Focal package repository contains only LLCM/Clang version 12, +which is not sufficient for CodeCompass, as at least version 15 is required. +Therefore LLVM and Clang should be installed from the official LLVM repositories: + ```bash +wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - +echo "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main" | sudo tee /etc/apt/sources.list.d/llvm.list +echo "deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main" | sudo -a tee /etc/apt/sources.list.d/llvm.list +sudo apt-get update + sudo apt install git cmake make g++ libboost-all-dev \ - llvm-11-dev clang-11 libclang-11-dev \ + llvm-15-dev clang-15 libclang-15-dev \ odb libodb-dev \ default-jdk libssl-dev libgraphviz-dev libmagic-dev libgit2-dev ctags doxygen \ libldap2-dev libgtest-dev @@ -64,7 +73,7 @@ sudo apt install git cmake make g++ libboost-all-dev \ ```bash sudo apt install git cmake make g++ libboost-all-dev \ - llvm-11-dev clang-11 libclang-11-dev \ + llvm-15-dev clang-15 libclang-15-dev \ gcc-11-plugin-dev thrift-compiler libthrift-dev \ default-jdk libssl-dev libgraphviz-dev libmagic-dev libgit2-dev exuberant-ctags doxygen \ libldap2-dev libgtest-dev @@ -269,8 +278,8 @@ cmake .. \ -DCMAKE_INSTALL_PREFIX= \ -DDATABASE= \ -DCMAKE_BUILD_TYPE= \ - -DLLVM_DIR=/usr/lib/llvm-11/cmake \ - -DClang_DIR=/usr/lib/cmake/clang-11 + -DLLVM_DIR=/usr/lib/llvm-15/cmake \ + -DClang_DIR=/usr/lib/cmake/clang-15 # To specify linker for building CodeCompass use # -DCODECOMPASS_LINKER= diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index 10cfdf9a2..1619c9bd5 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -26,7 +26,7 @@ RUN set -x && apt-get update -qq \ libmagic-dev \ libsqlite3-dev \ libssl-dev \ - llvm-11 clang-11 llvm-11-dev libclang-11-dev \ + llvm-15 clang-15 llvm-15-dev libclang-15-dev \ thrift-compiler libthrift-dev \ postgresql-server-dev-14 \ postgresql-14 && \ @@ -70,8 +70,8 @@ ENV DATABASE=sqlite \ TEST_WORKSPACE=/CodeCompass/test_workspace \ TEST_DB="sqlite:database=$TEST_WORKSPACE/cc_test.sqlite" \ WITH_AUTH="plain;ldap" \ - LLVM_DIR=/usr/lib/llvm-11/cmake \ - Clang_DIR=/usr/lib/cmake/clang-11 \ + LLVM_DIR=/usr/lib/llvm-15/cmake \ + Clang_DIR=/usr/lib/cmake/clang-15 \ CMAKE_PREFIX_PATH=/opt/odb ENV PATH="$INSTALL_DIR/bin:/opt/odb/bin:$PATH" diff --git a/docker/runtime/Dockerfile b/docker/runtime/Dockerfile index 8baab0fa4..49b87eb29 100644 --- a/docker/runtime/Dockerfile +++ b/docker/runtime/Dockerfile @@ -55,7 +55,7 @@ RUN set -x && apt-get update -qq && \ apt-get install -qq --yes --no-install-recommends \ curl ca-certificates gnupg \ wget \ - llvm-11 \ + llvm-15 \ libboost-filesystem-dev libboost-log-dev libboost-program-options-dev \ default-jre \ libgit2-dev \ diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile index 004a8a4d4..4780bb7ec 100644 --- a/docker/web/Dockerfile +++ b/docker/web/Dockerfile @@ -17,7 +17,7 @@ ARG DEBIAN_FRONTEND=noninteractive RUN set -x && apt-get update -qq \ && apt-get install -qqy --no-install-recommends \ - llvm-11 \ + llvm-15 \ libboost-filesystem-dev libboost-log-dev libboost-program-options-dev \ libsqlite3-dev \ postgresql-server-dev-14 \ diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index cfcaf8604..10683fd65 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -1735,7 +1735,7 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor clang::DynTypedNodeList parents = _astContext.getParents(*expr_); - const clang::ast_type_traits::DynTypedNode& parent = parents[0]; + const clang::DynTypedNode& parent = parents[0]; if (const clang::BinaryOperator* op = parent.get()) { diff --git a/plugins/cpp/parser/src/ppincludecallback.cpp b/plugins/cpp/parser/src/ppincludecallback.cpp index b163732fe..9c8393560 100644 --- a/plugins/cpp/parser/src/ppincludecallback.cpp +++ b/plugins/cpp/parser/src/ppincludecallback.cpp @@ -61,7 +61,7 @@ void PPIncludeCallback::InclusionDirective( clang::StringRef fileName_, bool, clang::CharSourceRange filenameRange_, - const clang::FileEntry*, + clang::Optional, clang::StringRef searchPath_, clang::StringRef, const clang::Module*, diff --git a/plugins/cpp/parser/src/ppincludecallback.h b/plugins/cpp/parser/src/ppincludecallback.h index df3a96676..6d67367f3 100644 --- a/plugins/cpp/parser/src/ppincludecallback.h +++ b/plugins/cpp/parser/src/ppincludecallback.h @@ -38,7 +38,7 @@ class PPIncludeCallback : public clang::PPCallbacks clang::StringRef FileName, bool IsAngled, clang::CharSourceRange FilenameRange, - const clang::FileEntry *File, + clang::Optional File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported,