Skip to content

avr-gcc toolchain for newer avr device families #2216

@AasmundN

Description

@AasmundN

I am setting up an environment (in neovim) for working with the newer AVR device families (specifically avr128db48). avr-gcc does not support these out of the box and an additional device family pack (DFP) must be installed. I have no problem compiling my program:

#include <avr/io.h>

int main(void) { 
  return 0; 
}

However, clangd gives me the following error when trying to goto definition of avr/io.h

clangd: -32001: invalid AST

I am using the --query-driver option, and when using devices that are supported directly by avr-gcc (such as atmega4809) it works as expected.

The issue seems to arrise in relation to the -B compiler option.

Logs
LspLog

[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"I[18:33:03.655] <-- textDocument/signatureHelp(5)\nI[18:33:03.655] --> reply:textDocument/signatureHelp(5) 0 ms, error: Failed to parse includes\n"
[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"I[18:33:03.707] ASTWorker building file /Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src/main.c version 9 with command \n[/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/build]\n/Users/aasmundnorsett/Library/avr-toolchain/bin/avr-gcc -DF_CPU=3333333 -DNDEBUG -D__AVR_DEV_LIB_NAME__=avr128db48 -I/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/include -I/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src -O3 -DNDEBUG -std=gnu11 -Werror -Wall -Wextra -Wpedantic -Wshadow -Wno-array-bounds -Wno-vla -Os -I/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/device_pack/include -B/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/device_pack/gcc/dev/avr128db48 -o CMakeFiles/lab4.dir/src/main.c.obj -c -Wno-unknown-warning-option -mmcu=avr128db48 -isystem /Users/aasmundnorsett/Library/avr-toolchain/bin/../lib/gcc/avr/7.3.0/include-fixed -isystem /Users/aasmundnorsett/Library/avr-toolchain/bin/../lib/gcc/avr/7.3.0/../../../../avr/include --target=avr -resource-dir=/Users/aasmundnorsett/.local/share/nvim/mason/packages/clangd/clangd_19.1.0/lib/clang/19 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -- /Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src/main.c\n"
[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"E[18:33:03.708] Failed to prepare a compiler instance: valid target CPU values are: avr1, at90s1200, attiny11, attiny12, attiny15, attiny28, avr2, at90s2313, at90s2323, at90s2333, at90s2343, attiny22, attiny26, at86rf401, at90s4414, at90s4433, at90s4434, at90s8515, at90c8534, at90s8535, avr25, ata5272, ata6616c, attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25, attiny45, attiny85, attiny261, attiny261a, attiny441, attiny461, attiny461a, attiny841, attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88, attiny828, avr3, at43usb355, at76c711, avr31, atmega103, at43usb320, avr35, attiny167, at90usb82, at90usb162, ata5505, ata6617c, ata664251, atmega8u2, atmega16u2, atmega32u2, attiny1634, avr4, atmega8, ata6289, atmega8a, ata6285, ata6286, ata6612c, atmega48, atmega48a, atmega48pa, atmega48pb, atmega48p, atmega88, atmega88a, atmega88p, atmega88pa, atmega88pb, atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, avr5, ata5702m322, ata5782, ata5790, ata5790n, ata5791, ata5795, ata5831, ata6613c, ata6614q, ata8210, ata8510, atmega16, atmega16a, atmega161, atmega162, atmega163, atmega164a, atmega164p, atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa, atmega168, atmega168a, atmega168p, atmega168pa, atmega168pb, atmega169, atmega169a, atmega169p, atmega169pa, atmega32, atmega32a, atmega323, atmega324a, atmega324p, atmega324pa, atmega324pb, atmega325, atmega325a, atmega325p, atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa, atmega328, atmega328p, atmega328pb, atmega329, atmega329a, atmega329p, atmega329pa, atmega3290, atmega3290a, atmega3290p, atmega3290pa, atmega406, atmega64, atmega64a, atmega640, atmega644, atmega644a, atmega644p, atmega644pa, atmega645, atmega645a, atmega645p, atmega649, atmega649a, atmega649p, atmega6450, atmega6450a, atmega6450p, atmega6490, atmega6490a, atmega6490p, atmega64rfr2, atmega644rfr2, atmega16hva, atmega16hva2, atmega16hvb, atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve, atmega64hve2, at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at90scr100, at94k, m3000, avr51, atmega128, atmega128a, atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1, atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286, at90usb1287, avr6, atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2, avrxmega2, atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega32a4, atxmega32a4u, atxmega32c3, atxmega32c4, atxmega32d3, atxmega32d4, atxmega32e5, atxmega16e5, atxmega8e5, avrxmega4, atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3, atxmega64c3, atxmega64d3, atxmega64d4, avrxmega5, atxmega64a1, atxmega64a1u, avrxmega6, atxmega128a3, atxmega128a3u, atxmega128b1, atxmega128b3, atxmega128c3, atxmega128d3, atxmega128d4, atxmega192a3, atxmega192a3u, atxmega192c3, atxmega192d3, atxmega256a3, atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3, atxmega256d3, atxmega384c3, atxmega384d3, avrxmega7, atxmega128a1, atxmega128a1u, atxmega128a4u, avrtiny, attiny4, attiny5, attiny9, attiny10, attiny20, attiny40, attiny102, attiny104, avrxmega3, attiny202, attiny402, attiny204, attiny404, attiny804, attiny1604, attiny406, attiny806, attiny1606, attiny807, attiny1607, attiny212, attiny412, attiny214, attiny414, attiny814, attiny1614, attiny416, attiny816, attiny1616, attiny3216, attiny417, attiny817, attiny1617, attiny3217, attiny1624, attiny1626, attiny1627, atmega808, atmega809, atmega1608, atmega1609, atmega3208, atmega3209, atmega4808, atmega4809\n"
[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"I[18:33:03.708] --> textDocument/publishDiagnostics\n"
[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"E[18:33:03.708] Could not build a preamble for file /Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src/main.c version 9: CreateTargetInfo() return null\n"
[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"E[18:33:03.708]   error: unknown target CPU 'avr128db48'\nI[18:33:03.708] --> workspace/semanticTokens/refresh(3)\n"
[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"I[18:33:03.708] Skipping rebuild of the AST for /Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src/main.c, inputs are the same.\nI[18:33:03.708] --> textDocument/publishDiagnostics\n"
[ERROR][2024-11-13 18:33:03] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"I[18:33:03.708] <-- reply(3)\n"
[ERROR][2024-11-13 18:33:05] .../vim/lsp/rpc.lua:770	"rpc"	"/Users/aasmundnorsett/.local/share/nvim/mason/bin/clangd"	"stderr"	"I[18:33:05.548] <-- textDocument/definition(6)\nI[18:33:05.548] --> reply:textDocument/definition(6) 0 ms, error: invalid AST\n"

LspInfo

LSP configs active in this buffer (bufnr: 1) ~
- Language client log: ~/.local/state/nvim/lsp.log
- Detected filetype: `c`
- 1 client(s) attached to this buffer
- Client: `clangd` (id: 7, bufnr: [1])
  root directory:    ~/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/
  filetypes:         c, cpp, objc, objcpp, cuda, proto
  cmd:               ~/.local/share/nvim/mason/bin/clangd --query-driver=/Users/aasmundnorsett/Library/avr-toolchain/bin/avr-gcc
  version:           `clangd version 19.1.0 (https://github.com/llvm/llvm-project a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)`
  executable:        true
  autostart:         true

.clangd

CompileFlags:
  Add: [-Wno-unknown-warning-option, -mmcu=avr128db48]
  Remove: [-m*, -f*]

compile_commands.json

[
{
  "directory": "/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/build",
  "command": "/Users/aasmundnorsett/Library/avr-toolchain/bin/avr-gcc -DF_CPU=3333333 -DNDEBUG -D__AVR_DEV_LIB_NAME__=avr128db48 -I/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/include -I/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src -O3 -DNDEBUG -std=gnu11 -mmcu=avr128db48 -Werror -Wall -Wextra -Wpedantic -Wshadow -Wno-array-bounds -Wno-vla -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -fno-split-wide-types -fno-tree-scev-cprop -Os -I/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/device_pack/include -B/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/device_pack/gcc/dev/avr128db48 -o CMakeFiles/lab4.dir/src/main.c.obj -c /Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src/main.c",
  "file": "/Users/aasmundnorsett/Documents/NTNU/Semester7/low-level-programming/labs/lab-4/src/main.c",
  "output": "CMakeFiles/lab4.dir/src/main.c.obj"
}
]

System information

Output of clangd --version:

clangd version 19.1.0 (https://github.com/llvm/llvm-project a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)
Features: mac+grpc+xpc
Platform: arm64-apple-darwin23.6.0; target=x86_64-apple-darwin23.6.0

Editor/LSP plugin:

Neovim v0.10.2
Neovim built in lsp-plugin

Operating system:
Apple M1, MacOS version Sonoma 14.7
Also tested same setup on Ubuntu desktop 24.04.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions