Подключение компилятора к CLion на примере Microchip XC8

Это продолжение основной статьи, тут описана только настройка IDE CLion.
Дисклеймер, вводная и пререквезиты находятся тут. Там же описана настройка VS Code.



CLion

Clion штука платная, но приятная. Имеет 30-дневный пробный период и месячную подписку в размере 10 баксов для частных лиц, что вполне терпимо, учитывая что она умеет.

Изменения в CMakeLists.txt
Начнем с простого. Добавляем в CMakeLists.txt, сразу после объявления минимальной версии, следующие строки, стыренные в одном из официальных примеров. В них мы отключаем проверку компилятора, при конфигурировании проекта CMake'ом.

set(CMAKE_C_COMPILER_WORKS 1) # Dont check XC8, it is useless.
unset(CMAKE_CXX_COMPILER) # Disable "CXX not used" warning


Custom compiler *.yaml
Для подключение не знакомого компилятора, клион требует специального файла — custom_compilers.yaml
Где он будет находиться не важно, позже мы укажем студии на него через GUI.

Иные пути, вроде использования встроенных toolchains клиона или подключения файла тулчейна в CMake результатов не дали. Там были левые флаги, ошибки и гора проблем.

Jetbrains любезно написали гайд и предоставили репу с примерами.
Стоит полазать по ним, т.к. для своего компилятора, мне пришлось сшить портянку из нескольких официальных примеров.

Спасибо поддержке Jetbrains. Без их пинка я бы не разобрался.



custom-compiler-xc8.yaml

compilers:
  - description: XC8 Compiler
    match-sources: ".*\\.c"
    match-language: C
    # Это важный момент, это не только регэксп по которому будет определен exe.
    # Судя по всему, оно проходиться через PATH и с помощью этого регэкспа 
    # так же определяет переменную ${compiler-exe-dir}
    match-compiler-exe: "(.*/)?xc8-cc(\\.exe)?" 
    code-insight-target-name: avr # сюда просят вписать наиболее похожую архитектуру. Не знаю зачем.
    # Папки с системными и процессорными инклудами.
    include-dirs: ["${compiler-exe-dir}/../pic/include/c99", "${compiler-exe-dir}/../pic/include/"]

    # Компиляторо-специфичные дефайны, прагмы и символы, 
    # чем оба поля отличаются - не знаю
    # Но во втором можно вписывать в Си стиле.
    defines:
      _DATA_ACCESS:
    defines-text: "
#define _INLINE 1
#define __XC 
#define __XC8
#define __XC8_VERSION=2000
#define __PICC18__
#define high_priority
#define low_priority
#define __interrupt(x)
#define _XTAL_FREQ=41666666
#define __bit
#define __near
"

PS: в какой момент этот файл начинает работать, мне не известно. Сам по себе, голый, он ничего не сделает, даже если тыкнуть IDE в него носом. Дальше будет описана магия и если руны будут нарисованы криво, а пентаграмма задета ногой — ничего не заработает.

Открытие проекта в IDE
Теперь запускаем IDE.
File -> Open project... и открываем корневую директорию.
Выскочит окошко настройки СMake — закрываем его.
В этот момент CMake output может выкинуть непонятные ошибки. Все ок. Еще ничего не работает.

Указание IDE на custom-compiler.yaml
Нажимаем CTRL+ALT+S, открывается окно Settings.
В дереве настроек ищем Build, Execution… -> Toolchains -> Custom compiler
Ставим галочку и указываем путь к нашему файлу.
Возможно IDE выкинет окошко, что хочет рестарта, пока игнорим.

Создание CLion тулчейна
В дереве настроек ищем Build, Execution… -> Toolchains.
В открывшемся списке клацаем плюсик, выбираем тип System.
В поле name вписываем любое имя.
В полях C Compiler и C++ Compiler вписываем путь к exe компилятора. В моем случае это:
<em>G:\Toolchains\XC8\2.35\bin\xc8-cc.exe</em>

ВНИМАНИЕ: Как сделать это переносимым или хотя бы брать из ENV, я не знаю.
Зачем это нужно, мне не ведомо. Но без эти действий бесноватый Clion откажется воспринимать ваш custom-compiler.yaml. Обратное тоже верно!
.

Создание CLion профайла CMake
В дереве настроек ищем Build, Execution… -> CMake.
В открывшемся списке клацаем плюсик или если уже есть созданный профайл — используем его.
В поле Toolchain, в выпадающем меню выбираем созданный выше тулчейн.
В поле Generator выбираем Ninja. С другими у меня работает не стабильно.
Опционально в поле Build directory указываем относительный путь для папки конфигурации и сборки CMake.

