Update: I was only able to get irony to work up to the 2019 version, but irony has been unmaintained since 2023 and has now since suffered significant bit-rot, and I could not get the 2023 version to work. There seems to be other alternatives (e.g. lsp-mode). However, I'm keeping this page for the record.
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.
$ cd "$(mktemp -d)" # any empty temporary directory will do. $ clang -v Apple clang version 17.0.0 (clang-1700.0.13.3) Target: x86_64-apple-darwin24.4.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin $ sudo port install cmake clang-17 ---> Computing dependencies for cmake ... ---> Cleaning cmake ---> Computing dependencies for clang-17 ... ---> Cleaning clang-17 ---> Scanning binaries for linking errors ---> No broken files found. ---> No broken ports found. $ cmake \ -DLIBCLANG_LIBRARY=/opt/local/libexec/llvm-17/lib/libclang.dylib \ -DLIBCLANG_INCLUDE_DIR=/opt/local/libexec/llvm-17/include \ -DCMAKE_MACOSX_RPATH=1 \ -DCMAKE_INSTALL_RPATH=/opt/local/libexec/llvm-17/lib \ -DCMAKE_INSTALL_PREFIX=$HOME/.emacs.d/irony/ \ $HOME/.emacs.d/elpa/irony-20231018.1915/server && cmake --build . --use-stderr --config Release --target install
Some notes:
- MacPorts llvm package provides the
libclang.dylib
, but clang 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.irony-20231018.1915
has a bug whereirony.el
version string is now";; Package-Version: 20231018.1915"
, but theserver/src/CMakeLists.txt
still uses";; Version:"
to detect the version. Update the string accordingly.- Requires cl-libify to patch cl to cl-lib. Install it in emacs using
M-x package-install cl-libify
.
No comments:
Post a Comment