Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: kuzulis от Декабрь 16, 2018, 22:45



Название: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Декабрь 16, 2018, 22:45
Всем привет, не теряю надежды на "возвращение" QBS-а :)

Понадобилось тут заюзать IAR для компиляции bare-metal под-проекта: сам "главный" проект конечно был написан на QBS, а вот "железная" часть была в IAR. И компилять/редактировтаь отдельно эту "железную" часть было не комильфо.

Посидев пару часиков, набросал модуль в QBS для поддержки IAR: https://github.com/denis-shienkov/qbs/tree/iar (ветка 'iar')
Также первый его вариант был добавлен на Qt Code Review: https://codereview.qt-project.org/#/c/248265/

Использовать очень просто:

1. Добавляем в QtCreator как обычно новые кастомные C/C++ компиляторы от IAR.
2. Создаем какое-нить новое bare-metal у-во (например, stmXXXX).
3. Создаем новый кит (комплект), к которому привязываем это у-во и компилятор.
4. В QBS св-вах комплекта указываем: qbs.toolchain: iar

5. Потом копируем файлы (из гитхаба, там свежее, т.к. на код-ревью еще не обновил этот свежак):

* IarProbe.qbs в <путь к установленному Qt-meta (например установленный из MaintenanceTool)>\Tools\QtCreator\share\qtcreator\qbs\share\qbs\imports\qbs\Probes\
* iar.js и iar.qbs в <путь к установленному Qt-meta (например установленный из MaintenanceTool)>\Tools\QtCreator\share\qtcreator\qbs\share\qbs\modules\cpp\

6. Дальше портируем проект (*.ewp) из IAR в QBS, открываем в Qt Creator и наслаждаемся красивой подсветочкой и быстрой компиляцией. :)
Вот тут ссылка на пример проекта для STM32F407 (сгенеренный CubeMX): https://yadi.sk/d/G71tovsmKOu9Qg

ЗЫ:

1. Сейчас там поддерживается только IAR for ARM (EWARM).
2. Отладки, естественно нет.

Кому итересно - просьба потестить, мож что подсказать и т.п.  :)




Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: Авварон от Декабрь 17, 2018, 13:05
Неплохо!

навскидку - prepareИДрузья содержат много копи-пасты, можно вынести в функцию

Вместо
Код:
return "iccarm" + compilerExtension;

лучше взять fileName из пробы раз уж её юзаете (в конце-концов, экзешник может быть завернут в батник и проба это (по идее) должна схавать)


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: Авварон от Декабрь 17, 2018, 13:17
Вместо
Код:
product.cpp.compilerPath
лучше брать модуль из input, правда это может не сразу заработать.
Это нужно для того, чтобы корректно работали группы файлов - можно на группу файлов навешивать свои параметры модуля:
Код:
Group {
   name: "warn_off"
   cpp.warningLevel: "none"
   files: ["buggy.cpp"]
}

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

Кстати, правила которые мультиплекс - они мультиплекс потому что?...


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Декабрь 17, 2018, 15:03
Ок, добавь туда на кодревью плз. свои идейки/комменты (я знаю, ты могеш. :) ). Пусть Кристиан отпишется по ним тоже.


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Декабрь 17, 2018, 19:35
Ага, спс.


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: Авварон от Февраль 10, 2019, 17:03
А можешь добавить документацию по IAR пробе?


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Февраль 10, 2019, 18:52
а, ты имеешь ввиду, по аналогии с твоими коммитами?

добавил


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: Авварон от Февраль 15, 2019, 19:08
Ну ты и разошелся=)

Оффтоп, а Креатор это всё поддерживает? Во-первых, со стороны qmake, во-вторых, со стороны qbs?

clang-cl для qmake появился вот только в последней версии...


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Февраль 20, 2019, 12:32
> Оффтоп, а Креатор это всё поддерживает?

Что именно поддерживает? Если ты имеешь ввиду создание QBS проекта в QtC с использованием тулчейна из IAR, KEIL - то да. Ты можешь его создать и скомпилять..

