[PATCH 3/3] build: add compile_commands.json target

George Dunlap <[email protected]> Wed, 5 Aug 2026 11:52:40 +1000
Newsgroups gmane.comp.emulators.xen.devel
Message-ID <[email protected]>
Add a phony convenience target generating the compilation database
from a built object tree, alongside the other developer conveniences
(tags, cscope, cloc -- the last of which already walks the same .cmd
files):

    make -C xen compile_commands.json

The output lands in the object tree root, where clangd and other
consumers discover it automatically when opening files from an
in-tree build.

Note the database records the compiler invocations actually used.
With a clang build it is consumable by clangd as-is; for a gcc build,
clang-based tools may need a small .clangd configuration
(CompileFlags: Remove/Add) dropping gcc-only flags.

Also add the generated file to .gitignore.

Assisted-by: LLM
Signed-off-by: George Dunlap <[email protected]>
---
 .gitignore   | 1 +
 xen/Makefile | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/.gitignore b/.gitignore
index bfc7bdf043..0aa9b801de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -192,6 +192,7 @@ xen/arch/*/include/generated
 xen/build-dir-cppcheck/
 xen/common/config_data.S
 xen/common/config.gz
+xen/compile_commands.json
 xen/cppcheck-htmlreport/
 xen/cppcheck-report/
 xen/cppcheck-misra.*
diff --git a/xen/Makefile b/xen/Makefile
index d39bdfdd53..f87240f33c 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -685,6 +685,10 @@ cloc:
 	    done; \
 	done | cloc --list-file=-
 
+.PHONY: compile_commands.json
+compile_commands.json:
+	$(PYTHON) $(srctree)/scripts/gen_compile_commands.py -d $(objtree)
+
 # Target used by xen-analysis.sh script to retrieve Xen build system variables
 export-variable-%:
 	$(info $*=$($*))
-- 
2.55.0