editor: clangd and cmake work from a committed vscode workspace

The three files libavr's consumers carry, in the leaf-application shape:
nothing vendors this repo, so .clangd names the one build tree an editor
should read (build/atmega328p-generated) beside the stand-ins clang needs
for GCC's AVR dialect; .vscode/settings.json passes --query-driver and names
the toolchain prefix for the window that opens this folder. The libavr pin
advances to the editor-audit fixes. One residue stays red and is the
documented frontend divergence, not a defect: thermistor.hpp's consteval
Beta-equation table folds __builtin_log under GCC, which clang refuses to
fold in a constant expression -- the same class as libavr's breathe example
and its __builtin_cos.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 16:48:46 +02:00
parent b1caf49522
commit 1489f4c3a0
4 changed files with 71 additions and 1 deletions

30
.clangd Normal file
View File

@@ -0,0 +1,30 @@
CompileFlags:
# Named here rather than in the editor's settings because nothing vendors
# this repo: the one build tree is the one an editor should read.
CompilationDatabase: build/atmega328p-generated
Add:
# clang has no 24-bit integer and GCC's are keywords, not macros, so the
# editor needs a stand-in for avr::uint24_t. The next width up is the only
# one available — clang rejects _BitInt(24) on this target.
- -D__uint24=unsigned long
- -D__int24=long
# clangd forwards the driver's system includes but not its own header
# directory, so <stdint.h> resolves to avr-libc's, which still gates the
# limit and constant macros on the C++98 opt-in.
- -D__STDC_LIMIT_MACROS
- -D__STDC_CONSTANT_MACROS
# isr::emit spells a vector number into [[gnu::signal(N)]], which clang
# rejects rather than ignores — enough of them in one TU to reach the
# default limit of 19 inside the headers and truncate the parse.
- -ferror-limit=0
Remove:
# The build promotes warnings for the compiler that has to be right about
# them; in the editor the flag paints a second frontend's opinions in the
# colour reserved for things that do not compile.
- -Werror
Diagnostics:
Suppress:
# clang's AVR `signal` attribute takes no arguments and it knows none of
# progmem, naked or OS_main. A misspelling is what the build is for.
- attribute_wrong_number_arguments
- unknown-attributes

6
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"recommendations": [
"llvm-vs-code-extensions.vscode-clangd",
"ms-vscode.cmake-tools"
]
}

34
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,34 @@
{
// clangd is the language server; the cpptools engine would parse every file
// a second time and disagree, since nothing tells it about a cross
// compiler. Which database to read is in .clangd.
"C_Cpp.intelliSenseEngine": "disabled",
// --query-driver lets clangd ask the cross compiler for its own system
// includes and target; without it every standard header is missing.
"clangd.arguments": [
"--query-driver=**avr-g++*",
"--header-insertion=never"
],
// The presets are the build interface; the toolchain file inside the
// libavr submodule is the one place the compiler is chosen. The submodule
// carries no local/toolchain for it to discover, so the prefix is named
// here, for the window that opens this folder.
"cmake.useCMakePresets": "always",
"cmake.environment": {
"LIBAVR_TOOLCHAIN": "D:/dev/libavr/local/toolchain/avr-gcc-16.1.0-mingw"
},
"cmake.configureOnOpen": true,
"cmake.options.statusBarVisibility": "compact",
"files.watcherExclude": {
"**/build/**": true,
"**/libavr/**": true
},
"files.associations": {
".clangd": "yaml",
".clang-format": "yaml"
}
}

2
libavr

Submodule libavr updated: 26109e172b...07a0c40235