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 | |
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')
-rw-r--r-- | third_party/nix/clangd.nix | 30 | ||||
-rw-r--r-- | third_party/nix/default.nix | 2 |
2 files changed, 31 insertions, 1 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 $@ +'' diff --git a/third_party/nix/default.nix b/third_party/nix/default.nix index c21a6d00c946..13301984de92 100644 --- a/third_party/nix/default.nix +++ b/third_party/nix/default.nix @@ -32,6 +32,7 @@ in stdenv.mkDerivation { pkgconfig libxml2 libxslt + (import ./clangd.nix pkgs) ]; # 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 ''; - # TODO(tazjin): equivalent of --enable-gc # TODO(tazjin): integration test setup? # TODO(tazjin): docs generation? } |