Но вот с отладкой с использованием "родных" дебаггеров от IAR, KEIL - тут, да, для QtC нужно еще писать плагины... :)
Но по идее, для ARM архитектуры (там где выходной  формат файлов ELF и юзаются всякие DWARF и прочие) можно
попробовать даже для проектов от IAR/KEIL подцепить GDB... Х.З. Может оно и проканает.. надо пробовать.

ЗЫ: Хотя все эти GDB "сливают" вендорным отладчикам от IAR/KEIL. Вот кстати именно для этого (в основном) я хочу запилить  генераторы проектов для IAR/KEIL. и юзать отладку там. (т.к. чтобы написать плагин для QtC который юзает IAR-овский C-Spy Debugger я х.з. скок времени нужно, т.к. особо не видел нормальной документации по этому дебаггеру, одни рекламные гайды).

> Во-первых, со стороны qmake, во-вторых, со стороны qbs?

QMake - нет, QBS теперь - да. :)
 
ЗЫ: Просто появилось немного своб времени на работе и я от нечего делать пописываю.. :)


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: Авварон от Февраль 20, 2019, 14:53
Я вот что имел ввиду - вот я выбираю тулчейн в Среаторе и дальше он генерит верный профиль? Или надо ручками подхачить настройки? Из текста к коммиту я понял второе=)
Мне еще предстоит разбираться с clang-cl в Среаторе - в последней версии прикрутили автодетект к qmake, теперь им можно компилять "искаропки", а вот для интеграции с qbs пока нет, ему сносит крышу когда выбираешь clang-cl.
Вот я и инересуюсь опытом.


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Февраль 20, 2019, 19:07
Цитировать
Я вот что имел ввиду - вот я выбираю тулчейн в Среаторе и дальше он генерит верный профиль? Или надо ручками подхачить настройки? Из текста к коммиту я понял второе=)

1. Пока что в QtC выбирать нужно просто кастомный компилер (и указывать путь к нему).
2. Когда профиль создался, остается просто чуть-чуть прописать в QtC тип тулчейна в настройках QBS профиля.

и все.

ЗЫ: Если добавлять профиль не из криэйтора, а из qbs-setup-toolchain - то оно автоматом создаст корректный профиль и ничего хачить не надо.

ЗЫ: Если ты имел ввиду именно наличие в QtC выбора компилеров типа IAR, KEIL и прочих, определения их ABI, то там такого нету еще (я не добавлял еще, надо плагин писать) :)).



Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Февраль 21, 2019, 17:49
По желаниям трудящихся, добавил поддержку новых компилеров в QtC:

* IAR EW:

https://codereview.qt-project.org/#/c/254051/

* KEIL:

https://codereview.qt-project.org/#/c/254067/

Даже как-то и самому полегчало :)


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: Авварон от Февраль 21, 2019, 18:27
 ;D ;D :D
Код:
return {a, o, so, f, w};


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Февраль 21, 2019, 19:56
Ой, да лан тебе придираться уже :)


Название: Re: [QBS] Хочу поддержку IAR тулчейна
Отправлено: kuzulis от Апрель 18, 2019, 22:50
Итак:

1. В QBS 1.13 (который с QtC 4.9) уже есть поддержка IAR + KEIL для архитектур: ARM AVR, MCS51 (8051).
2. В QBS > 1.13 добавлена поддержка тулчейна SDCC.
3. В QtCreator > 4.9 также будут в baremetal плагине доступны тулчейны: IAR, KEIL, SDCC  (т.е. можно создавать их ручками, а также QtC будет пытаться их автодетектить).

