Редактор конфигурации проекта – альтернатива kconfig-frontends и cmake-gui

Вопрос или проблема

Я работаю над проектом с открытым исходным кодом для встроенных систем, который требует довольно много настроек – distortos – объектно-ориентированная C++ RTOS для микроконтроллеров. При создании нового проекта вы можете выбрать микросхему из нескольких сотен поддерживаемых устройств, затем можно выбрать конфигурацию тактового генератора микросхемы (множители PLL, делители, частота кварцевого кристалла и т.д.) и периферии микросхемы (включать ли последовательный порт 1, последовательный порт 2, последовательный порт 5 и так далее). В процессе эволюции проекта вы можете настроить другие функции RTOS (например, размеры стеков, проверку во время выполнения и так далее).

На данный момент проект использует kconfig-frontends, который является инструментом для настройки ядра Linux – выделенным в отдельный независимый проект. Мои меню конфигурации в настоящее время выглядят примерно так:

введите описание изображения здесь
введите описание изображения здесь

Хотя kconfig-frontends имеет довольно много хороших функций, у него также есть некоторые серьезные недостатки.

  1. Невозможно собрать на Windows – один человек создал сборку для Windows довольно старой версии 3.12.0 некоторое время назад, но мне так и не удалось воспроизвести его результаты, и его компиляция охватывает только вариант “mconf” (на основе ncurses – показан выше), все остальные инструменты отсутствуют в бинарном пакете, который он загрузил.
  2. Неизвестно, собирается ли на Mac.
  3. На большинстве дистрибутивов Linux вы должны вручную собирать его из исходников. Это проблема, поскольку люди, работающие с микроконтроллерами (пользователи моего проекта), не очень привыкли к этому, и процесс не так прост, как можно было бы представить.
  4. Некоторые действия чрезвычайно утомительны – например, вы можете “принудительно выбрать” опцию, но не можете “принудительно отменить выбор”, кроме как скрыв ее от пользователя…
  5. Некоторые вещи сделать невозможно – например, зависимости могут быть основаны только на логических значениях, вы не можете сделать так, чтобы некоторые опции зависели от точного целого значения или строки.
  6. (связанный с 5.) Возможности проверки действительности ввода пользователя ограничены – например, для целых чисел вы можете разрешить только непрерывный диапазон значений, в то время как иногда список допустимых целых чисел был бы более уместен (это можно обойти с помощью списка логических значений + скрытого целого значения с значением по умолчанию, основанным на логическом, но затем см. пункт 4 – это не очень практично, если допустимых значений больше – скажем – дюжина).
  7. Я, вероятно, что-то забыл в любом случае…

В основном из-за первых трех пунктов я рассматриваю возможность перехода на другой инструмент. Но проблема в том, что на самом деле я знаю только одну альтернативу – cmake-gui (или ccmake). Он хорошо решает большинство перечисленных выше проблем (1-3), но не решает все из них – я уверен, что пункты 4-6 остаются на месте, возможно, затрагивая некоторые другие области, но все же… Также есть некоторые другие проблемы с cmake:

  1. С kconfig-frontends иерархическая структура конфигурации может быть свободно создана – вы можете иметь столько уровней меню, сколько захотите, расположенные как угодно. С cmake конфигурация плоская, с возможностью группировки опций по префиксу каждого значения (более-менее что-то вроде меню с 2 уровнями в kconfig-frontends).
  2. Существуют только строки и логические значения как “типы” опций, для целых чисел с проверкой значений требуется некоторые обходные пути.
  3. Зависимости между опциями очень громоздки. В kconfig-frontends, если “опция B” зависит от включения “опции A”, то изменение значения “опции A” приводит к тому, что “опция B” мгновенно скрывается или отображается пользователю. В cmake-gui, когда у вас есть такие зависимости, вы должны нажать “Configure”, чтобы увидеть эффект.

Один из пользователей моего проекта создал предварительный порт на cmake, и он выглядит так:
введите описание изображения здесь

