Sunday, November 3, 2024

irony-install-server with MacPorts

The irony server provides symbol completion for irony-mode on Emacs. Under the hood, it uses libclang to parse C and C++ source. On Mac OS, the Xcode command line tools comes with clang, but it does not provide the necessary header files. Here are the specific instructions for MacPorts.

$ clang -v
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: x86_64-apple-darwin23.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ sudo port install cmake clang-15
--->  Computing dependencies for cmake
...
--->  Cleaning cmake
--->  Computing dependencies for clang-15
...
--->  Cleaning clang-15
--->  Scanning binaries for linking errors
--->  No broken files found.                             
--->  No broken ports found.
$ cmake \
  -DLIBCLANG_LIBRARY=/opt/local/libexec/llvm-15/lib/libclang.dylib \
  -DLIBCLANG_INCLUDE_DIR=/opt/local/libexec/llvm-15/include \
  -DCMAKE_MACOSX_RPATH=1 \
  -DCMAKE_INSTALL_RPATH=/opt/local/libexec/llvm-15/lib \
  -DCMAKE_INSTALL_PREFIX=$HOME/.emacs.d/irony/ \
  $HOME/.emacs.d/elpa/irony-20190703.1732/server &&
cmake --build . --use-stderr --config Release --target install

Some notes:

  • MacPorts llvm-15 package provides the libclang.dylib, but clang-15 provides the header files for it (see macports #69392).
  • LIBCLANG_LIBRARY has to point to the dylib (or the .so on Linux), not the lib/ directory.