From 5f728cb428ee0e4d9c6afb9df7deb20ce8b8779b Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Fri, 22 May 2020 22:58:04 +0100 Subject: [PATCH] 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 --- third_party/nix/clangd.nix | 30 ++++++++++++++++++++++++++++++ third_party/nix/default.nix | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 third_party/nix/clangd.nix diff --git a/third_party/nix/clangd.nix b/third_party/nix/clangd.nix new file mode 100644 index 000000000..9494e756b --- /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 c21a6d00c..13301984d 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? }