#clang #c3 #interface #llvm #cmake #curl #libclang

sys c3_clang_extensions

Ugly hacks to get information hidden/malformed by libclang See C3 for usable interface

2 releases

0.3.9 Oct 22, 2023
0.3.7 Nov 22, 2017
0.3.6 Sep 16, 2017
0.3.4 Aug 19, 2017

#788 in Programming languages


Used in 2 crates (via c3)

NCSA license

385KB
10K SLoC

Bitbake 9K SLoC // 0.0% comments C++ 1K SLoC // 0.1% comments C 298 SLoC Rust 213 SLoC

C3

Internal for the C3 project.

Building

  • Run cargo clean if upgrading from a previous version of LLVM.
  • Build LLVM 4 or 5 and Clang from source (libclang.a is needed, and pre-built packages won't have it).
  • Add directory containing llvm-config to your PATH, or set LLVM_CONFIG_PATH env variable poiting to the llvm-config executable file.
  • Set LIBCLANG_INCLUDE_PATH pointing to Clang's include directory (<clang install dir>/clang/include/)

Building clang (Linux and macOS)

This will require 20GB of disk space and 16GB of RAM. This method creates static binaries, which can be redistributed without hassle.

  1. Install cmake, subversion, build-essential, libffi-dev, libncursesw5-dev
  2. curl -LO http://releases.llvm.org/5.0.2/llvm-5.0.2.src.tar.xz
  3. tar xf llvm-5.0.2.src.tar.xz
  4. curl -LO http://releases.llvm.org/5.0.2/cfe-5.0.2.src.tar.xz
  5. tar xf cfe-5.0.2.src.tar.xz
  6. mv cfe-5.0.2.src llvm-5.0.2.src/tools/clang
  7. cd llvm-5.0.2.src
  8. mkdir build; cd build
  9. cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/llvm-5-c3 -DLIBCLANG_BUILD_STATIC=ON -DLLVM_BUILD_LLVM_DYLIB=OFF -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_POLLY_BUILD=OFF -DLLVM_ENABLE_LIBCXX=ON -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_RUNTIME=OFF -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_LIBEDIT=OFF -DLLVM_ENABLE_ZLIB=OFF -DLLVM_ENABLE_FFI=OFF ..
  10. make -j8; make install
  11. Take a nap.
  12. cp lib/libclang.a "$HOME/llvm-5-c3/lib/"
  13. Set the following variables. Note that you will need to set them every time you compile, so add them to your bashrc or make a script and source it.
    • export LIBCLANG_INCLUDE_PATH="$HOME/llvm-5-c3/tools/clang/include/:$HOME/llvm-5-c3/include/"
    • export LIBCLANG_STATIC_PATH="$HOME/llvm-5-c3/lib/"
    • export LLVM_CONFIG_PATH="$HOME/llvm-5-c3/bin/llvm-config"

Dependencies

~210–430KB