Использование CMake из состава KasperskyOS Community Edition
Для автоматизации процесса подготовки образа решения нужно настроить систему сборки CMake
. За основу можно взять параметры системы сборки, используемые в примерах из состава KasperskyOS Community Edition.
В файлах CMakeLists.txt
используется стандартный синтаксис CMake
, а также команды и макросы из библиотек, поставляемых в KasperskyOS Community Edition.
Рекомендованная структура директорий проекта
При создании решения на базе KasperskyOS рекомендуется использовать следующую структуру директорий в проекте:
- В корне проекта создать корневой файл CMakeLists.txt, содержащий общие инструкции сборки для всего решения.
- Исходный код каждой из разрабатываемых программ следует разместить в отдельной директории, в поддиректории
src
. - Создать файлы CMakeLists.txt для сборки каждой прикладной программы в соответствующих директориях.
- Для генерации исходного кода программы
Einit
следует создать отдельную директориюeinit
, содержащую поддиректориюsrc
, в которую следует поместить шаблоны init.yaml.in и security.psl.in.Также в эту директорию можно поместить любые другие файлы, которые необходимо включить в образ решения.
- Создать файл CMakeLists.txt для сборки программы
Einit
в директорииeinit
. - Файлы EDL-, CDL- и IDL-описаний следует разместить в директории
resources
в корне проекта.
Пример структуры директорий проекта
example$ tree
.
├── CMakeLists.txt
├── hello
│ ├── CMakeLists.txt
│ ├── src
│ │ ├── hello.c
├── einit
│ ├── CMakeLists.txt
│ ├── src
│ │ ├── init.yaml.in
│ │ ├── security.psl.in
├── resources
│ ├── Hello.idl
│ ├── Hello.cdl
│ ├── Hello.edl
Сборка образа решения
Чтобы выполнить сборку образа решения, нужно использовать утилиту cmake
(исполняемый файл toolchain/bin/cmake
из состава KasperskyOS Community Edition).
Пример скрипта сборки:
build.sh
#!/bin/bash
# Скрипт для запуска в корне проекта.
# Сведения о параметрах запуска утилиты cmake можно
# получить shell-командой cmake --help, а также из
# официальной документации по CMake.
TARGET="aarch64-kos"
SDK_PREFIX="/opt/KasperskyOS-SDK"
# Инициализация системы сборки
cmake \
-G "Unix Makefiles" \
-D CMAKE_BUILD_TYPE:STRING=Release \
-D CMAKE_TOOLCHAIN_FILE=$SDK_PREFIX/toolchain/share/toolchain-$TARGET.cmake \
-S . \
-B build
# Сборка
# Чтобы собрать образ решения для QEMU, нужно указать цель, заданную в
# параметре NAME CMake-команды build_kos_qemu_image() в файле CMakeLists.txt
# для сборки программы Einit.
# Чтобы собрать образ решения для аппаратной платформы, нужно указать цель,
# заданную в параметре NAME CMake-команды build_kos_hw_image() в файле
# CMakeLists.txt для сборки программы Einit.
# Чтобы собрать образ решения для QEMU и запустить QEMU с этим образом, нужно
# указать цель sim.
cmake --build build --target sim