UPD: В процессе еще и генератор проектов для IAR из QBS (генерятся проекты для ARM, AVR, MCS51), пока что в отдельной репе (https://github.com/denis-shienkov/qbs/tree/iar-gen/src/plugins/generator/iarew).


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Май 03, 2019, 15:48
Как я понимаю, сейчас идет работа над IAR? Или заглохло?

Хотелось бы понять, что имеет смысл прикручивать далее. Пока я занят мелкими багофиксами, но надо каких-то фич тоже добавить.
1. Поддержка clang на венде в дополнение к clang-cl?
2. Поддержка grpc, благо она один-в-один копипаста протобуф модуля?
3. Допилить генератор для XCode?
4. Ваша фича?


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Май 05, 2019, 10:03
Цитировать
Как я понимаю, сейчас идет работа над IAR? Или заглохло?

Если ты имеешь в виду генератор - то пока заглохло (нет времени).

Цитировать
1. Поддержка clang на венде в дополнение к clang-cl?

А почему нет?

Цитировать
2. Поддержка grpc, благо она один-в-один копипаста протобуф модуля?

Тут я не знаю, лично я никогда это не использовал и впервые слышу.

Цитировать
3. Допилить генератор для XCode?

А оно генерит нативный проект, или так же как и с генератором MSVC - всё через QBS билдится в итоге? Просто я к тому, что, например, пилимый мною генератор для IAR генерит именно нативные проекты (где не нужны всякие QBS-ы потом чтобы работать со сгенеренным проектом).  По этому поводу я ранее писал в рассылку с тем, что "как по мне" - то есть смысл генерить только нативные проекты, т.к иначе вообще смысла я в генераторах не вижу (генерить QBS-ом проект, чтобы собирать опять его QBS-ом??? масло-масляное??)  :)

Цитировать
4. Ваша фича?

ХЗ... можно ли запилить что-то подобное как в CMake - ExternalProject (или как оно там называется)? Или нет смысла, т.к это невозможно в принципе?


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Май 05, 2019, 13:35

А оно генерит нативный проект, или так же как и с генератором MSVC - всё через QBS билдится в итоге?

К сожалению (или к счастью), собирает оно через qbs. Я тебе в рассылке отвечал по большому счету на примере Xcode генератора, ибо я туда лазил и пытался доделать. а про msvc генератор не знаю вообще ничего. В целом, ничего плохого в таком подходе нет, кроме того, что можно обломаться когда не получается эмулировать поведение "родной" системы сборки. Гораздо хуже, когда нет возможности объяснить IDE как собрать твой кастомный рул=)


ХЗ... можно ли запилить что-то подобное как в CMake - ExternalProject (или как оно там называется)? Или нет смысла, т.к это невозможно в принципе?

Кажется, вот это ближайший тикет (https://bugreports.qt.io/browse/QBS-282)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Май 05, 2019, 21:16
Цитировать
Гораздо хуже, когда нет возможности объяснить IDE как собрать твой кастомный рул=)

Тут да, если есть такие рулы - то это проблемка для "нативной" генерилки. Но также для некоторых IDE есть бОльшая проблема, состоящая в невозможности интеграции туда "кастомных" правил для запуска каких-то левых тулин, типа QBS (т.е. где IDE прибиты гвоздями). В таком случае, думаю, что эти рулы должны игнорироваться... :( И создание проекта в QBS на совести самого разработчика, т.е. если он делает какие-то рулы то он ССЗБ.. Иначе, имхо, я не знаю как это разрулить.

PS: Интересно, а как CMake генерит проекты? Оно же вроде генерит нативные проекты? Например, что сгенерит "cmake -G "Visual Studio 10""? (я просто не в теме)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Май 05, 2019, 22:16

Тут да, если есть такие рулы - то это проблемка для "нативной" генерилки. Но также для некоторых IDE есть бОльшая проблема, состоящая в невозможности интеграции туда "кастомных" правил для запуска каких-то левых тулин, типа QBS (т.е. где IDE прибиты гвоздями). В таком случае, думаю, что эти рулы должны игнорироваться... :(
Ты плохо понимаешь, как работает qbs=) Ты не можешь взять и выкинуть рул из графа - без этого рула граф просто не валиден и его зависимости не соберутся.
С учетом того, что даже просто "скомпилить цпп" это жаваскриптовый рул, то ты выкинешь весь граф, кроме входа и выхода (сорцы и бинарь, соответственно)

Но в теории можно попробовать хакнуть ИДЕ подсовывая ей qbs под видом компилятора - то есть Иде говорит "собери файл" а мы запускаем qbs и собираем весь граф для этого файла нужный, говорит "слинкуй бинарь", а мы запускаем qbs. Боюсь только что работать это будет оч медленно.

И создание проекта в QBS на совести самого разработчика, т.е. если он делает какие-то рулы то он ССЗБ.. Иначе, имхо, я не знаю как это разрулить.

PS: Интересно, а как CMake генерит проекты? Оно же вроде генерит нативные проекты? Например, что сгенерит "cmake -G "Visual Studio 10""? (я просто не в теме)

Симейк генерит "нативные" проекты, да. Тупо "мейкфайл" для каждой поддерживаемой платформы в котором описывает как что собирать.
Но когда я ковырял цмейк (а было это давно), всякие кастомные рулы делались вызовом симейка же который выполнял мой скрипт. Как такой кастомный таргет должен матчится в ИДЕ которая не умеет кастомные правила?)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Май 05, 2019, 22:31
Цитировать
Ты не можешь взять и выкинуть рул из графа

