Название: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 16, 2013, 22:10 Всем доброго времени.
Преамбула: Я тут озадачился созданием плагина для QtCreator, с помощью которого можно было бы создавать проекты для встраиваемых устройств, которые не имеют никакой ОС (по крайней мере не имеют *nix, и т.п. ОС). К таким устройствам относятся различные отладочные платы на ARM, AVR и пр. микроконтроллерах. Я знаю, что для этих целей существуют проприетарные продукты, такие как Keil, IAR и т.п., а также свободные CooCox, различные плагины для Eclipse, Code::Blocks и пр.. Т.е., выбор велик, каждый может выбрать что-то по-душе и, возможно, я создаю очередной велосипед. :). Но для меня есть несколько НО: 1. Проприетарные продукты сразу отпадают:
2. CooCox, Eclipse и пр. Java-based продукты также отпадают:
3. Code::Blocks также отпадает (хотя - ИМХО, он лучше всех):
Плюс ко всему вышеперечисленному, я являюсь "фанатом" QtCreator, я уже жестко "подсел" на него, плюс - хотелось бы прокачать свои скиллы. :). В чем профит:
Что в планах: 1. Поддержка только GCC компилятора (пока только для ARM, хотя, в принципе, можно любой GCC). 2. Поддержка отладки через JTAG и/или SWD интерфейс (пока только SWD, т.к. имею только такой адаптер). 3. Собственный формат файла проекта, основанный на INI. Текущие ограничения:
Что уже реализовано: 1. Создание Embedded Toolchain:
Тут галерея скриншотов как это сделать. (http://s15.postimg.org/uqz62yz7b/Compilers.png) (http://postimg.org/image/uqz62yz7b/) (http://s15.postimg.org/x70zgth9z/Kits.png) (http://postimg.org/image/x70zgth9z/) 2. Создание шаблона минимального Embedded проекта:
Тут галерея скриншотов как это сделать. (http://s7.postimg.org/yg3h5edpj/New.png) (http://postimg.org/image/yg3h5edpj/) (http://s7.postimg.org/lanyzajtz/Create.png) (http://postimg.org/image/lanyzajtz/) (http://s7.postimg.org/t5yie3tgn/Wizard.png) (http://postimg.org/image/t5yie3tgn/) (http://s7.postimg.org/9cmeleg2v/Prj.png) (http://postimg.org/image/9cmeleg2v/) 3. Открытие уже существующего Embedded проекта:
Тут галерея скриншотов как это сделать. (http://s14.postimg.org/b5pmo2ub1/Open.png) (http://postimg.org/image/b5pmo2ub1/) (http://s14.postimg.org/bjqynoeel/Wizard.png) (http://postimg.org/image/bjqynoeel/) 4. Конфигурирование открытого проекта:
Тут галерея скриншотов как это сделать. (http://s16.postimg.org/h74lfqtmp/Configure.png) (http://postimg.org/image/h74lfqtmp/) (http://s16.postimg.org/p157151fl/Settings.png) (http://postimg.org/image/p157151fl/) 5. Сборка проекта: В принципе, минимальный проект компилится, я уже пробовал. Но на данный момент это дело отключено. Исходники: https://gitorious.org/qtcreator-embedded-plugin PS: Все кто заинтересован в таком плагине - просьба задавайте вопросы, советуйте и пр. :) И да, пока что вся эта реализация в зачаточном состоянии... Главный для меня сейчас вопрос: Как лучше отображать виджет с настройками компилятора, линкера и т.п.? Я планировал, что все будет раскидано по табам в QTabWidget, но отображение всяких опций я могу сделать через модель (типа как сейчас) или "тупо" нарисовать чекбоксы и комбобоксы с лайнедитами и пр. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 17, 2013, 12:04 В виде модели он выглядит очень хорошо. Еще бы это было дерево и опции оптимизации ты собрал бы в одну строку с комбобоксом (так как они взаимоисключающие).
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 17, 2013, 14:20 Да, Сергей, я думал об этом тоже. Просто в примере скопипастил по аналогии из Code::Blocks - там именно так оно сделано.
Если делать на базе модели - то нужно как-то обобщить это для всех опций, включая и опции линкера. Но для линкера есть одна главная проблема - нужно как-то сделать так, чтобы была возможность выбирать: 1. Или мы указываем и используем отдельный файл-скрипт для линковки (файл линкера), который самостоятельно создаем и в котором указано адресное простанство и т.п. 2. Или мы выводим в GUI поля с адресами RAM, ROM и т.п. и файл линкера создается автоматически (например как временный файл). Т.е. в этом случае проблема с "однотипностью" модели и отображения данных - я не могу придумать как-бы это сделать универсальнее и красивше отображать. Т.к. я могу сделать или TreeView с этими отдельными полями или TreeView с одним полем в котором указан путь к линкер-файлу. Относительно других опций компиляции таких проблем нет (в принципе) - там все можно отображать через TreeView с разными делегатами (т.е. для некоторых опций - использовать ComboBox, для некоторых CheckBox, для некоторых LineEdit и т.п.). Еще есть проблема в том, что GCC опций (http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html)очень много - я не знаю какой минимум взять за базовый, а какой отнести к Misc. В принципе, я могу опции разбить на группы (хотя, они уже разбиты в стандарте) и каждую группу отображать в QTabWidget в отдельном табе. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 17, 2013, 16:02 Во-первых, как ты собираешься собирать вообще?
Во-вторых, где ты собираешься хранить параметры сборки? Есть такой проект, называется WinAVR. Сейчас он немного стагнирует, но ряд идей там интересные. В частности, там есть утилита генерации Makefile. Можешь посмотреть. Дальше, настройки проекта можно хранить прямо в Makefile. Т.е. добавить ряд маркеров (типа #do not edit...) или тупо парсить интересующий переменные (предпочтительней). Файл линкера можно поставить на опцию - или отдельный файл, или набор сегментов, или "по умолчанию". Но это вообще отдельная вещь и пихать ее туда же, куда и опции оптимизации несколько неразумно. Опции не надо отображать в разных табах. Для этого и есть дерево. Т.е. опции оптимизации - это одна ветка, опции настройки совместимостей кода - другая, опции отладки - третья и так далее. А вот опции линкера и ассемблера можно выделить в отдельные вкладки. Более того, надо разделять настройки ассемблера вызываемого компилятором С и при компиляции ассемблерный файлов. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 17, 2013, 19:12 Цитата: b-s-a Во-первых, как ты собираешься собирать вообще? Без всяких Makefile собирать буду. Просто буду подставлять нужные аргументы (которые будут получены из настроек компилятора, линкера и т.п.) сразу в компилер. Так, к примеру, сделано во всех (по крайней мере большинства) IDE, например CooCox, Keil и пр. ИМХО - это самый удобный и простой способ. Цитата: b-s-a Во-вторых, где ты собираешься хранить параметры сборки? Дело в том, что проще всего сделать это через *user файлы, т.к. оно интегрировано по умолчанию в QtCreator и используется как стандартное решение. Да и реализуется автоматом через методы fromMap(), toMap() по строковым ключам-константам (так оно внутри креатора сделано by design). Делать что-то свое - это гемморой, имею ввиду хранить настройки в файле проекта. Поэтому пока что все будет хранится в *.user файле. Все эти опции будут хранится "тупо" по их именам, и сериализоваться через QVariantMap (пока еще не придумал как именно и какие поля должны сохраняться. Для хранения опций думаю ввести некий объект, что-то вроде: Код
Например, для Опций оптимизации типа Ox этот класс будет заполняться как-то так: Код
Соответственно, в TreeView это должно отображаться как: Код: +----------------------+--------+----------+ где значек V - это условно ComboBox Результат для данной опции, который будет подставляться в командную строку компилятора будет генерится как: Код
Для опций выбора стандарта языка и им подобных, будет что-то типа: Код
Соответственно, в TreeView это должно отображаться как: Код: +--------------------------------+--------+----------+ где значек V - это условно ComboBox Результат для данной опции, который будет подставляться в командную строку компилятора будет генерится как: Код
Для опций имеющих одно значение, которое и является аргументом (типа -g) , будет что-то типа: Код
Соответственно, в TreeView это должно отображаться как: Код: +------------------------------------+--------+----------+ тут value - будет ReadOnly (жестко зашито, только отображается). Результат для данной опции, который будет подставляться в командную строку компилятора будет генерится как: Код
В итоге, каждая модель каждой группы будет иметь некий метод: Код
Который будет рекурсивно проходить по всем итемам (опциям) и получать текущие аргументы у всех "enabled" опций. И полученый результат будет подставляться в компилятор: Цитировать gcc -O2 -std=c++03 -g ..... и т.п. Как то так... На большее у меня не хватило фантазии.. Может кто предложит более лучший вариант? Цитата: b-s-a Файл линкера можно поставить на опцию - или отдельный файл, или набор сегментов, или "по умолчанию". Но это вообще отдельная вещь и пихать ее туда же, куда и опции оптимизации несколько неразумно. Да, именно. Как я думаю, это дело должно отображаться в отдельной Page в QTabWidget и должно не использовать модель. Я и не собирался пихать в оптимизацию это. :) Я планирую разбить QTabWidget на страницы/табы/группы согласно (примерно) тому как написано тут: http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html Цитата: b-s-a Опции не надо отображать в разных табах. Для этого и есть дерево. Т.е. опции оптимизации - это одна ветка, опции настройки совместимостей кода - другая, опции отладки - третья и так далее. Да, я тоже об этом думал - но получится много групп (веток) и придется долго раскрывать их... Хотя - да, это идея! Можно попробовать и проверить. :) Еще дело в том, что опции выбора целевой платформы (процессора) общие для компилятора и линкера. По крайней мере CooCox их дублирует на этапе компиляции и линковки. Цитата: b-s-a А вот опции линкера и ассемблера можно выделить в отдельные вкладки. С линкером согласен, можно даже не использовать модель - а просто нарисовать виджет с полями куда "забивать" адресное пространство или выбирать кастомный файл линкера. Возможно сюда же надо добавить поле с вводом выходной директории для выходного Map файла... А с ассемблером не получится сделать никаких особых опций (кроме D_ASSEMBLY, или как там ее). Не? Цитата: b-s-a Более того, надо разделять настройки ассемблера вызываемого компилятором С и при компиляции ассемблерный файлов. Дело в том, что при выборе тулчейна в QtCreator нет возможности отдельно указать путь к используемому линкеру и/или компилятору для ассемблера. И поэтому все эти опции (компиляции ассемблерных файлов и/или линковки) добавляются в командную строку C/C++ компилятора (gcc или g++). Поэтому, есть ли смысл для ассемблера выделать отдельную вкладку? Или я запутался? :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: alex312 от Июнь 17, 2013, 19:44 Цитата: b-s-a Во-первых, как ты собираешься собирать вообще? Без всяких Makefile собирать буду. Просто буду подставлять нужные аргументы (которые будут получены из настроек компилятора, линкера и т.п.) сразу в компилер. Так, к примеру, сделано во всех (по крайней мере большинства) IDE, например CooCox, Keil и пр. ИМХО - это самый удобный и простой способ. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 17, 2013, 20:20 Цитата: alex312 Зачем изобретать систему сборки? Не нужно месить все в кучу и сравнивать теплое с мягким. Перечисленные тобою IDE никоим боком не относятся к данному вопросу. Я ничего не придумываю, а наоборот упрощаю и избавляюсь от ненужных зависимостей и гемора. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Июнь 17, 2013, 20:45 Денис у меня была подобная мысль, но я намеревался использовать (и даже использовал во времена Qt4.3, т.е. до Креаторные) qmake и pro-файлы (мне очень удобным видятся) и в купе с Креатором.
--- буду следить за тобой ;) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 17, 2013, 21:13 Цитата: lit-uriy буду следить за тобой Да, Юр, и на этом спасибо. ;) Хотя я б хотел бы поиметь подмогу... :) Цитата: lit-uriy ...qmake и pro-файлы... Не не, ИМХО, это лишняя завязка на плагин Qt4Project и пр.. Я специально решил избавится от всего "лишнего", т.к. при использовании qmake и пр., пользователю придется вручную прописывать флаги компилятора, создавать линкер файл и т.п и т.д.. т.е. как-то неявно все это... Я планирую сделать что-то среднее между CooIde + Keil + IAR + Code::Blocks и пр. юзер-френдли для Embedded специфики. :) На данный момент осталось решить проблему как отображать опции, сделать нормальную модель, еще кое-что по мелочи, и, в принципе, уже можно будет собирать проекты. :) Останется как-то прикрутить к плагину GDB отладчика запуск сервера (или OCD, или ST-Link и т.п.). И опять же, встанет проблема - где в настройках QtCreator добавить виджеты с конфигурациям JTAG, SWD и пр. адаптеров с GDB серверами.. Т.к. на данный момент я не представляю куда их можно засунуть в GUI. И потом прикрутить загрузку прошивки в чип.. Каким то образом.. И, усё! Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Июнь 17, 2013, 21:40 >.И потом прикрутить загрузку прошивки в чип.. Каким то образом..
ну вроде для всяких смартфонов реализуется "Развёртывание" или как-то так в Креаторе (я его в глаза не видел в таком режиме, только на скриншотах) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: Авварон от Июнь 18, 2013, 00:15 Кажется, что реально слишком большой гемор делать через ИДЕ сборку. Как делать зависимости между проектами, к примеру? Не думали в сторону QBS посмотреть? По идее, добавление нового тулчейна не должно делаться как-то архисложно, а все флаги можно зашить в него.
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 18, 2013, 00:52 Цитата: Авварон Кажется, что реально слишком большой гемор делать через ИДЕ сборку. Нет, как раз таки все достаточно легко: получаем список аргументов/флагов и подсовываем компилятору (так, в принципе, сделано в Keil, IAR, CoIDE - т.е. в большинстве IDE, которые заточены под Embedded проекты). Цитата: Авварон Как делать зависимости между проектами, к примеру? В смысле? Цитата: Авварон Не думали в сторону QBS посмотреть? Еще нет. Цитата: Авварон По идее, добавление нового тулчейна не должно делаться как-то архисложно, а все флаги можно зашить в него. Так фишка в том, что я не трогаю тулчейн: оно все остается "стандартное" - GCC Toolchain. Я просто конкретизирую для тулчейна/кита выбор "Embedded Device" для того, чтобы при создании Embedded проекта отсеить другие "несовместимые" тулчейны. Да, в принципе можно было бы создать кастомный GCC Тулчейн, который бы имел виджет с дополнительными/расширенными полями для выбора линкера, ассемблера и пр. утилит, но ИМХО, оно того не стоит, т.к. с помощью обычного GCC компилятора/тулчейна можно и так все это сделать в принципе.. На крайний случай, если все-таки обычного GCC тулчейна окажется маловато - то тогда придется создавать кастомный. Насчет "вшивать" флаги в тулчейн, а не в project "BuildConfiguration" (как сейчас сделано) - тоже надо подумать... В принципе, такой вариант тоже возможен, хотя теряем в гибкости сборки проектов, которые будут использовать один тулчейн - но иметь разные настройки. Все-таки ИМХО, флаги необходимо задавать не тулчейну - а проекту, a точнее "BuildConfiguration" проекта, потому что могут быть разные конфигурации сборки: Release, Debug или еще что-то... Или ты имел ввиду что-то другое? Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 18, 2013, 10:14 Денис, я не считаю идею делать свой сборщик хорошей. Значительно быстрее и проще замесить Makefile-генератор (по аналогии с eclipse). При этом, если сохранять информацию о проекте в этот Makefile, то его можно будет хранить в системе контроля версий со всеми вытекающими. А вот *.user хранить там нельзя, поэтому после смены рабочего места тебе придется все настройки восстанавливать, что не есть хорошо. Более того, в случае Makefile проект собрать можно будет без установки Qt Creator - в полевых условиях.
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: Авварон от Июнь 18, 2013, 10:45 Нет, как раз таки все достаточно легко: получаем список аргументов/флагов и подсовываем компилятору (так, в принципе, сделано в Keil, IAR, CoIDE - т.е. в большинстве IDE, которые заточены под Embedded проекты). Пока вам надо скомпилить 1 бинарник из списка файлов. А если статик либу прицепить захочется? А динамик? А стороннюю либу? В смысле? См. выше - если проект состоит из нескольких частей, то между ними надо делать граф зависимостей.Так фишка в том, что я не трогаю тулчейн: оно все остается "стандартное" - GCC Toolchain. Как я понимаю идеологию QBS (а понимаю я ее из рук вон плохо), у вас есть некий профиль с огромным набор параметров. Эти параметры разбиты на несколько уровней, каждый уровень наследует предыдущий; при наследовании все параметры нижележащего уровня копируются. К примеру, у вас есть профиль "Qt_4_clang", который наследует профиль cpp "clang" (в профиль cpp входит имя компилятора, архитектура, целевая ОС и тп).Я просто конкретизирую для тулчейна/кита выбор "Embedded Device" для того, чтобы при создании Embedded проекта отсеить другие "несовместимые" тулчейны. Да, в принципе можно было бы создать кастомный GCC Тулчейн, который бы имел виджет с дополнительными/расширенными полями для выбора линкера, ассемблера и пр. утилит, но ИМХО, оно того не стоит, т.к. с помощью обычного GCC компилятора/тулчейна можно и так все это сделать в принципе.. На крайний случай, если все-таки обычного GCC тулчейна окажется маловато - то тогда придется создавать кастомный. Насчет "вшивать" флаги в тулчейн, а не в project "BuildConfiguration" (как сейчас сделано) - тоже надо подумать... В принципе, такой вариант тоже возможен, хотя теряем в гибкости сборки проектов, которые будут использовать один тулчейн - но иметь разные настройки. Все-таки ИМХО, флаги необходимо задавать не тулчейну - а проекту, a точнее "BuildConfiguration" проекта, потому что могут быть разные конфигурации сборки: Release, Debug или еще что-то... Или ты имел ввиду что-то другое? Таким образом, для сборки под embedded вам необходимо добавить свой профиль cpp и прописать ему основные параметры. Основные cpp профили QBS находит при помощи утилиты qbs-detect-toolchains. Креатор себя ведет немножко по-другому - он создает пачку новых профилей (без наследования) из тех Qt, что живут на странице Комплекты и втупую прописывает им все необходимые параметры. Может быть, возможно сделать комплект, не привязанный к Qt. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 18, 2013, 14:15 Цитата: b-s-a Денис, я не считаю идею делать свой сборщик хорошей. Значительно быстрее и проще замесить Makefile-генератор (по аналогии с eclipse). Я не представляю как это можно реализовать. Если ты это реализуешь - тогда другое дело. :) Цитата: Авварон Пока вам надо скомпилить 1 бинарник из списка файлов. А если статик либу прицепить захочется? А динамик? А стороннюю либу? Опять же, это не проблема что-то с чем-то слинковать. Это потом можно решить.. Цитата: Авварон См. выше - если проект состоит из нескольких частей, то между ними надо делать граф зависимостей. Это уж слишком сурово. Я ни разу не встречал такого в своей практике (как Embedded). Цитата: Авварон Креатор себя ведет немножко по-другому - он создает пачку новых профилей (без наследования) из тех Qt, что живут на странице Комплекты и втупую прописывает им все необходимые параметры. Может быть, возможно сделать комплект, не привязанный к Qt. В принципе, Kit не привязан к Qt. Можно поле с выбором версии Qt оставлять пустым (как сейчас я и сделал). Оно необходимо только для класса BuildConfiguration, и разных Step's в процессе сборки Qt-специфик проекта. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 18, 2013, 15:11 Цитата: b-s-a Денис, я не считаю идею делать свой сборщик хорошей. Значительно быстрее и проще замесить Makefile-генератор (по аналогии с eclipse). Я не представляю как это можно реализовать. Если ты это реализуешь - тогда другое дело. :) Установи WinAVR. Сгенери Makefile. Изучи его начало (до правил). Измени чуть-чуть, чтобы работал с не только с авр, но и с другими. Напиши парсер, который будет определять значения переменных. И генератор, который будет подставлять эти значения в готовый шаблон. Все. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 18, 2013, 15:57 Цитата: b-s-a Установи WinAVR. Сгенери Makefile. Изучи его начало (до правил). Измени чуть-чуть, чтобы работал с не только с авр, но и с другими. Напиши парсер, который будет определять значения переменных. И генератор, который будет подставлять эти значения в готовый шаблон. Все. Ох, слишком сурово. Проще сделать генерацию Makefile как отдельной фичей (плагином), типа "Export as Makefile", если уж так оно кому-то нужно. И оно будет генерить Makefile исходя из текущих настроек проекта. На данный момент я не готов использовать отдельные системы сборки, которые излишни в данном случае и только вносят сумятицу. :) Возможно в будущем что-то можно будет сделать когда в голове выстроится вся картина целиком. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 18, 2013, 17:24 создание своей - более сложная работа. Не забывай, что нужно отслеживать изменения файлов. Более того, нужно рекурсивно отслеживать изменение зависимостей файлов (#include). Имхо, тут гимору больше.
Вот так выглядит Makefile. Достаточно просто менять значение переменных и все. А шаблон можно хранить в виде данных плагина. При изменении настроек достаточно просто перегенерировать его. Код: # Hey Emacs, this is a -*- makefile -*- Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 18, 2013, 20:00 Цитата: b-s-a создание своей - более сложная работа. Блин, да ничего сложного нет! По сути - это тот-же Makefile только проще: в процессе сборки аргументы подставляются для каждого шага и все.. Цитата: b-s-a Не забывай, что нужно отслеживать изменения файлов. Зачем? Я не понял.. Для того чтобы не пересобирать каждый раз все сорцы, а пересобрать только измененные? Цитата: b-s-a Более того, нужно рекурсивно отслеживать изменение зависимостей файлов (#include). Имхо, тут гимору больше. Зачем это отслеживать? Ну отредактировал пользователь файл - ну и что? В чем проблема, я не пойму? Цитата: b-s-a Вот так выглядит Makefile. Достаточно просто менять значение переменных и все. А шаблон можно хранить в виде данных плагина. При изменении настроек достаточно просто перегенерировать его. Те-же яйца, только в профиль, да еще зависящие от отдельной утилиты make.exe, да еще и парсер делать - ну его. Все-равно нужно будет отслеживать изменения файлов и перегенеривать Makefile... ИМХО, что может быть проще текущего решения? Не пойму, зачем все эти заморочки с Makefile и пр.? :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: alex312 от Июнь 18, 2013, 20:32 Цитата: b-s-a Не забывай, что нужно отслеживать изменения файлов. Зачем? Я не понял.. Для того чтобы не пересобирать каждый раз все сорцы, а пересобрать только измененные?Цитата: b-s-a Более того, нужно рекурсивно отслеживать изменение зависимостей файлов (#include). Имхо, тут гимору больше. Зачем это отслеживать? Ну отредактировал пользователь файл - ну и что? В чем проблема, я не пойму?Те-же яйца, только в профиль, да еще зависящие от отдельной утилиты make.exe, да еще и парсер делать - ну его. Все-равно нужно будет отслеживать изменения файлов и перегенеривать Makefile... Во-первых, утилита make есть и работает в отличии от . Во-вторых никакого парсера не нужно, нужен генератор. В третьих - перегенерировать makefile нужно будет только после изменения опций компиляторов/линкеров/ассемблеров, или после добавления/удаления файлов проекта. В четвертых - такая схема уже работает в QtCreatore.ИМХО, что может быть проще текущего решения? Не пойму, зачем все эти заморочки с Makefile и пр.? :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 18, 2013, 21:06 Цитата: alex312 Простой пример, сейчас мой проект под STM32F4 собирается полностью за 30 сек., а после изменения 1-го файла - 5 сек. Вот разница между 30 и 5 - это и есть проблема. Хорошо, в принципе это резонно... Цитата: alex312 Во-первых, утилита make есть и работает в отличии от . Проблема в том, что инсталляторы кросс-компилеров не имеют в своем составе утилиты make. Её придется устанавливать отдельно в ту-же директорию, где лежат бинари кросс-компилятора (под Windows), иначе, в принципе, нет никакой возможности узнать откуда ее make.exe запускать. Для решения проблемы (когда Make может лежать где угодно и т.п.), в этом случае придется создавать отдельный кастомный GCC тулчейн, в который можно добавить поля для выбора путей ко всем необходимым екзешкам тулчейна: компиляторам, стрипперу, линкеру, make и пр. Это добавляет мне работы :). Цитата: alex312 Во-вторых никакого парсера не нужно, нужен генератор. В третьих - перегенерировать makefile нужно будет только после изменения опций компиляторов/линкеров/ассемблеров, или после добавления/удаления файлов проекта. В четвертых - такая схема уже работает в QtCreatore. Ок, в принципе - соглашусь. Но дополнительный гемор с генератором (затраты на его создание) не идет ни в какое сравнение с проблемой компиляции изменившихся файлов и т.п. Потому что придется кросс-платформенно автодетектить наличие и имена системных утилит типа: copy, move и пр. Т.е. по сути - это задача создания генератора, аналогичного qmake... Это ппц. сколько работы. Если кто-нибудь возьмется за реализацию генератора - то я соглашусь на использование Makefile. :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Июнь 18, 2013, 22:11 >>Проблема в том, что инсталляторы кросс-компилеров не имеют в своем составе утилиты make.
эту фразу не понял, обчём речь (вроде речь шла о Только GCC)? можно пример? Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Июнь 18, 2013, 22:13 >>Т.е. по сути - это задача создания генератора, аналогичного qmake... Это ппц. сколько работы.
а чё его делать, бери его из Qt (%QTDIR%/qmake) он же собирается статически всегда (т.к. пока его не соберёшь, никакие QtCore,... не собрать) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 18, 2013, 22:56 Цитата: lit-uriy >>Проблема в том, что инсталляторы кросс-компилеров не имеют в своем составе утилиты make. эту фразу не понял, обчём речь (вроде речь шла о Только GCC)? можно пример? Тут речь уже идет об использовании (генерации) Makefile и использовании утилиты Make, вместо прямой компиляции из "командной строки". Например, тот ARM GCC кросс-компилятор который я использовал (на который в шапке темы дал ссылку) не имеет утилиты Make (да и все другие ее тоже не имеют в составе своих инсталляционных пакетов). Поэтому, при добавлении в креатор этого GCC компилятора мы не сможем использовать утилиту Make, т.к. ее нет в принципе, и, следовательно, мы не сможем ничего собрать, используя сгенеренный Makefile! Дело в том, что MinGW под винду (не говоря уже о Linux) имеют в своем составе утилиту Make, но наш кросс-компилятор не будет её иметь, ее надо будет устанавливать отдельно и как-то указывать к ней путь... Цитата: lit-uriy а чё его делать, бери его из Qt (%QTDIR%/qmake) он же собирается статически всегда (т.к. пока его не соберёшь, никакие QtCore,... не собрать) Ты предлагаешь мне взять исходники qmake и на их основе сделать свою генерилку? :o Неее, я такое не потяну в одиночку - вот сам возьми и забацай, раз так все просто :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: Странник от Июнь 19, 2013, 09:53 Ты предлагаешь мне взять исходники qmake и на их основе сделать свою генерилку? :o мне кажется, использование pro-файла проекта вместо своего собственного ini-формата - более удачное решение. можно реализовать собственный makefile-генератор в составе qmake - насколько я понимаю, задача аналогична генерации makefile для кросс-компиляции под Symbian. готов провести более глубокое исследование данного вопроса. впрочем, вариант с qbs кажется мне перспективнее..Неее, я такое не потяну в одиночку - вот сам возьми и забацай, раз так все просто :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 19, 2013, 14:01 Цитата: Странник мне кажется, использование pro-файла проекта вместо своего собственного ini-формата - более удачное решение. можно реализовать собственный makefile-генератор в составе qmake - насколько я понимаю, задача аналогична генерации makefile для кросс-компиляции под Symbian. готов провести более глубокое исследование данного вопроса. впрочем, вариант с qbs кажется мне перспективнее.. При использовании qmake - основная проблема будет в невозможности определения типа проекта по его *.pro файлу. Т.е. При открытии Embedded проекта, QtCreator определит что это проект "заточен" под Qt, соответственно, не "подцепится" наш Embedded плагин: не отобразятся виджеты настройки компилятора, линкера и пр., а он подгрузит Qt4Project/Qt4Support плагины.. Также проблема в том, что используя qmake мы сможем задавать все эти флаги неявно, только в *.pro/*.pri файлах. Лично мне эта идея (использования qmake, qbs) не нравится совсем, потому что нельзя будет отобразить в проекте специфичные для Embedded вещи. Нужно создавать свое расширение для файлов Embedded проектов - иначе ничего не получится. [quote author=Странник] готов провести более глубокое исследование данного вопроса. впрочем, вариант с qbs кажется мне перспективнее.. [/quote] Ок. Это будет интересно. Изложи потом свои мысли как ты видишь все это в связке с qbs. PS: Но ИМХО, для меня: qmake, qbs и пр. - это лишние сущности для Embedded проектов, т.к. усложняют всё очень сильно... :( UPD: И да, можно попробовать через QbsProjectManager сделать.. Надо посмотреть на сорцы - может получится. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: alex312 от Июнь 19, 2013, 15:51 Нужно создавать свое расширение для файлов Embedded проектов - иначе ничего не получится. (https://lh5.googleusercontent.com/-9df2a8-cKC4/UcGoU39cLuI/AAAAAAAAANs/VgPXzff6SSE/w894-h550-no/baremetal_want.png) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 19, 2013, 18:16 Цитата: alex312 Может как-то через создание нового устройства. (Настройки кита -> тип устройства). Это сейчас есть, только называется "Embedded device". :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Июнь 19, 2013, 18:19 ребята, а что такое "qbs"?
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 19, 2013, 19:27 Цитата: lit-uriy ребята, а что такое "qbs"? Типа новый плагин qbsprojectmanager, который должен заменить qt4projectmanager. В нем, вместо qmake с его *.pro/*.pri файлами проекта используются новые файлы проекта *.qbs, в которых структура проекта описывается при помощи JSON (если я не ошибаюсь) с возможностью вставки Java-script. :) Вот ссыль на описание что есть QBS: http://qt-project.org/wiki/Category:Tools::qbs UPD: Я тут потыкал QBS с новым QtCreator 2.8 и понял, что его никак не прикрутить к нашему плагину (никак невозможно использовать), т.к. qbsprojectmanager не экспортирует никаких классов и нельзя их использовать (в отличии от qt4projectmanager). Поэтому, ИМХО, я даже не буду заморачиваться c использованием QBS и QMake, т.к. толку от этого нуль. Буду держаться своей первоначальной линии :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 19, 2013, 19:31 qbs - Qt Build System. Это будущая система сборки, используемая Qt. Сейчас идет активная разработка.
kuzulis, всем бы такие проблемы с написанием генератора. В моем случае он будет выглядеть так: Код: fprintf(file, "....\nSRC = \\%s\n....", srcFiles); Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 19, 2013, 19:55 А вот парсер написать не помешало бы. Чтобы из SRC = xxxx извлечь список файлов, а из других переменных ключи компиляции и пр.
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 19, 2013, 19:56 qbs - Qt Build System. Это будущая система сборки, используемая Qt. Сейчас идет активная разработка. kuzulis, генератор писать не нужно. Так как он выглядит так: Код: fprintf(file, "....\nSRC = \\%s\n....", srcFiles); Это понятно. Но проблема с автодетектом всяких системных утилит типа: copy, xcopy, mkdir, и пр. т.к. на разных платформах - они разные. Эти утилиты необходимы будут в содержимом Makefile - по любому. Цитировать А вот парсер написать не помешало бы. Чтобы из SRC = xxxx извлечь список файлов, а из других переменных ключи компиляции и пр. А никто не говорил, что Makefile будет являться файлом проекта! Makefile будет генерироваться из текущих настроек и скармливаться утилите make. Обратного же действия (парсинга) не планировалось - слишком уж много проблем "из ничего". Тут подавай и QBS, и Makefile, и пр.. бррр... слишком усложняете все, парни. :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 19, 2013, 19:57 Ты смотрел makefile, что я привел в качестве примера? Видимо нет. В НЕМ УЖЕ ВСЕ СДЕЛАНО!!! Он работает и под Windows, и под Linux.
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: Авварон от Июнь 19, 2013, 19:58 UPD: Я тут потыкал QBS с новым QtCreator 2.8 и понял, что его никак не прикрутить к нашему плагину (никак невозможно использовать), т.к. qbsprojectmanager не экспортирует никаких классов и нельзя их использовать (в отличии от qt4projectmanager). Поэтому, ИМХО, я даже не буду заморачиваться c использованием QBS и QMake, т.к. толку от этого нуль. Буду держаться своей первоначальной линии :) Зачем вам расширять плагин креатора, если надо расширить саму QBS? Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 19, 2013, 20:03 Цитата: b-s-a Ты смотрел makefile, что я привел в качестве примера? Видимо нет. В НЕМ УЖЕ ВСЕ СДЕЛАНО!!! Он работает и под Windows, и под Linux. Да, смотрел. Код
Наврятли это будет работать в Windows без установки Cygwin и всякой другой хрени. Цитата: Авварон Зачем вам расширять плагин креатора, если надо расширить саму QBS? С QBS нужно еще разобраться с начала и понять чьто там надо расширить... А тут никто ее не знает. Тем более, собрать QtCreator (для тестов) с использованием QBS - не просто "как два пальца..". Нужно еще дополнительно качать сорцы самой QBS, как-то компилить их, а потом как-то сам QtCreator с ними собрать... Брр.. В общем. :) Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: alex312 от Июнь 19, 2013, 20:25 С QBS нужно еще разобраться с начала и понять чьто там надо расширить... А тут никто ее не знает. в версии 2.8 собирается как 2 пальца, встраивается в сорцы креатора как субмодуль.Тем более, собрать QtCreator (для тестов) с использованием QBS - не просто "как два пальца..". Нужно еще дополнительно качать сорцы самой QBS, как-то компилить их, а потом как-то сам QtCreator с ними собрать... Брр.. В общем. :) З Ы, а под виндой можно генерить makefile для jom .а под линуксом "обычный" Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 19, 2013, 20:47 UPD: Также для тех, кто не очень понимает, куда именно я клоню, я привел ниже скриншоты от CooIDE, которые демонстрируют GUI конфигурации проекта..
(http://s22.postimg.org/z07imkslp/devicetab.png) (http://postimg.org/image/z07imkslp/) (http://s22.postimg.org/h7lyepbd9/compiletab.png) (http://postimg.org/image/h7lyepbd9/) (http://s22.postimg.org/q3wqin1zh/linktab.png) (http://postimg.org/image/q3wqin1zh/) (http://s22.postimg.org/x3asi01xp/outtab.png) (http://postimg.org/image/x3asi01xp/) (http://s22.postimg.org/aq31v70zx/dbgtab.png) (http://postimg.org/image/aq31v70zx/) (http://s22.postimg.org/vpj5mp2od/downloadtab.png) (http://postimg.org/image/vpj5mp2od/) Я, например, хотел бы видеть что-то подобное в настойках "Build Configuration" проекта. Я не хочу все эти опции прописывать неявно где-то в *.pro, *.qbs и пр. файлах самостоятельно. Я, как юзер, вообще, не хочу разбираться что там прописано: файл проекта должен быть "черным" ящиком, а вся конфигурация должна автоматом парситься и предоставляться юзеру в удобной для него форме (в виде чекбоксов и пр. вещей). Но этого не достичь просто что-то добавив в QBS, потому что всем этим занимаются плагины типа: autotoolsprojectmanager, cmakeprojectmanager, genericprojectmanager, qbsprojectmanager, qmlprojectmanager, qt4projectmanager. Поэтому придется для Embedded создавать свой плагин BlablaManager (который на данный момент имеется) со всеми нюансами отображения GUI для Embedded.. Вот о чем я намекаю... Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Июнь 19, 2013, 20:49 Цитата: alex312 в версии 2.8 собирается как 2 пальца, встраивается в сорцы креатора как субмодуль. да не как два пальца.. в данный момент побую собрать - пока безрезультатно. UPD: вроде собрал... Цитата: alex312 З Ы, а под виндой можно генерить makefile для jom .а под линуксом "обычный" В смысле? Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: b-s-a от Июнь 19, 2013, 23:10 Цитата: b-s-a Ты смотрел makefile, что я привел в качестве примера? Видимо нет. В НЕМ УЖЕ ВСЕ СДЕЛАНО!!! Он работает и под Windows, и под Linux. Да, смотрел. Код
Наврятли это будет работать в Windows без установки Cygwin и всякой другой хрени. Работает. Проверено. По крайней мере при установке winavr. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: alex312 от Сентябрь 20, 2013, 16:49 Сегодня в мастер ветку QtCreator добавили Baremetal плагин https://qt.gitorious.org/qt-creator/qt-creator/commit/3fbeca21d2c1c3d073a4a0a94cacaebe4ffeb606
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Сентябрь 20, 2013, 17:54 Охх, отлично,
вот ревью: https://codereview.qt-project.org/#change,65366 Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Февраль 21, 2015, 09:24 Денис, чем дело кончилось?
Тебе удалось сделать плагин? Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Февраль 21, 2015, 14:32 Цитировать Денис, чем дело кончилось? Тебе удалось сделать плагин? Там уже есть BareMetal плагин, который написал другой человек (Tim Sander). Я только добавил в него некоторые "фичи": http://www.prog.org.ru/topic_28160_0.html Но, кажется, его нужно доработать еще (продумать вообще концепцию по-лучше), т.к. там есть некоторые недоработки: 1. Для OpenOCD реально можно задать несколько конфигов (через -f флаг), а в плагине - только один (одно поле ввода для этого) 2. Tim также говорил, что ему не удалось запустить ST-Link утилиту (хотя у меня все работало). Да и вообще, Tim хочет переделать все и оставить одно общее поле для ввода аргументов командной строки.. В этом случае все плагины с OpenOCD/ST-Link становятся ненужными, т.к. можно будет делать любые настройки GDB серверов, используя одну сущность (некую Generic). Но мне не нравится такой подход, т.к. юзеру (мне, к примеру) неохота разбираться в мильенах параметров командной строки для каждого GDB сервера (неохота читать мануалы). Я хочу просто в менюшках сделать нужные настройки и прочее (как во всех Embedded IDE сделано). Кроме того, в Windows/Linux нужно по-разному задавать опции командной строки (например ескейпить кавычками и прочее). Как-то так. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Февраль 21, 2015, 17:07 у меня на работе товарищ стал заниматься ARM-ом и компилит пока в консоли создавая в рукопашную Makefile, по аналогии с WinAVR.
я думал подкинуть ему идею пользовать QtCreator сунулся посмотреть как это может выглядеть, так и не понял как "Легко и просто" создавать проект для этих целей. Ломанулся в хранилище твоего плагина - под Creator 3.3.x не собирается, начал перепахивать, да много там в API Creator-а поменялось. Я попробую этот BareMetal. Но мои ожидания - файл проекта типа qmake PRO, в котором список исходников, возможность перекрытия ключей компилятора и линкера, а наличие формочки для настройки меня мало интересует. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Февраль 21, 2015, 18:43 Попробовал использовать QBS - не компилится даже примитивный main.cpp
QBS ругается: ошибка: Module cpp could not be loaded. Как я понял сильно зависит от Комплекта, если сделаю "Qt XXX / MinGW XXX", то компилится. Где QBS привязывается к комплекту, не могу понять. Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: alex312 от Февраль 22, 2015, 02:29 lit-uriy, есть такой бажок - https://bugreports.qt.io/browse/QBS-709?jql=project%20%3D%20QBS
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: lit-uriy от Февраль 22, 2015, 18:42 alex312, спасибо
Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: kuzulis от Февраль 23, 2015, 13:32 Цитата: lit-uriy Но мои ожидания - файл проекта типа qmake PRO, в котором список исходников, возможность перекрытия ключей компилятора и линкера, а наличие формочки для настройки меня мало интересует. Не, c qmake оно не выйдет "с наскоку", т.к. там надо иметь фейковый qmake (который сам Tim где-то давал.. то-ли в списке рассылки пол-года назад, то-ли где-то еще).. Я для этого советовал-бы все-таки QBS. Второе - это поддерживаются только ARM-toolchains, поэтому AVR и прочие архитектуры врятли получится прикрутить.. т.к. там в самом ядре креатора/qbs нет других архитектур кроме x86/ARM (если не изменяет память). Цитата: lit-uriy Где QBS привязывается к комплекту, не могу понять. Там надо в креаторе выбирать GCC для типа компилятора.Цитата: alex312 lit-uriy, есть такой бажок - https://bugreports.qt.io/browse/QBS-709?jql=project%20%3D%20QBS Ага.. Мой таск.. :) Только когда используется этот воркароуд, то нужно не забыть и откатить все назад если вздумается использовать MinGW снова. Иначе MinGW не будет компилить ничего ;) PS: Взять готовый креатор со всеми этими нововведениями можно тут: http://download.qt.io/snapshots/qtcreator/3.4/ а для следующих версий - тут: http://download.qt.io/snapshots/qtcreator/master/ Название: Re: Создаю плагин для QtCreator для Embedded проектов без ОС Отправлено: alex312 от Февраль 23, 2015, 18:43 kuzulis, по поводу обхода бага.
Сейчас винды нет, не начем проверить, но, КМК, если заменить qbs.toolchain.contains('gcc') на qbs.toolchain.contains('arm') то должно и для arm-none-eabi работать и mingw не трогать. А еще можно и целефую архитектуру в условие пристроить, что б наверняка. |