clangd and cross compiled projects


Is there a way to pass a compile target flag to clangd? I primarily work with code cross-compiled using the Hexagon clang tool chain. The vanilla clang on my host PC generates a lot of errors for inline ASM code (e.g “unknown register name ‘r0’ in asm”). I noticed that I can pass “-ferror-limit=0” in compile_commands.json so that the number of diagnostics can exceed the default 20. This makes make wonder whether I can just tell clangd the target architecture. I tried but it seems architecture flags are ignored by clangd.

I verified that the official LLVM 9 binary can generate Hexgon code - e.g. “clang -target hexagon -c test.c” generates a valid .o output with hexagon assembly. So it seems not far fetched that one can make clangd support various registered targets of llvm. If this is possible and not implemented, I’d like to contribute.

Before migrating to clangd, I have been using libclang based plugin YouCompleteMe. This works out well for my purpose since I can switch libclang used by YCM with libclang from the Hexagon tool chain. Unfortunately, this is not possible with clangd.

Thanks for the great work!


I use clangd with -target flags in compile_commands.json. You could
also see if your Hexagon clang includes a clangd binary of its own.


Hi Kai, in addition to what Theodore suggested;

if you are compiling your project with a custom toolchain, you might wanna take a look at --query-driver option, described in