Хм, если говорить в части IAR генератора, то я беру из QBS проекта список сорцов/хидеров библиотек, приложений и пр. (т.е. всех продуктов) + парсю флаги компилятора/линкера для каждого продукта, чтобы "заполнить" соответствующие страницы настроек нативного IAR проекта. И в принципе, это все.  Никакие кастомные рулы я не парсю, т.к. нет смысла в них..

Цитировать
подсовывая ей qbs под видом компилятора

Ну, в случае IAR такое вроде как невозможно. Т.к. там нет возможности ни выбрать компилятор ни ничего другого...

Цитировать
Тупо "мейкфайл" для каждой поддерживаемой платформы в котором описывает как что собирать.

Хмм.. именно мейкфайл? Для студии (к примеру)? Прикольно...


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Май 05, 2019, 23:03

Хм, если говорить в части IAR генератора, то я беру из QBS проекта список сорцов/хидеров библиотек, приложений и пр. (т.е. всех продуктов) + парсю флаги компилятора/линкера для каждого продукта, чтобы "заполнить" соответствующие страницы настроек нативного IAR проекта. И в принципе, это все.  Никакие кастомные рулы я не парсю, т.к. нет смысла в них..
Ну это и щаз возможно - qbs умеет генерить clangdb из которой ты можешь сгенерить файл настроек. Попробуй в эту сторону тогда, в целом, clangdb это такой псевдогенератор которым ничего не собрать, но можно использовать, например, при статическом анализе.


Ну, в случае IAR такое вроде как невозможно. Т.к. там нет возможности ни выбрать компилятор ни ничего другого...
Подменять PATH мы не умеем? Хотя если там пути прохардкожены то беда, конечно.

Хмм.. именно мейкфайл? Для студии (к примеру)? Прикольно...

Мейкфайл в кавычках=) Любой файл проекта - это по сути мейкфайл который описывает правила сборки.
Для студии будет солюшн.


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Июль 06, 2019, 21:22
Я там не задолбал на ревью ещё? ;D


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Июль 06, 2019, 23:15
Не, погодка хреновенькая, мои все спят, а я с пивком сижу, мне хорошо.. :)))

ЗЫ: Это я наверно задолбал... :)))


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Июль 06, 2019, 23:22
Не, погодка хреновенькая, мои все спят, а я с пивком сижу, мне хорошо.. :)))

ЗЫ: Это я наверно задолбал... :)))

Нет, у меня всё также - погода не очень, пивко=) Что пьешь? :) У меня la chouffe


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Июль 07, 2019, 09:54
Ой, не, я предпочитаю свеженькие разливухи. Ты там наверное и не знаешь названия. А в принципе пофиг что пить :).


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Июль 07, 2019, 17:16
А верно я понимаю, что эта штука сделана по аналогии с clang-db генератором и в итоге игнорит все кастомные рулы?
Типа чтобы полноценно юзать из ИДЕ надо сперва собрать (как и для clang-db)?


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Июль 07, 2019, 20:11
Цитировать
верно я понимаю, что эта штука сделана по аналогии с clang-db генератором и в итоге игнорит все кастомные рулы?

