Использование CMake из состава KasperskyOS Community Edition

Для автоматизации процесса подготовки образа решения нужно настроить систему сборки CMake. За основу можно взять параметры системы сборки, используемые в примерах из состава KasperskyOS Community Edition.

В файлах CMakeLists.txt используется стандартный синтаксис CMake, а также команды и макросы из библиотек, поставляемых в KasperskyOS Community Edition.

Рекомендованная структура директорий проекта

При создании решения на базе KasperskyOS для упрощения использования скриптов CMake рекомендуется использовать следующую структуру директорий в проекте:

Пример структуры директорий проекта

example$ tree

.

├── CMakeLists.txt

├── cross-build.sh

├── hello

│ ├── CMakeLists.txt

│ ├── src

│ │ ├── hello.c

├── einit

│ ├── CMakeLists.txt

│ ├── src

│ │ ├── init.yaml.in

│ │ ├── security.psl.in

│ │ ├── fstab

├── resources

│ ├── Hello.idl

│ ├── Hello.cdl

│ ├── Hello.edl

Сборка проекта

Для подготовки к сборке с помощью системы сборки CMake необходимо:

  1. Подготовить корневой файл CMakeLists.txt, содержащий общие инструкции сборки для всего решения.
  2. Подготовить файлы CMakeLists.txt для каждой собираемой прикладной программы.
  3. Подготовить файл CMakeLists.txt для программы Einit.
  4. Подготовить шаблоны init.yaml.in и security.psl.in.

Для выполнения кросс-компиляции с помощью системы автоматизации сборки CMake необходимо:

  1. Создать поддиректорию для сборки.

    BUILD=$PWD/.build

    mkdir -p $BUILD && cd $BUILD

  2. Перед запуском генерации скриптов сборки (команда cmake) установить следующие значения переменных окружения:
    • export LANG=C
    • export PKG_CONFIG=""
    • export SDK_PREFIX="/opt/KasperskyOS-Community-Edition-<version>"
    • export PATH="$SDK_PREFIX/toolchain/bin:$PATH"
    • export INSTALL_PREFIX=$BUILD/../install
    • export TARGET="aarch64-kos"
  3. При запуске генерации скриптов сборки (команда cmake) указать:
    • параметр -G "Unix Makefiles"
    • путь к файлу расширения системы сборки (toolchain.cmake) в переменной CMAKE_TOOLCHAIN_FILE.

      Файл расширения системы сборки расположен в следующей директории: /opt/KasperskyOS-Community-Edition-<version>/toolchain/share/toolchain-aarch64-kos.cmake

    • значение переменной CMAKE_BUILD_TYPE:STRING=Debug
    • значение переменной CMAKE_INSTALL_PREFIX:STRING=$INSTALL_PREFIX
    • путь к корневому файлу CMakeLists.txt
  4. При запуске сборки (команда make) указать одну из целей сборки.

    Имя цели должно совпадать с именем цели сборки, переданным в команду сборки решения в файле CMakeLists.txt для программы Einit.

Пример скрипта сборки cross-build.sh

cross-build.sh

#!/bin/bash

# Создаем поддиректорию для сборки

BUILD=$PWD/.build

mkdir -p $BUILD && cd $BUILD

# Устанавливаем значения переменных окружения

export LANG=C

export PKG_CONFIG=""

export SDK_PREFIX="/opt/KasperskyOS-Community-Edition-<version>"

export PATH="$SDK_PREFIX/toolchain/bin:$PATH"

export INSTALL_PREFIX=$BUILD/../install

export TARGET="aarch64-kos"

# Запускаем генерацию файлов для сборки. Так как текущая директория это $BUILD,

# корневой файл CMakeLists.txt находится в родительской директории

cmake -G "Unix Makefiles" \

-D CMAKE_BUILD_TYPE:STRING=Debug \

-D CMAKE_INSTALL_PREFIX:STRING=$BUILD/../.install \

-D CMAKE_TOOLCHAIN_FILE=$SDK_PREFIX/toolchain/share/toolchain-$TARGET.cmake \

../

# Запускаем сборку. Включаем флаг VERBOSE для make и перенаправляем вывод в файл build.log

VERBOSE=1 make kos-qemu-image 2>&1 | tee build.log

# Запускаем собранный образ решения в QEMU.

# -kernel $BUILD/einit/kos-qemu-image путь к собранному образу ядра

$SDK_PREFIX/toolchain/bin/qemu-system-aarch64 \

-m 1024 \

-cpu core2duo \

-serial stdio \

-kernel $BUILD/einit/kos-qemu-image

В этом разделе

Корневой файл CMakeLists.txt

Файлы CMakeLists.txt для сборки прикладных программ

Файл CMakeLists.txt для сборки программы Einit

Шаблон init.yaml.in

Шаблон security.psl.in

В начало