Таким образом, мой вопрос – существуют ли какие-либо другие альтернативы kconfig-frontends и cmake-gui? Самые важные функции, которые мне нужны, это:

  • легкость использования на всех основных платформах ОС;
  • GUI;

Я готов быть гибким в отношении других функций и могу адаптироваться.

Я также знаю, что мог бы написать свой собственный инструмент конфигурации и поставлять его с проектом, но я действительно предпочел бы не идти по этому пути, если только не буду вынужден отсутствием других вариантов. Я предпочитаю иметь какой-то инструмент с графическим интерфейсом, вместо типичного подхода к встраиваемым проектам, требующего от пользователя вручную редактировать некоторые заголовочные файлы со всеми опциями. Это потому, что есть слишком много вещей для настройки (несмотря на то что я стараюсь уменьшить количество опций до минимума), большинство опций зависят от других, а также потому, что некоторые из опций влияют на процесс сборки, поэтому использование .h файла для этого не очень удобно.

Я тоже изучаю эту проблему (нужен портативный инструмент для обработки опций конфигурации с пользовательским интерфейсом), и нашел проект Kconfiglib. Это реализация kconfig, написанная на Python, поддерживает консольный и графический интерфейсы. Пожалуйста, смотрите: https://github.com/ulfalizer/Kconfiglib

(Я на начальной стадии и еще не проверял инструмент. Возможно, Kconfiglib будет полезен кому-то другому.)

Ответ или решение

Проект distortos, являющийся объектно-ориентированной C++ RTOS для микроконтроллеров, требует значительных усилий в части конфигурации множества параметров, включая выбор микроконтроллера, настройку частоты тактовых генераторов, а также конфигурацию периферийных устройств. На данный момент проект использует kconfig-frontends, однако этот инструмент имеет несколько критичных недостатков, таких как сложность сборки на Windows и ограниченные возможности по управлению зависимостями и валидацией входных данных.

Теория

На этапе выбора альтернатив kconfig-frontends и cmake-gui необходимо учитывать несколько ключевых факторов:

  1. Кроссплатформенность: Инструмент должен поддерживаться на всех основных операционных системах, таких как Windows, Linux и MacOS.
  2. Удобство использования: Как для разработчиков, так и для пользователей проекта, предпочтительно наличие интуитивного графического интерфейса.
  3. Функциональность: Необходимо обеспечить гибкую систему валидации входных данных и более сложные зависимости между конфигурационными опциями.
  4. Производительность: Инструмент должен укладываться в существующий DevOps-процесс и не требовать значительных временных затрат на обучение.

Пример

Одним из потенциальных решений может стать Kconfiglib — реализация системы Kconfig на языке Python, поддерживающая как консольный, так и графический интерфейсы. Данный инструмент развивается и обеспечивает более широкий спектр возможностей управления конфигурациями по сравнению с kconfig-frontends:

  • Легкость внедрения: Kconfiglib написан на Python, что обеспечивает его кроссплатформенность и удобство установки через пакетные менеджеры.
  • Гибкость конфигурации: Позволяет создавать более сложные зависимости и проводить валидацию данных с использованием скриптов на Python.

Применение

Для использования Kconfiglib в вашем проекте distortos, можно предпринять следующие шаги:

  1. Интеграция Kconfiglib: Начните с изучения документации и примеров на официальной странице проекта. Попробуйте портировать существующие конфигурационные файлы с учетом новых возможностей.
  2. Настройка окружения: Убедитесь, что все участники команды разработчиков имеют доступ к среде, необходимой для работы с Kconfiglib (Python и его библиотеки).
  3. Тестирование и обратная связь: Перед переходом на новый инструмент, проведите обширное тестирование среди ключевых пользователей, чтобы собрать отзывы и внести необходимые улучшения.

Таким образом, Kconfiglib представляет собой достойную альтернативу для текущего решения в проекте distortos, обеспечивая необходимую гибкость и кроссплатформенность, при этом обходя многочисленные ограничения kconfig-frontends.

Оцените материал
Добавить комментарий

Капча загружается...