The CMakeLists.txt file for building an application must contain the following commands:
generate_edl_file() command.nk_build_idl_files() commandnk_build_cdl_files() commandnk_build_edl_files() commandadd_executable (<program name> "<path to the file containing the program source code>") adds the program build target.add_dependencies (<program name> <name of the edl.h file build target>) adds a program build dependency on edl.h file generation.target_link_libraries (<program name> <list of libraries>) determines the libraries that need to be linked with the program during the build.For example, if the program uses file I/O or network I/O, it must be linked with the vfs::client transport library.
CMake descriptions of system programs and drivers provided in KasperskyOS Community Edition, as well as their exported variables and properties are located in the corresponding files at /opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/lib/cmake/<program name>/<program name>Config.cmake
init.yaml file when building a solution, you must define the EXTRA_CONNECTIONS property and assign it a value with descriptions of the relevant IPC channels.Please note the indentations at the beginning of strings in the EXTRA_CONNECTIONS property. These indentations are necessary to correctly insert values into the init.yaml file and must comply with its syntax requirements.
Example of creating an IPC channel between a Client process and a Server process:
set_target_properties (Client PROPERTIES
EXTRA_CONNECTIONS
" - target: Server
id: server_connection")
When building this solution, the description of this IPC channel will be automatically added to the init.yaml file when processing macros of the init.yaml.in template.
main() function and a dictionary of environment variables to the init.yaml file when building a solution, you must define the EXTRA_ARGS and EXTRA_ENV properties and assign the appropriate values to them.Note the indentations at the beginning of strings in the EXTRA_ARGS and EXTRA_ENV properties. These indentations are necessary to correctly insert values into the init.yaml file and must comply with its syntax requirements.
Example of sending the Client program the "-v" argument of the main() function and the environment variable VAR1 set to VALUE1:
set_target_properties (Client PROPERTIES
EXTRA_ARGS
" - \"-v\""
EXTRA_ENV
" VAR1: VALUE1")
Einit program but instead should be started dynamically, for example, using the ExecutionManager component, the NOT_STATIC_ENTITY property must be defined and assigned its corresponding logical value.Example of disabling automatic startup of the Client program:
set_target_properties(Client PROPERTIES NOT_STATIC_ENTITY YES)
As a result, when building the solution, IPC channels will not be automatically added to the init.yaml file and the program will not start automatically.
Example CMakeLists.txt file for building a simple application
CMakeLists.txt
# Define the name of the project that includes the program.
set (LOCAL_MODULE_NAME "example")
# Define the program name.
set (TASK_NAME "Hello")
# Please note the contents of the init.yaml.in and security.psl.in templates
# They define program names as ${LOCAL_MODULE_NAME}.${TASK_NAME}
# Define the targets that will be used to create the generated files of the program.
set (TASK_IDL_TARGET ${TASK_NAME}_idl)
set (TASK_CDL_TARGET ${TASK_NAME}_cdl)
set (TASK_EDL_TARGET ${TASK_NAME}_edl)
# Add the idl.h file build target.
nk_build_idl_files (${TASK_IDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
IDL "../resources/Hello.idl"
)
# Add the cdl.h file build target.
nk_build_cdl_files (${TASK_CDL_TARGET}
IDL_TARGET ${TASK_IDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
CDL "../resources/Hello.cdl"
)
# Add the EDL file build target.The EDL_FILE variable is exported
# and contains the path to the generated EDL file.
generate_edl_file (${TASK_NAME}
PREFIX ${LOCAL_MODULE_NAME}
)
# Add the edl.h file build target.
nk_build_edl_files (${TASK_EDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
EDL ${EDL_FILE}
)
# Define the target for the program build.
add_executable (${TASK_NAME} "src/hello.c")
# Libraries that are linked to the program during the build.
target_link_libraries (${TASK_NAME}
PUBLIC vfs::client # The program uses file I/O
# and must be connected as a client to VFS
)
# Add a dependency on the Hello_edl target to the Hello target.
# The edl.h file must be generated before the Hello target is built.
add_dependencies (${TASK_NAME} ${TASK_EDL_TARGET})
Page top