Компилятор NK (nk-gen-c) генерирует набор транспортных методов и типов на основе EDL-, CDL- и IDL-описаний. Транспортные методы и типы нужны для формирования, отправки, приема и обработки IPC-сообщений.
Компилятор NK принимает EDL-, CDL- или IDL-файл и создает следующие файлы:
H-файл, содержащий объявление и реализацию транспортных методов и типов.D-файл, в котором перечислены зависимости созданного C-файла. Этот файл может быть использован для автоматизации сборки с помощью утилиты make.Синтаксис использования компилятора NK:
nk-gen-c [-I PATH][-o PATH][--types][--interface][--client][--server][--extended-errors][--enforce-alignment-check][--help][--version] FILE
Параметры:
FILEПуть к EDL-, CDL- или IDL-описанию, для которого необходимо сгенерировать транспортные методы и типы.
-I PATHПуть к директории, содержащей вспомогательные файлы, необходимые для генерации транспортных методов и типов. По умолчанию эти файлы располагаются в директории /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/include.
Также может использоваться для добавления других директорий для поиска файлов, необходимых для генерации.
Чтобы указать более одной директории, можно использовать несколько параметров -I.
-o PATHПуть к существующей директории, в которой будут созданы файлы, содержащие транспортные методы и типы.
-h, --helpОтображает текст справки.
--versionОтображает версию nk-gen-c
--enforce-alignment-checkВключает обязательную проверку выравнивания обращений к памяти, даже если такая проверка отключена для целевой платформы. Если проверка включена, то компилятор NK добавляет дополнительные проверки выравнивания в код валидаторов IPC-сообщений.
По умолчанию параметры проверки выравнивания обращения к памяти задаются для каждой платформы в файле system.platform.
--extended-errorsВключает расширенную обработку ошибок в коде транспортных методов.
Выборочная генерация
Чтобы уменьшить количество генерируемого компилятором NK кода, можно использовать флаги выборочной генерации. Например, для программ, реализующих службы, удобно использовать флаг --server, а для программ, являющихся клиентами служб, удобно использовать флаг --client.
Если ни один из флагов выборочной генерации не указан, компилятор NK создаст все возможные для указанного файла транспортные типы и методы.
Флаги выборочной генерации для IDL-файлов:
--typesКомпилятор создаст только константы и типы, включая переопределенные (typedef), из входного IDL-файла, а также типы из импортируемых IDL-файлов, которые используются в типах входного файла.
При этом константы и переопределенные типы из импортируемых IDL-файлов не будут явно включены в генерируемые файлы. Если вам необходимо использовать типы из импортируемых файлов в коде, нужно отдельно сгенерировать H-файлы для каждого такого IDL-файла.
--interfaceКомпилятор создаст файлы, создаваемые с флагом --types, а также структуры сообщений запросов и ответов для всех методов этой службы.
--clientКомпилятор создаст файлы, создаваемые с флагом --interface, а также клиентские прокси-объекты и функции их инициализации для всех методов этой службы.
--serverКомпилятор создаст файлы, создаваемые с флагом --interface, а также типы и методы диспетчера этой службы.
Флаги выборочной генерации для CDL-файлов и EDL-файлов:
--typesКомпилятор создаст файлы, создаваемые с флагом --types для всех служб, предоставляемых этим компонентом.
При этом явно включены в генерируемые файлы будут только те типы, которые используются в параметрах интерфейсных методов.
--interfaceКомпилятор создаст файлы, создаваемые с флагом --types для этого компонента/класса процессов, а также файлы, создаваемые с флагом --interface для всех предоставляемых этим компонентом.
--clientКомпилятор создаст файлы, создаваемые с флагом --interface, а также клиентские прокси-объекты и функции их инициализации для всех служб, предоставляемых этим компонентом.
--serverКомпилятор создаст файлы, создаваемые с флагом --interface, а также типы и методы диспетчера этого компонента/класса процессов и типы и методы диспетчеров для всех служб, предоставляемых этим компонентом.