mkosi: Add back support for running clangd within mkosi

This allows hacking on systemd without installing any build
dependencies except mkosi on the host machine.

(cherry picked from commit 6d862a9dc0)
This commit is contained in:
Daan De Meyer 2024-09-21 19:29:15 +02:00 committed by Luca Boccassi
parent 528cd7dc84
commit 1ade483044
3 changed files with 40 additions and 0 deletions

View File

@ -380,3 +380,19 @@ To debug systemd-boot in an IDE such as VSCode we can use a launch configuration
]
}
```
## mkosi + clangd
[clangd](https://clangd.llvm.org/) is a language server that provides code completion, diagnostics and more
right in your editor of choice (with the right plugin installed). When using mkosi, we can run clangd in the
mkosi build container to avoid needing to build systemd on the host machine just to make clangd work.
All that is required is to run `mkosi` once to make sure cached images are available and to modify the path of the
clangd binary used by your editor to the `mkosi.clangd` script included in the systemd repository. For example, for
VScode, you'd have to add the following to the VSCode workspace settings of the systemd repository:
```json
{
"clangd.path": "<path-to-systemd-repository>/mkosi.clangd",
}
```

20
mkosi.clangd Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
# SPDX-License-Identifier: LGPL-2.1-or-later
MKOSI_CONFIG="$(mkosi --json summary | jq -r .Images[-1])"
DISTRIBUTION="$(jq -r .Distribution <<< "$MKOSI_CONFIG")"
RELEASE="$(jq -r .Release <<< "$MKOSI_CONFIG")"
ARCH="$(jq -r .Architecture <<< "$MKOSI_CONFIG")"
exec mkosi \
--incremental=strict \
--format=none \
build \
clangd \
--compile-commands-dir=/work/build \
--path-mappings="\
$(pwd)=/work/src,\
$(pwd)/build/mkosi.builddir/$DISTRIBUTION~$RELEASE~$ARCH/=/work/build,\
$(pwd)/build/mkosi.cache/$DISTRIBUTION~$RELEASE~$ARCH~build.cache/usr/include/=/usr/include" \
"$@"

View File

@ -2,6 +2,10 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
set -e
if [[ "$1" == "clangd" ]]; then
exec "$@"
fi
if [[ ! -f "pkg/$PKG_SUBDIR/PKGBUILD" ]]; then
echo "PKGBUILD not found at pkg/$PKG_SUBDIR/PKGBUILD, run mkosi once with -ff to make sure the PKGBUILD is cloned" >&2
exit 1