diff options
author | Vincent Ambo <tazjin@google.com> | 2020-05-22T21·58+0100 |
---|---|---|
committer | Vincent Ambo <tazjin@google.com> | 2020-05-22T22·00+0100 |
commit | 5f728cb428ee0e4d9c6afb9df7deb20ce8b8779b (patch) | |
tree | b9ab01e5473befbc9e4299bec2ce4eb617e04c69 /third_party/nix/clangd.nix | |
parent | 31b2baca9c5ae8670dc54dde68513d40284b4dbd (diff) |
feat(3p/nix): Add a derivation to launch clangd r/816
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
Diffstat (limited to 'third_party/nix/clangd.nix')
-rw-r--r-- | third_party/nix/clangd.nix | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/third_party/nix/clangd.nix b/third_party/nix/clangd.nix new file mode 100644 index 000000000000..9494e756b16f --- /dev/null +++ b/third_party/nix/clangd.nix @@ -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 $@ +'' |