Open Chert-Nik opened 4 years ago
Сразу нужно сказать, что текущая реализация модели не позволяет вставлять
совсем уж произвольный код.
Во-первых, код не может быть просто строкой (вернее, может, но только в определённых
случаях).
Он должен быть построен с помощью API из модуля source
.
Примеры использования этого API можно найти в qemu/sysbusdevice.py
, qemu/pcie.py
и других файлах, отвечающих за генерацию (в том же модуле).
Во-вторых, мы пока не поддерживаем весь синтаксис Си.
Собственно, примеры в обозначенных файлах содержат почти все
поддерживаемые случаи использования.
Возможности допиливаются по мере надобности.
Вклиниться в процесс генерации можно (теоретически) с помощью
наследования и перегрузки методов генерации.
В данном случае от qemu.sysbusdevice.SysBusDeviceType
.
Проанализировав код методов, отвечающих за генерацию, можно заметить, что
они сохраняют созданные сущности в self
под определёнными именами,
откуда их можно достать и изменить.
Я попробую придумать какой-нибудь пример. Также м.б. получится сделать некоторые вещи удобнее. Это будет PR, следите за обновлениями.
PR #17 добавляет пример вставки пользовательского кода в заготовку.
На данный момент QDT позволяет сгенерировать заготовки перефирийных устройств, при этом реализация поведенческого аспекта ложится на пользователя.
У меня возникла необходимость в автоматической генерации некоторых моделей периферийных устройств. При этом часть поведеньческой функциональности, в моем случае, может быть так же сгенерированна автоматически.
В настоящий момент я использую инструмент QDT для генерации заготовок периферийных устройств. Затем мне приходится парсить сгенерированные QDT .h и .c файлы и добавлять в них функциональность.
Было бы здорово, если бы QDT представлял возможность пользователю интегрироваться в процесс кодогенерации, для добавления в заготовки необходимой функциональности.
В частности, если в текущей версии QDT позволяет мне сгенерировать следующий .h файл:
То я бы хотел иметь возможность предоставить QDT набор функций (callback-ов), через которые бы был сгенерирован произвольный код на месте комментариев "INSERT POS".
По аналогии с .h файлом для .c файла хотелось бы иметь возможность генерировать произвольный код для добавления #include файлов, описания пользовательских функций, и предоставления осмысленной реализации функциям, генерируемым QDT.
В дальнейшем аналогичная функциональность понадобилась бы и для генерации платформ.