about summary refs log tree commit diff
path: root/third_party/nix
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2020-05-22T21·58+0100
committerVincent Ambo <tazjin@google.com>2020-05-22T22·00+0100
commit5f728cb428ee0e4d9c6afb9df7deb20ce8b8779b (patch)
treeb9ab01e5473befbc9e4299bec2ce4eb617e04c69 /third_party/nix
parent31b2baca9c5ae8670dc54dde68513d40284b4dbd (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.nix30
-rw-r--r--third_party/nix/default.nix2
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?
 }