The NK compiler (nk-gen-c
) generates the set of transport methods and types based on the EDL, CDL and IDL descriptions. The transport methods and types are needed for generating, sending, receiving and processing IPC messages.
The NK compiler receives the EDL, CDL or IDL file and creates the following files:
H
file containing a declaration and implementation of transport methods and types.D
file that lists the dependencies of the created C
file. This file can be used for building automation using the make
tool.Syntax for using the NK compiler:
nk-gen-c [-I PATH][-o PATH][--types][--interface][--client][--server][--extended-errors][--enforce-alignment-check][--help][--version] FILE
Parameters:
FILE
Path to the EDL, CDL or IDL description for which you need to generate transport methods and types.
-I PATH
Path to the folder containing auxiliary files required for generating transport methods and types. By default, these files are located in the directory /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/include
.
It may also be used for adding other folders to search for the files required for generating the methods and types.
To indicate more than one folder. you can use several -I
switches.
-o PATH
Path to an existing folder where files containing transport methods and types will be created.
-h, --help
Displays the Help text.
--version
Displays the nk-gen-c
version.
--enforce-alignment-check
Enables mandatory alignment checks for queries to memory, even if this check is disabled for the target platform. If these checks are enabled, the NK compiler adds additional alignment checks to the code of the IPC message validators.
By default, memory query alignment check settings are defined for each platform in the file named system.platform
.
--extended-errors
Enables extended error handling in the code of transport methods.
Selective generation
To reduce the amount of code generated by the NK compiler, you can use selective generation flags. For example, it is convenient to use the --server
flag for programs that implement endpoints, and to use the --client
flag for programs that are clients of the endpoints.
If no selective generation flag is specified, the NK compiler will create all transport types and methods that are possible for the specified file.
Selective generation flags for IDL files:
--types
The compiler will create only the constants and types, including the redefined ones (typedef
), from the input IDL file, and the types from imported IDL files that are used in the types of the input file.
However, constants and redefined types from imported IDL files will not be explicitly included in the generated files. If you need to use types from imported files in code, you need to separately generate H files for each such IDL file.
--interface
The compiler will generate files created with the --types
flag, and the structures of request and response messages for all methods of this endpoint.
--client
The compiler will generate files created with the --interface
flag, and the client proxy objects and functions of their initialization for all methods of this endpoint.
--server
The compiler will generate files created with the --interface
flag, and the types and methods of the dispatcher of this endpoint.
Selective generation flags for CDL files and EDL files:
--types
The compiler will generate files created with the --types
flag for all endpoints provided by this component.
However, only the types that are used in parameters of interface methods will be explicitly included in the generated files.
--interface
The compiler will generate files created with the --types
flag for this component/process class, and files generated with the --interface
flag for all services provided by this component.
--client
The compiler will generate files created with the --interface
flag, and the client proxy objects and functions of their initialization for all endpoints provided by this component.
--server
The compiler will generate files created with the --interface
flag, and the types and methods of the dispatcher of this component/process class and the types and methods of dispatchers for all endpoints provided by this component.