Параметры генерации транспортного кода на языке C

30 сентября 2026

ID cmake_c_params

Через параметр NK_FLAGS CMake-команд nk_build_*dl_files () можно задать параметры генерации транспортного кода на языке C.

Настройка, необходимая при использовании интерфейсных методов с error-параметрами

Если IDL-файл включает хотя бы одну сигнатуру интерфейсного метода с хотя бы одним error-параметром, необходимо указать один из следующих параметров:

  • --extended-errors

    Этот параметр дает возможность использовать интерфейсные методы с одним или несколькими error-параметрами произвольных IDL-типов. Клиент работает с error-параметрами как с выходными параметрами.

  • --deprecated-no-extended-errors

    Этот параметр дает возможность использовать интерфейсные методы только с одним error-параметром status IDL-типа UInt16, значение которого клиент получает через код возврата интерфейсного метода.

    Способ передачи error-параметров, соответствующий параметру --deprecated-no-extended-errors, является устаревшим и перестанет поддерживаться в будущем, поэтому рекомендуется указывать параметр --extended-errors.

Выборочная генерация транспортного кода

Чтобы уменьшить объем генерируемого транспортного кода, можно использовать флаги выборочной генерации транспортного кода. Например, для программ, предоставляющих службы, можно использовать флаг --server, а для программ, использующих службы, можно использовать флаг --client.

Флаги выборочной генерации транспортного кода для IDL-файла:

  • --types

    Транспортный код включает типы, соответствующие IDL-типам из заданного IDL-файла, а также импортируемым в этот файл IDL-типам, которые используются в IDL-типах заданного IDL-файла. При этом типы, соответствующие импортируемым IDL-константам и псевдонимам импортируемых IDL-типов, не включаются в файл *.idl.h. Чтобы использовать типы, соответствующие импортируемым IDL-константам и псевдонимам импортируемых IDL-типов, нужно отдельно сгенерировать транспортный код для IDL-файлов, из которых осуществляется импорт.

  • --interface

    Транспортный код соответствует флагу --types, а также включает типы структур фиксированной части IPC-запросов и IPC-ответов для интерфейсных методов, сигнатуры которых указаны в заданном IDL-файле. Кроме того, транспортный код содержит константы с размерами арен IPC-сообщений.

  • --client

    Транспортный код соответствует флагу --interface, а также включает тип прокси-объекта, метод инициализации прокси-объекта и интерфейсные методы, указанные в заданном IDL-файле.

  • --server (установлен по умолчанию)

    Транспортный код соответствует флагу --interface, а также включает типы и диспетчер (dispatch-метод), используемые для обработки IPC-запросов, соответствующих интерфейсным методам, указанным в заданном IDL-файле.

Флаги выборочной генерации транспортного кода для CDL-файла или EDL-файла:

  • --types

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

  • --endpoints

    Транспортный код соответствует флагу --types, а также включает типы структур фиксированной части IPC-запросов и IPC-ответов для методов служб, предоставляемых компонентом (для заданного CDL-файла) или классом процессов (для заданного EDL-файла). Кроме того, транспортный код содержит константы с размерами арен IPC-сообщений.

  • --client

    Транспортный код соответствует флагу --endpoints, а также включает типы прокси-объектов, методы инициализации прокси-объектов и методы служб, предоставляемых компонентом (для заданного CDL-файла) или классом процессов (для заданного EDL-файла).

  • --server (установлен по умолчанию)

    Транспортный код соответствует флагу --endpoints, а также включает типы и диспетчеры (dispatch-методы), используемые для обработки IPC-запросов, соответствующих службам, предоставляемым компонентом (для заданного CDL-файла) или классом процессов (для заданного EDL-файла). Кроме того, транспортный код включает типы стабов и методы инициализации стабов.

Вывод диагностических данных об отправке и приеме IPC-сообщений

Транспортный код может формировать диагностические данные об отправке и приеме IPC-сообщений и выводить эти данные через стандартный вывод ошибок. Чтобы генерировать транспортный код с такими возможностями, нужно использовать следующие параметры:

  • --trace-client-ipc {headers|dump}

    Код вывода диагностических данных исполняется непосредственно перед выполнением системного вызова Call() и сразу после его выполнения. Если указано значение headers, диагностические данные включают идентификатор метода службы (MID), идентификатор службы (RIID), размер фиксированной части IPC-сообщения в байтах, содержимое дескриптора арены IPC-сообщения, размер арены IPC-сообщения в байтах и размер использованной части арены IPC-сообщения в байтах. Если указано значение dump, диагностические данные дополнительно включают содержимое фиксированной части и арены IPC-сообщения в шестнадцатеричном представлении.

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

  • --trace-server-ipc {headers|dump}

    Код вывода диагностических данных исполняется непосредственно перед вызовом функции, реализующей интерфейсный метод, и сразу после выполнения этой функции, то есть при вызове диспетчера (dispatch-метода) в промежутке между выполнением системных вызовов Recv() и Reply(). Если указано значение headers, диагностические данные включают идентификатор метода службы (MID), идентификатор службы (RIID), размер фиксированной части IPC-сообщения в байтах, содержимое дескриптора арены IPC-сообщения, размер арены IPC-сообщения в байтах и размер использованной части арены IPC-сообщения в байтах. Если указано значение dump, диагностические данные дополнительно включают содержимое фиксированной части и арены IPC-сообщения в шестнадцатеричном представлении.

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

  • --ipc-trace-method-filter <METHOD 1>[,<METHOD 2>]...

    Вывод диагностических данных выполняется, если только вызваны заданные интерфейсные методы. В качестве значения METHOD можно использовать имя интерфейсного метода либо конструкцию <имя пакета>:<имя интерфейсного метода>. Имя пакета и имя интерфейсного метода указаны в IDL-файле.

    Если этот параметр не указан, вывод диагностических данных выполняется при вызове любого интерфейсного метода.

    Параметр можно указать многократно. Например, можно указать все требуемые интерфейсные методы в одном параметре или каждый требуемый интерфейсные метод в отдельном параметре.

Управление предупреждениями и ошибками

Можно отключить вывод некоторых предупреждений генератора транспортного кода либо, наоборот, назначить эти предупреждения ошибками. Чтобы отключить вывод предупреждения, нужно использовать параметр -Wno-<WARN_CODE>. Чтобы назначить предупреждение ошибкой, нужно использовать параметр -Werror=<WARN_CODE>. WARN_CODE может принимать следующие значения:

  • xdl.component-named-as-task-class

    Имя класса процессов в EDL-файле совпадает с именем компонента в декларации component CDL-файла, который не связан с этим EDL-файлом. То есть в заданных директориях поиска генератор транспортного кода обнаружил CDL-файл, в котором декларация component содержит имя компонента, совпадающее с именем класса процессов в EDL-файле. При этом декларация components EDL-файла не содержит имя компонента, соответствующее найденному CDL-файлу, либо EDL-файл вообще не содержит декларацию components.

  • xdl.deprecated-syntax

    В EDL-файле используется устаревшая декларация entity.

  • xdl.multiple-files

    Генератор транспортного кода обнаружил несколько IDL-файлов, соответствующих имени интерфейса или пакета, либо несколько CDL-файлов, соответствующих имени компонента. Например, в заданных директориях поиска генератор транспортного кода обнаружил несколько CDL-файлов, которые соответствуют одному имени компонента, указанному в декларации components EDL-файла, или несколько IDL-файлов, которые соответствуют одному имени интерфейса, указанному в декларации endpoints CDL- файла. (Для генерации транспортного кода используется первый найденный из нескольких подходящих IDL-, CDL-файлов.)

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!