[clang-tools-extra] [clangd] Inject preceding includes for unity build targets (PR #180402)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 9 07:20:02 PST 2026
likewhatevs wrote:
> Is what the kernel does in any way different from what build systems like cmake do for unity builds?
I don't think so but let me get an example to make sure I'm not missing anything subtle.
This is what `compile_commands.json` looks like for one of the unity build files:
```
{
"command": "gcc-14 -Wp,-MMD,kernel/sched/.build_policy.o.d -nostdinc -I./arch/x86/include -I./arch/x86/include/generated -I./include -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -Werror -std=gnu11 -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -ftrivial-auto-var-init=zero -fno-stack-clash-protection -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fms-extensions -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-type-limits -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -g -Wno-unused-but-set-variable -DKBUILD_MODFILE='\"kernel/sched/build_policy\"' -DKBUILD_BASENAME='\"build_policy\"' -DKBUILD_MODNAME='\"build_policy\"' -D__KBUILD_MODNAME=build_policy -c -o kernel/sched/build_policy.o kernel/sched/build_policy.c",
"directory": "~/linux",
"file": "~/linux/kernel/sched/build_policy.c"
},
```
This is that file: https://elixir.bootlin.com/linux/v6.18/source/kernel/sched/build_policy.c#L50-L66 , the c files it includes (like `ext.c`) don't have their own entries in `compile_commands.json`.
> If so, then I believe the scope this affects is way larger as unity builds are available in multiple build systems. iiuc what this does is propagate the includes and defines from source1 etc. into the following files?
Yes
https://github.com/llvm/llvm-project/pull/180402
More information about the cfe-commits
mailing list