Я не знаю как там и что clang-db генерит. Но iarew генератор генерит готовый нативный проект для IAREW IDE.
Естественно, что-то сложное он обломается генерить, т.к. в IAREW IDE вроде нет возможности запихнуть
что-то особенное, как, к примеру в MSVC генераторе (где по сути генерится не нативный проект, а юзается тот-же QBS).

Но тут нет возможности (вроде как) даже засунуть вызовы qbs, да и нет в этом особого смысла,
т.к. мне, как ембеддед программисту нужно иметь нативный проект с возможностями выбора при открытии проекта
в IAREW IDE опций компиляции, выбор MCU и прочее.. т.е. идея в том, чтобы сгенерить из QBS и забыть про QBS. :)

Цитировать
Типа чтобы полноценно юзать из ИДЕ надо сперва собрать (как и для clang-db)?

Эмм... нераспарсил.. Генератор iarew генерит сразу готовый нативный воркспейс с под-проектами (как будто ты
создавал эти проекты сразу из IAREW IDE).  т.е. бери его и сразу открывай в IAREW IDE (по аналогии как CubeMX генерит проекты для STM32),
от QBS там в итоге ничего не остается. :)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Июль 07, 2019, 20:17
Ну, допустим я генерю плюсовый хедер, в котором находится номер ревизии, кастомным рулом.
Как ИДЕ узнает о его существовании? В случае clang-db никак - надо сперва собрать проект через qbs (и сгенерить все эти хедеры) и только потом можно полноценно юзать clang-db (например, натравить анализатор).


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Июль 07, 2019, 21:57
Цитировать
Ну, допустим я генерю плюсовый хедер, в котором находится номер ревизии, кастомным рулом.

Ну, в таком случае - ССЗБ :). Пока что там такие вот ограничения. Чудес не бывает, надо чем-то жертвовать (по крайней мере на данном этапе)... :)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Ноябрь 13, 2019, 15:16
Я заметил, что qbs setup-toolchains --detect стал тормозить на венде (28 секунд). kuzulis, не замечал? Может это связано с изменениями с баре метал?


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Ноябрь 13, 2019, 21:22
Не, 6-7 секунд (Qbs 1.14.1)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Ноябрь 13, 2019, 23:51
Ну 6 секунд тоже дофига, нет?=)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Ноябрь 14, 2019, 16:39
ХЗ, но там же дохрена надо по реестру шляться и пр. Я в тебя верю, ты сможешь это победить! ;)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Ноябрь 14, 2019, 18:19
Я профильнул, тормозит спавн процессов на моей машине как то: вызов vswhere, вызов cl.exe (чтобы получить его версию). Можно немножко ускорить путем кеширования инфы при вызове clang-cl probe (так как мы уже делали примерно те же вызовы когда сетапили msvc), но большого выигрыша это не даст. Хотя процентов 10 тоже бонус=).
Еще тормозят регэкспы в gccProbe (ноги растут из buildCompilerNameFilters) - это еще процентов 10.


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Ноябрь 14, 2019, 19:31
Цитировать
buildCompilerNameFilters

Этот код я копипастил из QtC.

Цитировать
регэкспы в gccProbe

Согласен, по-хорошему там все надо переделывать, да в автотесты добавить, но уж не оч хочется копаться там.

ЗЫ: Я сейчас занят оч. (пытаюсь пришпандорить к QtC кейловский отладчик из uVision4, чтобы не только GDB && CDB были). :)


UPD: У меня вот такой результат на винде (через Power Shell):

QBS 1.14.1 (релиз, из установлнного QtC)
Цитировать
PS C:\Qt-meta\Tools\QtCreator\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 579
Ticks             : 45792279
TotalDays         : 5,30003229166667E-05
TotalHours        : 0,00127200775
TotalMinutes      : 0,076320465
TotalSeconds      : 4,5792279
TotalMilliseconds : 4579,2279

