about summary refs log tree commit diff
path: root/third_party
diff options
context:
space:
mode:
Diffstat (limited to 'third_party')
-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?
 }