Skip to content

Добавление пользовательских функций кодогенерации #15

@Chert-Nik

Description

@Chert-Nik

На данный момент QDT позволяет сгенерировать заготовки перефирийных устройств, при этом реализация поведенческого аспекта ложится на пользователя.

У меня возникла необходимость в автоматической генерации некоторых моделей периферийных устройств. При этом часть поведеньческой функциональности, в моем случае, может быть так же сгенерированна автоматически.

В настоящий момент я использую инструмент QDT для генерации заготовок периферийных устройств. Затем мне приходится парсить сгенерированные QDT .h и .c файлы и добавлять в них функциональность.

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

В частности, если в текущей версии QDT позволяет мне сгенерировать следующий .h файл:

/* uart2.h */
#ifndef INCLUDE_UART2_H
#define INCLUDE_UART2_H
#include "chardev/char-fe.h"
#include "hw/sysbus.h"

//INSERT POS 1

#define TYPE_UART2 "uart2"
#define UART2(obj) OBJECT_CHECK(UART2State, (obj), TYPE_UART2)
#define UART2_CHR "chr"

//INSERT POS 2

typedef struct UART2State {
    SysBusDevice parent_obj;
    MemoryRegion mmio;
    CharBackend chr;

    //INSERT POS 3

} UART2State;

//INSERT POS 4

#endif /* INCLUDE_UART2_H */

То я бы хотел иметь возможность предоставить QDT набор функций (callback-ов), через которые бы был сгенерирован произвольный код на месте комментариев "INSERT POS".

По аналогии с .h файлом для .c файла хотелось бы иметь возможность генерировать произвольный код для добавления #include файлов, описания пользовательских функций, и предоставления осмысленной реализации функциям, генерируемым QDT.

В дальнейшем аналогичная функциональность понадобилась бы и для генерации платформ.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions