Введение
На одном из pet проектов, о котором я, возможно, напишу позднее, мне понадабилась IDE для работы с прошивками микроконтроллеров. Понятно, что есть Arduino IDE, но я привык к Emacs и хотелось бы продолжныть работб в нем.
По итогу я нашел прекрасный проект PlatformIO для заливки прошивок на мирокконтроллеры и разработки под них. По умолчанию, он рекомендует использовать lsp ccls для работы со своими проектами и при инициализации проекта настраивает для него все пути до библиотек и заголовков. Но установить его без боли на MacOS еще та задача, рекомендует использовать lsp ccls для работы со своими проектами.
Установить ccls
становить его без боли на MacOS еще та задача, Поэтому я начал искать как настроить lsp clangd для работы с такими проектами.
Настройка clangd для работы с platformio
Я начал искать решение и поиски привели меня к тому что нужно просто сгенерировать в корне проекта бд для конмпиляции в виде файла compile_commands.json
или файл с настройками .clangd
.
Как сказано выше pio может генерить только .ccls
с настройками для ccls, поэтому для clang остается только compile_commands.json
, и способ его генерации есть на сайте документации platformio
В итоге получилось следующее:
- в файле
platformio.ini
добавляется ключ extra_scripts
[env:myenv]
platform = ...
board = ...
extra_scripts = pre:extra_script.py
- в корне проекта создается скрипт
extra_script.py
import os
Import("env")
# include toolchain paths
env.Replace(COMPILATIONDB_INCLUDE_TOOLCHAIN=True)
# override compilation DB path
env.Replace(COMPILATIONDB_PATH="compile_commands.json")
- запускается команда
pio run -t compiledb
Заключение
После вышеописанных шагов в корне проекта создается бд compile_commands.json
clangd её успешно подхватывает. После этого можно использовать вашу любимую IDE/Текстовый редактор с поддержкой lsp, для создания программ под Arduino/ESP32 миркроконтроллеры.
Залиать прошивку на устройство можно просто запустив, из корня проекта, команду:
platformio run --target upload