Подключение clang для работы с Arduino/ESP32

Введение

На одном из 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

В итоге получилось следующее:

  1. в файле platformio.ini добавляется ключ extra_scripts
[env:myenv]
platform = ...
board = ...
extra_scripts = pre:extra_script.py
  1. в корне проекта создается скрипт 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")
  1. запускается команда pio run -t compiledb

Заключение

После вышеописанных шагов в корне проекта создается бд compile_commands.json clangd её успешно подхватывает. После этого можно использовать вашу любимую IDE/Текстовый редактор с поддержкой lsp, для создания программ под Arduino/ESP32 миркроконтроллеры.

Залиать прошивку на устройство можно просто запустив, из корня проекта, команду:

platformio run --target upload

Полезные ссылки

 
comments powered by Disqus