I have a simple C++ project which uses libclang to parse C++ source code. Currently my project uses the FindLLVM.cmake module to locate a local installation of LLVM (via llvm-config
) on the system, and use it to compile/link.
I’d like to instead use LLVM as a git submodule in my project. Is there a cmake-ish way to indicate that I want to build and use libclang from the submodule in my repo, instead of from the system?
I was able to make this work by doing the following:
In the llvm submodule in my repo (named “llvm”), I do this:
mkdir build
cd build
cmake -GNinja -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release ../llvm
ninja libclang
Then the CMakeLists.txt file in my repo looks like this (at least the LLVM-specific portion):
find_package(LLVM REQUIRED CONFIG)
set(CLANG_INCLUDE_DIRS "llvm/clang/include")
set(CLANG_LIBS clang)
Then I can use the following CMake variables in various places to get my project to build:
LLVM_INCLUDE_DIRS
LLVM_LIBRARY_DIRS
LLVM_LD_FLAGS_STRING
CLANG_INCLUDE_DIRS
CLANG_LIBS
I’d like to find a way to avoid building libclang manually, and just have everything driven from the top-level CMakeLists.txt project in my repo, but I’m not sure how to make that happen.