feat(3p/nix): Add a derivation to launch clangd

This wrapper derivation (which assumes that the depot is available at
~/depot) can be used to actually get clangd working with
//third_party/nix.

In my setup I can launch this with M-x eglot, followed by

  env
    CLANGD_FLAGS='--compile-commands-dir=/home/tazjin/projects/nix-build'
    nix-shell -A third_party.nix --run 'nix-clangd' /home/tazjin/depot
This commit is contained in:
Vincent Ambo 2020-05-22 22:58:04 +01:00
parent 31b2baca9c
commit 5f728cb428
2 changed files with 31 additions and 1 deletions

30
third_party/nix/clangd.nix vendored Normal file
View file

@ -0,0 +1,30 @@
# Create a clangd wrapper script that can be used with this project.
# The default Nix wrapper only works with C projects, not C++
# projects.
#
# The CPATH construction logic is lifted from the original wrapper
# script.
pkgs:
pkgs.writeShellScriptBin "nix-clangd" ''
buildcpath() {
local path
while (( $# )); do
case $1 in
-isystem)
shift
path=$path''${path:+':'}$1
esac
shift
done
echo $path
}
export CPATH=''${CPATH}''${CPATH:+':'}:$(buildcpath ''${NIX_CFLAGS_COMPILE})
export CPATH=${pkgs.glibc.dev}/include''${CPATH:+':'}''${CPATH}
export CPLUS_INCLUDE_PATH=${pkgs.llvmPackages.libcxx}/include/c++/v1:''${CPATH}
# TODO(tazjin): Configurable commands directory?
exec -a clangd ${pkgs.llvmPackages.clang-unwrapped}/bin/clangd $@
''

View file

@ -32,6 +32,7 @@ in stdenv.mkDerivation {
pkgconfig pkgconfig
libxml2 libxml2
libxslt libxslt
(import ./clangd.nix pkgs)
]; ];
# TODO(tazjin): Some of these might only be required for native inputs # TODO(tazjin): Some of these might only be required for native inputs
@ -80,7 +81,6 @@ in stdenv.mkDerivation {
ln -s $out/bin/nix $out/libexec/nix/build-remote ln -s $out/bin/nix $out/libexec/nix/build-remote
''; '';
# TODO(tazjin): equivalent of --enable-gc
# TODO(tazjin): integration test setup? # TODO(tazjin): integration test setup?
# TODO(tazjin): docs generation? # TODO(tazjin): docs generation?
} }