Завершение
Сохраняем, закрываем, от греха подальше перезапускаем студию.
Открываем заново и ждем начала конфигурации CMake.

Если она не началась сама — нащупываем в самом низу вкладку CMake, после чего в открывшемся окне слева клацаем шестереночку и жмем Reset Cache and Reload Project

По идее должны получить следующий аутпут:

"G:\IDE_And_Tools\JetBrains\CLion 2021.3\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=G:/IDE_And_Tools/JetBrains/CLion 2021.3/bin/ninja/win/ninja.exe" -DCMAKE_C_COMPILER=G:/Toolchains/XC8/2.35/bin/xc8-cc.exe -DCMAKE_CXX_COMPILER=G:/Toolchains/XC8/2.35/bin/xc8-cc.exe -G Ninja H:\Learn\XC8_Cmake
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: G:/Toolchains/XC8/2.35/bin/xc8-cc.exe - skipped
-- Configuring done
-- Generating done
-- Build files have been written to: H:/Learn/XC8_Cmake/cmake-build-debug-system

[Finished]

Если по каким то причинам там ошибки, присутствуют всякие msvc, gcc или шланги — что то пошло не так. Что конкретно? Боюсь вам предстоит разобраться самим.

Если же все прошло успешно, при нажатии на Build All в меню сверху, должно вывести стандартный успешный аутпут сборки:
====================[ Build | all | Debug-System ]==============================
"G:\IDE_And_Tools\JetBrains\CLion 2021.3\bin\cmake\win\bin\cmake.exe" --build H:\Learn\XC8_Cmake\cmake-build-debug-system --target all
[1/3] Building C object CMakeFiles\XC8_CMake_project.dir\main.c.p1
[2/3] Building C object CMakeFiles\XC8_CMake_project.dir\gpio.c.p1
[3/3] Linking C executable XC8_CMake_project.elf

Memory Summary:
    Program space        used    86h (   134) of 1FFF8h bytes   (  0.1%)
    Data space           used     7h (     7) of   EE0h bytes   (  0.2%)
    Configuration bits   used     0h (     0) of     3h words   (  0.0%)


Build finished


Аутро

Примерно с этого момента можно начать наслаждаться удобной IDE, платить подписку и делать уже что то полезное.

Мне согласился помочь доброжелатель описав настройку под QT Creator, так что думаю в скором времени будет дополнение.
Если есть желание и возможность уточнить технические, орфографические и пунктуационные моменты или описать дополнительные проблемы, решения, тонкости — буду очень рад.

Благодарности

Спасибо множеству людей из t.me/supapro и t.me/probuildsystems слушавшим мое нытье и глупые вопросы, не скупившимся на объяснение и помощь, на протяжении нескольких месяцев, пока я осиливал несколько этих строчек конфигурации IDE.
  • +1
  • 04 февраля 2022, 15:55
  • ReasonX

Комментарии (5)

RSS свернуть / развернуть
Полностью не прочитал статью, но задам не только меня интересующий вопрос: почему в «осторожно, говно»? Clion — то еще дерьмище, это понятно любому сишнику, который видел в жизни IDE под С и на С(в отличии от чего угодно на жабе). Коли так, то все ок, галактика в безопасности. Или дело в чем-то другом? Только не пинайте за TLDR.
0
почему в «осторожно, говно»?
Потому, что как можно поместить куда-то еще, если есть такой прекрасный раздел?

Clion — то еще дерьмище, это понятно любому сишнику, который видел в жизни IDE под С и на С
Видел кучу IDE и среди C в том числе, особенно в сравнении со всякой вендорной херней типо MPLAB, Cube IDE и прочего — это просто боженька. Хотелось бы конечно Visual Studio, но я не осилил подключение.

Вообще это все расписано в первой части статьи.
0
Да, боюсь, что необходимо в этом же разделе создать пост с целым списком сред разработки.
0
Потому, что как можно поместить куда-то еще, если есть такой прекрасный раздел?
Это конечно забавная шутка, но тем не менее, для подобных статей есть более подходящие блоги.
0
Считайте это черновиком, на публичной проверке. Ща полежит с месяцок, я че исправлю\дополню, может кто уточнит детали… и перемещу.
0
понятно любому сишнику, который видел в жизни IDE под С и на С(в отличии от чего угодно на жабе)
Вообще, мне интересно, что это за «иде на С под С». Обычно на них без слез взглянуть трудно, а пользователи иде от джетбрейнс и на примерно лучшее, что было доступно для С++ в лице мсвс поглядывали с усмешкой еще до того как clion вышел.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.