QBS 1.16.0 (отладка, из мастер ветки)
Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 963
Ticks             : 49639633
TotalDays         : 5,74532789351852E-05
TotalHours        : 0,00137887869444444
TotalMinutes      : 0,0827327216666667
TotalSeconds      : 4,9639633
TotalMilliseconds : 4963,9633

Больше всего времени тратится на MSVC пробу (я закомментировал все пробы кроме нее):

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 323
Ticks             : 43230334
TotalDays         : 5,00351087962963E-05
TotalHours        : 0,00120084261111111
TotalMinutes      : 0,0720505566666667
TotalSeconds      : 4,3230334
TotalMilliseconds : 4323,0334

Если оставить только Clang-CL, то:

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}
Could not detect any toolchains. No profile created.


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 31
Ticks             : 310493
TotalDays         : 3,59366898148148E-07
TotalHours        : 8,62480555555556E-06
TotalMinutes      : 0,000517488333333333
TotalSeconds      : 0,0310493
TotalMilliseconds : 31,0493

Если только GCC:

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 356
Ticks             : 3562163
TotalDays         : 4,12287384259259E-06
TotalHours        : 9,89489722222222E-05
TotalMinutes      : 0,00593693833333333
TotalSeconds      : 0,3562163
TotalMilliseconds : 356,2163

Если только Clang:

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}
Could not detect any toolchains. No profile created.


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 303
Ticks             : 3038970
TotalDays         : 3,51732638888889E-06
TotalHours        : 8,44158333333333E-05
TotalMinutes      : 0,00506495
TotalSeconds      : 0,303897
TotalMilliseconds : 303,897

Если только IAR EW:

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 47
Ticks             : 475093
TotalDays         : 5,49876157407407E-07
TotalHours        : 1,31970277777778E-05
TotalMinutes      : 0,000791821666666667
TotalSeconds      : 0,0475093
TotalMilliseconds : 47,5093

Если только KEIL:

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 41
Ticks             : 413757
TotalDays         : 4,78885416666667E-07
TotalHours        : 1,149325E-05
TotalMinutes      : 0,000689595
TotalSeconds      : 0,0413757
TotalMilliseconds : 41,3757

Если только SDCC:

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> Measure-Command {.\qbs-setup-toolchains.exe --detect}
Could not detect any toolchains. No profile created.


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 114
Ticks             : 1147311
TotalDays         : 1,32790625E-06
TotalHours        : 3,186975E-05
TotalMinutes      : 0,001912185
TotalSeconds      : 0,1147311
TotalMilliseconds : 114,7311

Возможно, что там еще разница по времени зависит от кол-ва обнаруженых тулчейнов:

Цитировать
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin> .\qbs-setup-toolchains.exe --detect
Detecting MSVC toolchains...
  MSVC 2017 (x64) detected in
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
  MSVC 2017 (x64_x86) detected in
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x86
  MSVC 2017 (x86_x64) detected in
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64
  MSVC 2017 (x86) detected in
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86
Detecting build environment...
Setting up profile 'MSVC2017-x64'.
Setting up profile 'MSVC2017-x64_x86'.
Setting up profile 'MSVC2017-x86_x64'.
Setting up profile 'MSVC2017-x86'.
Trying to detect clang-cl...
clang-cl was not found.
Trying to detect gcc...
Profile 'rl78-elf-gcc-4_9_2_201902-GNURL78' created for 'C:/GCC/GCC for Renesas RL78 4.9.2.201902-GNURL78-ELF/rl78-elf/rl78-elf/bin/rl78-elf-gcc-4.9.2.201902-GNURL78.exe'.
Profile 'xc32-gcc' created for 'C:/microchip/xc32/v2.20/bin/xc32-gcc.exe'.
Trying to detect clang...
No clang toolchains found.
Trying to detect IAR toolchains...
Profile 'iar-10_10_1-mcs51' created for 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/8051/bin/icc8051.exe'.
Trying to detect KEIL toolchains...
Profile 'keil-9_53_0-mcs51' created for 'C:/Keil_v5/C51/BIN/c51.exe'.
Trying to detect SDCC toolchains...
Profile 'sdcc-3_9_0-mcs51' created for 'C:/Program Files/SDCC/bin/sdcc.exe'.
Profile 'sdcc-3_9_0-stm8' created for 'C:/Program Files/SDCC/bin/sdcc.exe'.
PS E:\git\ng\git\123\qbs-git\build-qbs-Desktop_Qt_5_13_1_MSVC2017_32bit-Debug\bin>

