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
This commit is contained in:
parent
31b2baca9c
commit
5f728cb428
2 changed files with 31 additions and 1 deletions
30
third_party/nix/clangd.nix
vendored
Normal file
30
third_party/nix/clangd.nix
vendored
Normal file
|
@ -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 $@
|
||||
''
|
2
third_party/nix/default.nix
vendored
2
third_party/nix/default.nix
vendored
|
@ -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?
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue