- PVSM.RU - https://www.pvsm.ru -
Привет, уважаемые читатели habrahabr. В этом блоге мы хотели бы анонсировать, что теперь у нас появились CMake модули, которые позволяют скачивать, собирать и просто использовать Intel Threading Building Blocks (Intel TBB) в ваших CMake проектах. Модули доступны в репозитории проекта Intel TBB на GitHub [1], а также в бинарных пакетах [2] для Linux* OS, Windows* OS и macOS*, начиная с релиза Intel TBB 2017 Update 7.
Новые модули позволяют осуществлять как простую интеграцию бинарных пакетов Intel TBB в проект, так и более сложные варианты со скачиванием определённых версий с GitHub и сборкой библиотеки из исходного кода. Подробное техническое описание модулей можно найти в документации [3].
Конфигурационные файлы TBBConfig.cmake и TBBConfigVersion.cmake позволяют получить необходимые переменные и импортированные цели для использования Intel TBB. Файлы находятся в папке <tbb_root>/cmake в бинарных пакетах для Linux* OS, Windows* OS или macOS*, начиная с релиза Intel TBB 2017 Update 7.
Алгоритм:
Необходимые компоненты библиотеки могут быть перечислены после ключевого слова COMPONENTS или REQUIRED при вызове функции find_package [5], например, 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.
Модуль 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>)
Модуль TBBGet.cmake предоставляет функцию tbb_get, которая позволяет скачивать и распаковывать бинарные пакеты и пакеты с исходным кодом для официальных релизов Intel TBB с GitHub [6]. Для бинарных пакетов старше 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 [7]}/tbb_downloaded |
SYSTEM_NAME Linux|Windows|Darwin | ОС, для которой необходимо скачать бинарный пакет; по умолчанию используется значение переменной CMAKE_SYSTEM_NAME [8] |
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>)
Минимальные требования:
Инструкция:
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})
Инструкция:
mkdir ~/demo_tbb_cmake
cd ~/demo_tbb_cmake
git clone https://github.com/01org/tbb.git
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 -DTBB_ROOT=${HOME}/demo_tbb_cmake/tbb ..
make
./sub_string_finder
Команда Intel TBB заинтересована в удобной интеграции библиотеки в пользовательские CMake проекты. Новые модули созданы как раз для решения этой задачи. Они предоставляют простой и гибкий интерфейс со множеством вариантов использования. Надеемся, вы попробуете эти модули, и ждём ваших отзывов.
Ссылки и контакты:
* прочие названия и бренды могут быть объявлены интеллектуальной собственностью других лиц
Автор: Intel
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/262194
Ссылки в тексте:
[1] репозитории проекта Intel TBB на GitHub: https://github.com/01org/tbb/tree/tbb_2017/cmake
[2] бинарных пакетах: https://github.com/01org/tbb/releases/latest
[3] документации: https://github.com/01org/tbb/tree/tbb_2017/cmake#technical-documentation-for-cmake-modules
[4] CMAKE_PREFIX_PATH: https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html
[5] find_package: https://cmake.org/cmake/help/latest/command/find_package.html
[6] официальных релизов Intel TBB с GitHub: https://github.com/01org/tbb/releases
[7] CMAKE_CURRENT_BINARY_DIR: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_BINARY_DIR.html
[8] CMAKE_SYSTEM_NAME: https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html
[9] Community Preview Features (CPF): https://www.threadingbuildingblocks.org/docs/help/reference/appendices/preview_features/what_is_a_preview_feature.html
[10] inteltbbdevelopers@intel.com: mailto:inteltbbdevelopers@intel.com
[11] проект на GitHub: https://github.com/01org/tbb
[12] форум: https://software.intel.com/en-us/forums/intel-threading-building-blocks/
[13] Источник: https://habrahabr.ru/post/335346/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.