Например, для SDCC, возможно надо время делить на два. Для GCC наверно тоже. Хотя не уверен, надо проверять - да лень.


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Ноябрь 17, 2019, 17:28
ага, интересно, похоже это мой лэптоп тормозит из-за секурити говна установленного


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Декабрь 04, 2019, 19:44
ага, интересно, похоже это мой лэптоп тормозит из-за секурити говна установленного

Как оказалось нет, на макбуке такие же тормоза >:(

Вопрос, а вот тут (https://github.com/qbs/qbs/blob/master/src/lib/corelib/generators/generatorutils.h#L43) на значения энумов что-то завязано? Я думаю заменить значения на флаги, а std::set<Architecture> на QFlags<Architecture>. 32 архитектуры хватит всем (с)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Декабрь 04, 2019, 20:46
Цитировать
Вопрос, а вот тут на значения энумов что-то завязано?

Вроде нет, поэтому они и сделаны енум классом.

Цитировать
32 архитектуры хватит всем

в принципе, наверно да, хватит




Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Декабрь 22, 2019, 21:04
Короче я запилил что хотел, но, кажется, частично зря.
Я чем больше смотрю на этот код (https://github.com/qbs/qbs/blob/master/src/plugins/generator/iarew/iarewversioninfo.cpp#L65), тем меньше понимаю

Код:
int IarewVersionInfo::marketingVersion() const
{
    const auto mv = gen::VersionInfo::marketingVersion();
    for (const IarewVersionInfo &known : knownVersions()) {
        if (known.version().majorVersion() == mv)
            return mv;
    }
    qWarning() << QStringLiteral("Unrecognized IAR EW version: ")
               << version().toString();
    return 0;
}

Вот тут мы вызываем VersionInfo::marketingVersion() (https://github.com/qbs/qbs/blob/master/src/lib/corelib/generators/generatorversioninfo.cpp#L72) которая тупо мажорная версия.

А вот тут (https://github.com/qbs/qbs/blob/master/src/plugins/generator/iarew/iarewgeneratorplugin.cpp#L46) мы перебиравшем все известные версии и создаем генератор.

Код:
static void QbsIarewGeneratorPluginLoad()
{
    for (const auto &info : qbs::IarewVersionInfo::knownVersions()) {
        qbs::ProjectGeneratorManager::registerGenerator(
                    std::make_shared<qbs::IarewGenerator>(info));
    }
}

Внимание вопрос, как мы можем попасть в ветку "Unrecognized IAR EW version:" и если ответ никак то нафейхоа метод О(1) превращать в О(N).


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: kuzulis от Декабрь 22, 2019, 22:02
Цитировать
Короче я запилил что хотел, но, кажется, частично зря.

Где и что запилил?

Цитировать
Внимание вопрос, как мы можем попасть в ветку "Unrecognized IAR EW version:"

Наверно, когда пользователь введет что-то типа:

Цитировать
qbs --generate -g iarew100500

ЗЫ:

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

Цитировать
qbs --generate -g iarew8.1

или как то так (возможно, что есть разница в структуре файлов проекта минорных IAR EW).

В общем, я не я и хата не моя. :)


Название: Re: [QBS] baremetal: Хочу поддержку IAR, KEIL, SDCC тулчейна
Отправлено: Авварон от Декабрь 22, 2019, 22:22

Где и что запилил?


Вот тут пока https://github.com/ABBAPOH/qbs/tree/constexpr

Но я не уверен, что хочу щаз добавлять gsl::span может можно проще сделать=)