Файл CMakeLists.txt
для сборки прикладной программы должен содержать следующие команды:
include (platform/nk)
– подключение библиотеки CMake
для работы с компилятором NK.project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO"
) – установка флагов компилятора и компоновщика.generate_edl_file()
.nk_build_idl_files()
nk_build_cdl_files()
nk_build_edl_files()
add_executable (<имя программы> "<путь к файлу исходного кода программы>")
– добавление цели для сборки программы.add_dependencies (<имя программы> <имя цели сборки edl.h файла>
) – добавление зависимости сборки программы от генерации edl.h-файла.target_link_libraries (<имя программы> <список библиотек>)
– определяет библиотеки, с которыми необходимо скомпоновать программу при сборке.Например, если программа использует файловый или сетевой ввод/вывод, то она должна быть скомпонована с транспортной библиотекой ${vfs_CLIENT_LIB}
.
CMake
-описания системных программ и драйверов, поставляемых в составе KasperskyOS Community Edition, а также их экспортированных переменных и свойств находятся в соответствующих файлах /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/lib/cmake/<имя программы>/<имя программы>-config.cmake
init.yaml
при сборке решения необходимо определить свойство EXTRA_CONNECTIONS
и присвоить ему значение с описаниями нужных IPC-каналов.Обратите внимание на отступы в начале строк в свойстве EXTRA_CONNECTIONS
. Эти отступы необходимы для корректной подстановки значений в файл init.yaml
и должны соответствовать требованиям к его синтаксису.
Пример создания IPC-канала между процессами Client
и Server
:
set_target_properties (Client PROPERTIES
EXTRA_CONNECTIONS
" - target: Server
id: server_connection")
В результате, при сборке решения, описание этого IPC-канала будет автоматически добавлено в файл init.yaml
на этапе обработки макросов шаблона init.yaml.in.
main()
и словаря переменных окружения в файл init.yaml
при сборке решения, необходимо определить свойства EXTRA_ARGS
и EXTRA_ENV
и присвоить им соответствующие значения.Обратите внимание на отступы в начале строк в свойствах EXTRA_ARGS
и EXTRA_ENV
. Эти отступы необходимы для корректной подстановки значений в файл init.yaml
и должны соответствовать требованиям к его синтаксису.
Пример передачи программе Client
аргумента "-v"
функции main()
и переменной окружения VAR1
со значением VALUE1
:
set_target_properties (Client PROPERTIES
EXTRA_ARGS
" - \"-v\""
EXTRA_ENV
" VAR1: VALUE1")
В результате, при сборке решения, описание аргумента функции main()
и значение переменной окружения будут автоматически добавлены в файл init.yaml
на этапе обработки макросов шаблона init.yaml.in.
Пример файла CMakeLists.txt для сборки простой прикладной программы
CMakeLists.txt
project (hello)
# Инструментарий для работы с компилятором NK.
include (platform/nk)
# Установка флагов компиляции.
project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO")
# Задаем имя проекта, в который входит программа.
set (LOCAL_MODULE_NAME "example")
# Задаем имя программы.
set (ENTITY_NAME "Hello")
# Обратите внимание на содержание шаблонов init.yaml.in и security.psl.in
# В них имена программ задаются как ${LOCAL_MODULE_NAME}.${ENTITY_NAME}
# Задаем цели, которые будут использованы для создания генерируемых файлов программы.
set (ENTITY_IDL_TARGET ${ENTITY_NAME}_idl)
set (ENTITY_CDL_TARGET ${ENTITY_NAME}_cdl)
set (ENTITY_EDL_TARGET ${ENTITY_NAME}_edl)
# Задаем имя цели, которая будет использована для построения программы.
set (APP_TARGET ${ENTITY_NAME}_app)
# Добавляем цель сборки idl.h-файла.
nk_build_idl_files (${ENTITY_IDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
IDL "resources/Hello.idl"
)
# Добавляем цель сборки cdl.h-файла.
nk_build_cdl_files (${ENTITY_CDL_TARGET}
IDL_TARGET ${ENTITY_IDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
CDL "resources/Hello.cdl")
# Добавляем цель сборки EDL-файла. Переменная EDL_FILE экспортируется
# и содержит путь до сгенерированного EDL-файла.
generate_edl_file ( ${ENTITY_NAME}
PREFIX ${LOCAL_MODULE_NAME}
)
# Добавляем цель сборки edl.h-файла.
nk_build_edl_files (${ENTITY_EDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
EDL ${EDL_FILE}
)
# Определяем цель для сборки программы.
add_executable (${APP_TARGET} "src/hello.c")
# Имя программы в init.yaml и security.psl и имя исполняемого файла должны совпадать
set_target_properties (${APP_TARGET} PROPERTIES OUTPUT_NAME ${ENTITY_NAME})
# Библиотеки, с которыми программа компонуется при сборке
target_link_libraries ( ${APP_TARGET}
PUBLIC ${vfs_CLIENT_LIB} # Программа использует файловый ввод/вывод
# и должна быть подключена как клиент к VFS
)
В начало