The CMakeLists.txt
file for building an application must contain the following commands:
include (platform/nk)
connects the CMake
library for working with the NK compiler.project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO"
) sets the flags of the compiler and linker.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, and descriptions of their exported variables and properties are located in the corresponding files at /opt/KasperskyOS-Community-Edition-<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")
When building this solution, the description of the main()
function argument and the environment variable value will be automatically added to the init.yaml
file when processing macros of the init.yaml.in template.
Example CMakeLists.txt file for building a simple application
CMakeLists.txt
project (hello)
# Include the CMake library named nk for working with the NK compiler (nk-gen-c).
include (platform/nk)
# Set the linker and compiler flags.
project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO")
# 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