Привет, уважаемые читатели habrahabr. В этом блоге мы хотели бы анонсировать, что теперь у нас появились CMake модули, которые позволяют скачивать, собирать и просто использовать Intel Threading Building Blocks (Intel TBB) в ваших CMake проектах. Модули доступны в репозитории проекта Intel TBB на GitHub, а также в бинарных пакетах для Linux* OS, Windows* OS и macOS*, начиная с релиза Intel TBB 2017 Update 7.
Использование Intel TBB CMake модулей
Новые модули позволяют осуществлять как простую интеграцию бинарных пакетов Intel TBB в проект, так и более сложные варианты со скачиванием определённых версий с GitHub и сборкой библиотеки из исходного кода. Подробное техническое описание модулей можно найти в документации.
Интеграция библиотеки в проект
Конфигурационные файлы TBBConfig.cmake и TBBConfigVersion.cmake позволяют получить необходимые переменные и импортированные цели для использования Intel TBB. Файлы находятся в папке <tbb_root>/cmake в бинарных пакетах для Linux* OS, Windows* OS или macOS*, начиная с релиза Intel TBB 2017 Update 7.
Алгоритм:
- Скачать и распаковать бинарный пакет.
- Добавить расположение корневой папки подключаемой библиотеки в переменную CMAKE_PREFIX_PATH или путь до конфигурационных файлов в переменную TBB_DIR.
- Вызвать функцию find_package (TBB), добавив нужные параметры при необходимости.
- Использовать полученные переменные и/или импортированные цели.
Необходимые компоненты библиотеки могут быть перечислены после ключевого слова COMPONENTS или REQUIRED при вызове функции find_package, например, tbb, tbbmalloc, tbb_preview и т.д. По умолчанию доступны компоненты tbb, tbbmalloc и tbbmalloc_proxy. Для каждого компонента создаётся импортированная цель формата TBB::<component>.
Определяются следующие переменные:
TBB_FOUND | флаг успешности поиска Intel TBB |
TBB_<component>_FOUND | флаг успешности поиска отдельного компонента |
TBB_IMPORTED_TARGETS | все созданные импортированные цели |
TBB_VERSION | версия Intel TBB (формат: <major>.<minor>) |
TBB_INTERFACE_VERSION | версия интерфейса Intel TBB |
На данный момент при указании желаемой версии библиотеки есть ограничение: автоматически проверяется только совместимость самих версий формата <major>.<minor>, но не проверяется совместимость различных апдейтов в рамках одной версии. Версия интерфейса может быть проверена с использованием переменной TBB_INTERFACE_VERSION.
Сборка Intel TBB из исходного кода с помощью TBBBuild
Модуль TBBBuild.cmake предоставляет функцию tbb_build, которая позволяет собрать библиотеку из исходного кода с использованием родной инфраструктуры библиотеки (Makefile). Для сборки на Linux* OS и macOS* необходимо наличие make-утилиты, а на Windows* OS – gmake. После непосредственно сборки создаются нужные конфигурационные файлы в папке <tbb_root>/cmake.
Функция tbb_build принимает следующие параметры:
TBB_ROOT <variable> | путь до корневой папки бибилотеки, которую нужно собрать |
CONFIG_DIR <variable> | переменная, в которую запишется полный путь к папке с созданными конфигурационными файлами; значение <variable>-NOTFOUND будет возвращено в случае ошибки при сборке |
MAKE_ARGS <custom_make_arguments> | настраиваемые аргументы для make-команды; следующие аргументы определяются и передаются автоматически, если они не переопределены в <custom_make_arguments>:
|
Пример использования модуля:
include(<path-to-tbb-cmake-modules>/TBBBuild.cmake)
tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR TBB_DIR)
find_package(TBB <options>)
Скачивание Intel TBB с помощью TBBGet
Модуль TBBGet.cmake предоставляет функцию tbb_get, которая позволяет скачивать и распаковывать бинарные пакеты и пакеты с исходным кодом для официальных релизов Intel TBB с GitHub. Для бинарных пакетов старше Intel TBB 2017 Update 7 конфигурационные файлы создаются автоматически в папке <tbb_root>/cmake.
Функция tbb_get принимает следующие параметры:
TBB_ROOT <variable> | переменная, в которую будет записан полный путь к корневой папке скачанного и распакованного пакета; значение <variable>-NOTFOUND будет возвращено в случае ошибки при скачивании |
RELEASE_TAG <release_tag>|LATEST | тег релиза для скачивания; по умолчанию используется значение LATEST |
SAVE_TO <path> | путь для распаковки скачанного пакета; по умолчанию используется ${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded |
SYSTEM_NAME Linux|Windows|Darwin | ОС, для которой необходимо скачать бинарный пакет; по умолчанию используется значение переменной CMAKE_SYSTEM_NAME |
CONFIG_DIR <variable> | переменная, в которую будет записан полный путь до конфигурационных файлов; параметр игнорируется, если указан флаг SOURCE_CODE |
SOURCE_CODE | флаг, сигнализирующий о необходимости скачивания пакета с исходным кодом вместо бинарного пакета |
Примеры использования модуля:
- Скачивание и подключение самого свежего бинарного пакета для текущей ОС
include(<path-to-tbb-cmake-modules>/TBBGet.cmake) tbb_get(TBB_ROOT tbb_root CONFIG_DIR TBB_DIR) find_package(TBB <options>)
- Скачивание, сборка и подключение самого свежего пакета с исходным кодом
include(<path-to-tbb-cmake-modules>/TBBGet.cmake) include(<path-to-tbb-cmake-modules>/TBBBuild.cmake) tbb_get(TBB_ROOT tbb_root SOURCE_CODE) tbb_build(TBB_ROOT ${tbb_root} CONFIG_DIR TBB_DIR) find_package(TBB <options>)
Демо-проекты на базе примера GettingStarted/sub_string_finder с подключением Intel TBB
Ключевые слова <version> и <date> должны быть заменены на актуальные значения для загруженного пакета.
Минимальные требования:
- CMake 3.0.0
- Microsoft* Visual Studio 11 (для Intel TBB 2017 Update 7)
- Intel TBB 2017 Update 7
Инструкция:
- Скачайте Intel TBB для Windows* OS и распакуйте его в C:demo_tbb_cmake
- В папке C:demo_tbb_cmaketbb<version>_<date>ossexamplesGettingStartedsub_string_finder создайте файл CMakeLists.txt следующего содержания:
cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR) project(sub_string_finder CXX) add_executable(sub_string_finder sub_string_finder.cpp) # Функция find_package ищет TBBConfig, используя переменные # CMAKE_PREFIX_PATH и TBB_DIR. find_package(TBB REQUIRED tbb) # "TBB::tbb" можно использовать вместо "${TBB_IMPORTED_TARGETS}" target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})
- Запустите CMake GUI и
- Заполните поля (можно использовать кнопки «Browse Source...» и «Browse Build...»):
«Where is the source сode»:
C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder
«Where to build the binaries»:
C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder/build - Добавьте в кэш новую переменную кнопкой «Add Entry»:
Name: CMAKE_PREFIX_PATH
Type: PATH
Value: C:/demo_tbb_cmake/tbb<version>_<date>oss - Cоздайте проект Microsoft* Visual Studio, нажав кнопку «Generate».
- Заполните поля (можно использовать кнопки «Browse Source...» и «Browse Build...»):
- Теперь полученный проект можно открыть в Microsoft* Visual Studio (например, нажав кнопку «Open Project» в CMake GUI) и построить. Путь до сгенерированного проекта:
C:demo_tbb_cmaketbb<version>_<date>ossexamplesGettingStartedsub_string_finderbuildsub_string_finder.sln.
Окно CMake GUI после генерации проекта:
Минимальные требования:
- CMake 3.0.0
Инструкция:
- Склонируйте репозиторий Intel TBB в папку ~/demo_tbb_cmake:
mkdir ~/demo_tbb_cmake cd ~/demo_tbb_cmake git clone https://github.com/01org/tbb.git
- В папке ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder создайте файл CMakeLists.txt следующего содержания:
cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR) project(sub_string_finder CXX) add_executable(sub_string_finder sub_string_finder.cpp) include(${TBB_ROOT}/cmake/TBBBuild.cmake) # Строим Intel TBB с включенными Community Preview Features (CPF). tbb_build(TBB_ROOT ${TBB_ROOT} CONFIG_DIR TBB_DIR MAKE_ARGS tbb_cpf=1) find_package(TBB REQUIRED tbb_preview) # "TBB::tbb_preview" можно использовать вместо "${TBB_IMPORTED_TARGETS}". target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})
- Создайте папку для сборки вашего проекта и перейдите туда:
mkdir ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build cd ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build
- Запустите CMake, указав корневую папку библиотеки Intel TBB:
cmake -DTBB_ROOT=${HOME}/demo_tbb_cmake/tbb ..
- Соберите и запустите проект:
make ./sub_string_finder
Заключение
Команда Intel TBB заинтересована в удобной интеграции библиотеки в пользовательские CMake проекты. Новые модули созданы как раз для решения этой задачи. Они предоставляют простой и гибкий интерфейс со множеством вариантов использования. Надеемся, вы попробуете эти модули, и ждём ваших отзывов.
Ссылки и контакты:
- Наша почта: inteltbbdevelopers@intel.com.
- Наш проект на GitHub.
- Наш форум.
* прочие названия и бренды могут быть объявлены интеллектуальной собственностью других лиц
Автор: Intel