1*fabaaa65SJhaShweta1# Copyright (c) 2020-2024 Intel Corporation 251c0b2f7Stbbdev# 351c0b2f7Stbbdev# Licensed under the Apache License, Version 2.0 (the "License"); 451c0b2f7Stbbdev# you may not use this file except in compliance with the License. 551c0b2f7Stbbdev# You may obtain a copy of the License at 651c0b2f7Stbbdev# 751c0b2f7Stbbdev# http://www.apache.org/licenses/LICENSE-2.0 851c0b2f7Stbbdev# 951c0b2f7Stbbdev# Unless required by applicable law or agreed to in writing, software 1051c0b2f7Stbbdev# distributed under the License is distributed on an "AS IS" BASIS, 1151c0b2f7Stbbdev# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1251c0b2f7Stbbdev# See the License for the specific language governing permissions and 1351c0b2f7Stbbdev# limitations under the License. 1451c0b2f7Stbbdev 154bb8938dSJulien Schuellercmake_minimum_required(VERSION 3.5) 1651c0b2f7Stbbdev 1751c0b2f7Stbbdev# Enable CMake policies 1851c0b2f7Stbbdev 19a9d76a17SIlya Lavrenovif (POLICY CMP0068) 20a9d76a17SIlya Lavrenov # RPATH settings do not affect install_name on macOS since CMake 3.9 21a9d76a17SIlya Lavrenov cmake_policy(SET CMP0068 NEW) 22a9d76a17SIlya Lavrenovendif() 23a9d76a17SIlya Lavrenov 2451c0b2f7Stbbdevif (POLICY CMP0091) 2551c0b2f7Stbbdev # The NEW behavior for this policy is to not place MSVC runtime library flags in the default 2651c0b2f7Stbbdev # CMAKE_<LANG>_FLAGS_<CONFIG> cache entries and use CMAKE_MSVC_RUNTIME_LIBRARY abstraction instead. 2751c0b2f7Stbbdev cmake_policy(SET CMP0091 NEW) 2851c0b2f7Stbbdevelseif (DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) 2951c0b2f7Stbbdev message(FATAL_ERROR "CMAKE_MSVC_RUNTIME_LIBRARY was defined while policy CMP0091 is not available. Use CMake 3.15 or newer.") 3051c0b2f7Stbbdevendif() 3151c0b2f7Stbbdev 3251c0b2f7Stbbdevif (TBB_WINDOWS_DRIVER AND (NOT ("${CMAKE_MSVC_RUNTIME_LIBRARY}" STREQUAL MultiThreaded OR "${CMAKE_MSVC_RUNTIME_LIBRARY}" STREQUAL MultiThreadedDebug))) 3351c0b2f7Stbbdev message(FATAL_ERROR "Enabled TBB_WINDOWS_DRIVER requires CMAKE_MSVC_RUNTIME_LIBRARY to be set to MultiThreaded or MultiThreadedDebug.") 3451c0b2f7Stbbdevendif() 3551c0b2f7Stbbdev 3651c0b2f7Stbbdev# Enable support of minimum supported macOS version flag 3751c0b2f7Stbbdevif (APPLE) 3851c0b2f7Stbbdev if (NOT CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG) 3951c0b2f7Stbbdev set(CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG "-mmacosx-version-min=" CACHE STRING "Minimum macOS version flag") 4051c0b2f7Stbbdev endif() 4151c0b2f7Stbbdev if (NOT CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG) 4251c0b2f7Stbbdev set(CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG "-mmacosx-version-min=" CACHE STRING "Minimum macOS version flag") 4351c0b2f7Stbbdev endif() 4451c0b2f7Stbbdevendif() 4551c0b2f7Stbbdev 4649e08aacStbbdevfile(READ include/oneapi/tbb/version.h _tbb_version_info) 4751c0b2f7Stbbdevstring(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _tbb_ver_major "${_tbb_version_info}") 4851c0b2f7Stbbdevstring(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _tbb_ver_minor "${_tbb_version_info}") 49d86ed7fbStbbdevstring(REGEX REPLACE ".*#define TBB_VERSION_PATCH ([0-9]+).*" "\\1" _tbb_ver_patch "${_tbb_version_info}") 5051c0b2f7Stbbdevstring(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" TBB_INTERFACE_VERSION "${_tbb_version_info}") 5151c0b2f7Stbbdevstring(REGEX REPLACE ".*#define __TBB_BINARY_VERSION ([0-9]+).*" "\\1" TBB_BINARY_VERSION "${_tbb_version_info}") 52b15aabb3Stbbdevset(TBB_BINARY_MINOR_VERSION ${_tbb_ver_minor}) 5351c0b2f7Stbbdevset(TBBMALLOC_BINARY_VERSION 2) 5451c0b2f7Stbbdevset(TBBBIND_BINARY_VERSION 3) 5551c0b2f7Stbbdev 56d86ed7fbStbbdevproject(TBB VERSION ${_tbb_ver_major}.${_tbb_ver_minor}.${_tbb_ver_patch} LANGUAGES CXX) 5751c0b2f7Stbbdevunset(_tbb_ver_major) 5851c0b2f7Stbbdevunset(_tbb_ver_minor) 5951c0b2f7Stbbdev 60d86ed7fbStbbdevinclude(CheckCXXCompilerFlag) 61d86ed7fbStbbdevinclude(GNUInstallDirs) 622915b9b9SAndrewDeanMSinclude(CMakeDependentOption) 63d86ed7fbStbbdev 6451c0b2f7Stbbdev# --------------------------------------------------------------------------------------------------------- 6551c0b2f7Stbbdev# Handle C++ standard version. 6651c0b2f7Stbbdevif (NOT MSVC) # no need to cover MSVC as it uses C++14 by default. 6751c0b2f7Stbbdev if (NOT CMAKE_CXX_STANDARD) 6851c0b2f7Stbbdev set(CMAKE_CXX_STANDARD 11) 6951c0b2f7Stbbdev endif() 7051c0b2f7Stbbdev 7151c0b2f7Stbbdev if (CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION) # if standard option was detected by CMake 7251c0b2f7Stbbdev set(CMAKE_CXX_STANDARD_REQUIRED ON) 7351c0b2f7Stbbdev else() # if standard option wasn't detected by CMake (e.g. for Intel Compiler with CMake 3.1) 7451c0b2f7Stbbdev # TBB_CXX_STD_FLAG should be added to targets via target_compile_options 7551c0b2f7Stbbdev set(TBB_CXX_STD_FLAG -std=c++${CMAKE_CXX_STANDARD}) 7651c0b2f7Stbbdev 7751c0b2f7Stbbdev check_cxx_compiler_flag(${TBB_CXX_STD_FLAG} c++${CMAKE_CXX_STANDARD}) 7851c0b2f7Stbbdev if (NOT c++${CMAKE_CXX_STANDARD}) 7951c0b2f7Stbbdev message(FATAL_ERROR "C++${CMAKE_CXX_STANDARD} (${TBB_CXX_STD_FLAG}) support is required") 8051c0b2f7Stbbdev endif() 8151c0b2f7Stbbdev unset(c++${CMAKE_CXX_STANDARD}) 8251c0b2f7Stbbdev endif() 8351c0b2f7Stbbdevendif() 8451c0b2f7Stbbdev 8551c0b2f7Stbbdevset(CMAKE_CXX_EXTENSIONS OFF) # use -std=c++... instead of -std=gnu++... 8651c0b2f7Stbbdev# --------------------------------------------------------------------------------------------------------- 8751c0b2f7Stbbdev 8851c0b2f7Stbbdev# Detect architecture (bitness). 8951c0b2f7Stbbdevif (CMAKE_SIZEOF_VOID_P EQUAL 4) 9051c0b2f7Stbbdev set(TBB_ARCH 32) 9151c0b2f7Stbbdevelse() 9251c0b2f7Stbbdev set(TBB_ARCH 64) 9351c0b2f7Stbbdevendif() 9451c0b2f7Stbbdev 9551c0b2f7Stbbdevoption(TBB_TEST "Enable testing" ON) 9651c0b2f7Stbbdevoption(TBB_EXAMPLES "Enable examples" OFF) 9751c0b2f7Stbbdevoption(TBB_STRICT "Treat compiler warnings as errors" ON) 9851c0b2f7Stbbdevoption(TBB_WINDOWS_DRIVER "Build as Universal Windows Driver (UWD)" OFF) 9951c0b2f7Stbbdevoption(TBB_NO_APPCONTAINER "Apply /APPCONTAINER:NO (for testing binaries for Windows Store)" OFF) 10051c0b2f7Stbbdevoption(TBB4PY_BUILD "Enable tbb4py build" OFF) 1018584c456SIlya Isaevoption(TBB_BUILD "Enable tbb build" ON) 1028584c456SIlya Isaevoption(TBBMALLOC_BUILD "Enable tbbmalloc build" ON) 1032915b9b9SAndrewDeanMScmake_dependent_option(TBBMALLOC_PROXY_BUILD "Enable tbbmalloc_proxy build" ON "TBBMALLOC_BUILD" OFF) 10451c0b2f7Stbbdevoption(TBB_CPF "Enable preview features of the library" OFF) 10551c0b2f7Stbbdevoption(TBB_FIND_PACKAGE "Enable search for external oneTBB using find_package instead of build from sources" OFF) 106a9d76a17SIlya Lavrenovoption(TBB_DISABLE_HWLOC_AUTOMATIC_SEARCH "Disable HWLOC automatic search by pkg-config tool" ${CMAKE_CROSSCOMPILING}) 1076feeba80SIvan Kochinoption(TBB_ENABLE_IPO "Enable Interprocedural Optimization (IPO) during the compilation" ON) 10848ba0d7aSDmitri Mokhovoption(TBB_FUZZ_TESTING "Enable fuzz testing" OFF) 109f27eb147SVladislav Shchapovoption(TBB_INSTALL "Enable installation" ON) 11051c0b2f7Stbbdev 111d86ed7fbStbbdevif (NOT DEFINED BUILD_SHARED_LIBS) 112d86ed7fbStbbdev set(BUILD_SHARED_LIBS ON) 113d86ed7fbStbbdevendif() 114d86ed7fbStbbdev 115d86ed7fbStbbdevif (NOT BUILD_SHARED_LIBS) 116d91db363SIlya Lavrenov if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE) 1177941f880SIlya Isaev set(CMAKE_POSITION_INDEPENDENT_CODE ON) 118d91db363SIlya Lavrenov endif() 119d86ed7fbStbbdev message(WARNING "You are building oneTBB as a static library. This is highly discouraged and such configuration is not supported. Consider building a dynamic library to avoid unforeseen issues.") 120d86ed7fbStbbdevendif() 121d86ed7fbStbbdev 12251c0b2f7Stbbdevif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) 12351c0b2f7Stbbdev set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type" FORCE) 12451c0b2f7Stbbdev message(STATUS "CMAKE_BUILD_TYPE is not specified. Using default: ${CMAKE_BUILD_TYPE}") 12551c0b2f7Stbbdev # Possible values of build type for cmake-gui 12651c0b2f7Stbbdev set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") 12751c0b2f7Stbbdevendif() 12851c0b2f7Stbbdev 129d8604942Ssarathnanduif (CMAKE_BUILD_TYPE) 130689cde15SIlya Isaev string(TOLOWER ${CMAKE_BUILD_TYPE} _tbb_build_type) 131689cde15SIlya Isaev if (_tbb_build_type STREQUAL "debug") 132689cde15SIlya Isaev set(TBB_ENABLE_IPO OFF) 133689cde15SIlya Isaev endif() 134689cde15SIlya Isaev unset(_tbb_build_type) 135d8604942Ssarathnanduendif() 136689cde15SIlya Isaev 13751c0b2f7Stbbdev# ------------------------------------------------------------------- 13851c0b2f7Stbbdev# Files and folders naming 13951c0b2f7Stbbdevset(CMAKE_DEBUG_POSTFIX _debug) 14051c0b2f7Stbbdev 14151c0b2f7Stbbdevif (NOT DEFINED TBB_OUTPUT_DIR_BASE) 14251c0b2f7Stbbdev if (MSVC) 14351c0b2f7Stbbdev if (NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY OR CMAKE_MSVC_RUNTIME_LIBRARY MATCHES DLL) 14451c0b2f7Stbbdev set(_tbb_msvc_runtime _md) 14551c0b2f7Stbbdev else() 14651c0b2f7Stbbdev set(_tbb_msvc_runtime _mt) 14751c0b2f7Stbbdev endif() 14851c0b2f7Stbbdev 14951c0b2f7Stbbdev if (WINDOWS_STORE) 15051c0b2f7Stbbdev if (TBB_NO_APPCONTAINER) 15151c0b2f7Stbbdev set(_tbb_win_store _wsnoappcont) 15251c0b2f7Stbbdev else() 15351c0b2f7Stbbdev set(_tbb_win_store _ws) 15451c0b2f7Stbbdev endif() 15551c0b2f7Stbbdev elseif(TBB_WINDOWS_DRIVER) 15651c0b2f7Stbbdev set(_tbb_win_store _wd) 15751c0b2f7Stbbdev endif() 15851c0b2f7Stbbdev endif() 15951c0b2f7Stbbdev 16051c0b2f7Stbbdev string(REGEX MATCH "^([0-9]+\.[0-9]+|[0-9]+)" _tbb_compiler_version_short ${CMAKE_CXX_COMPILER_VERSION}) 16151c0b2f7Stbbdev string(TOLOWER ${CMAKE_CXX_COMPILER_ID}_${_tbb_compiler_version_short}_cxx${CMAKE_CXX_STANDARD}_${TBB_ARCH}${_tbb_msvc_runtime}${_tbb_win_store} TBB_OUTPUT_DIR_BASE) 16251c0b2f7Stbbdev unset(_tbb_msvc_runtime) 16351c0b2f7Stbbdev unset(_tbb_win_store) 16451c0b2f7Stbbdev unset(_tbb_compiler_version_short) 16551c0b2f7Stbbdevendif() 16651c0b2f7Stbbdev 16751c0b2f7Stbbdevforeach(output_type LIBRARY ARCHIVE PDB RUNTIME) 16851c0b2f7Stbbdev if (CMAKE_BUILD_TYPE) 16951c0b2f7Stbbdev string(TOLOWER ${CMAKE_BUILD_TYPE} _tbb_build_type_lower) 17051c0b2f7Stbbdev set(CMAKE_${output_type}_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${TBB_OUTPUT_DIR_BASE}_${_tbb_build_type_lower}) 17151c0b2f7Stbbdev unset(_tbb_build_type_lower) 17251c0b2f7Stbbdev endif() 17351c0b2f7Stbbdev 17451c0b2f7Stbbdev if (CMAKE_CONFIGURATION_TYPES) 17551c0b2f7Stbbdev foreach(suffix ${CMAKE_CONFIGURATION_TYPES}) 17651c0b2f7Stbbdev string(TOUPPER ${suffix} _tbb_suffix_upper) 17751c0b2f7Stbbdev string(TOLOWER ${suffix} _tbb_suffix_lower) 17851c0b2f7Stbbdev set(CMAKE_${output_type}_OUTPUT_DIRECTORY_${_tbb_suffix_upper} ${CMAKE_BINARY_DIR}/${TBB_OUTPUT_DIR_BASE}_${_tbb_suffix_lower}) 17951c0b2f7Stbbdev endforeach() 18051c0b2f7Stbbdev unset(_tbb_suffix_lower) 18151c0b2f7Stbbdev unset(_tbb_suffix_upper) 18251c0b2f7Stbbdev endif() 18351c0b2f7Stbbdevendforeach() 18451c0b2f7Stbbdev 1859bd4d065SVladislav Shchapovif (CMAKE_CONFIGURATION_TYPES) 1869bd4d065SVladislav Shchapov # We can't use generator expressions in a cmake variable name. 1879bd4d065SVladislav Shchapov set(TBB_TEST_WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${TBB_OUTPUT_DIR_BASE}_$<LOWER_CASE:$<CONFIG>>) 1889bd4d065SVladislav Shchapovelse() 1899bd4d065SVladislav Shchapov set(TBB_TEST_WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) 1909bd4d065SVladislav Shchapovendif() 1919bd4d065SVladislav Shchapov 19251c0b2f7Stbbdev# ------------------------------------------------------------------- 19351c0b2f7Stbbdev 19451c0b2f7Stbbdev# ------------------------------------------------------------------- 19551c0b2f7Stbbdev# Common dependencies 1967cee2251SJhaShweta1#force -pthread during compilation for Emscripten 197*fabaaa65SJhaShweta1if (EMSCRIPTEN AND NOT EMSCRIPTEN_WITHOUT_PTHREAD) 1987cee2251SJhaShweta1 set(THREADS_HAVE_PTHREAD_ARG TRUE) 1997cee2251SJhaShweta1endif() 2007cee2251SJhaShweta1 20151c0b2f7Stbbdevset(THREADS_PREFER_PTHREAD_FLAG TRUE) 20251c0b2f7Stbbdevfind_package(Threads REQUIRED) 20351c0b2f7Stbbdev# ------------------------------------------------------------------- 20451c0b2f7Stbbdev 20551c0b2f7Stbbdevfile(GLOB FILES_WITH_EXTRA_TARGETS ${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.cmake) 20651c0b2f7Stbbdevforeach(FILE_WITH_EXTRA_TARGETS ${FILES_WITH_EXTRA_TARGETS}) 20751c0b2f7Stbbdev include(${FILE_WITH_EXTRA_TARGETS}) 20851c0b2f7Stbbdevendforeach() 20951c0b2f7Stbbdev 2106feeba80SIvan Kochin# - Enabling LTO on Android causes the NDK bug. 2116feeba80SIvan Kochin# NDK throws the warning: "argument unused during compilation: '-Wa,--noexecstack'" 2126feeba80SIvan Kochin# - For some reason GCC does not instrument code with Thread Sanitizer when lto is enabled and C linker is used. 2136feeba80SIvan Kochinif (TBB_ENABLE_IPO AND BUILD_SHARED_LIBS AND NOT ANDROID_PLATFORM AND NOT TBB_SANITIZE MATCHES "thread") 2146feeba80SIvan Kochin if (NOT CMAKE_VERSION VERSION_LESS 3.9) 2156feeba80SIvan Kochin cmake_policy(SET CMP0069 NEW) 2166feeba80SIvan Kochin include(CheckIPOSupported) 2176feeba80SIvan Kochin check_ipo_supported(RESULT TBB_IPO_PROPERTY) 2186feeba80SIvan Kochin else() 2196feeba80SIvan Kochin set(TBB_IPO_FLAGS TRUE) 2206feeba80SIvan Kochin endif() 2216feeba80SIvan Kochin if (TBB_IPO_PROPERTY OR TBB_IPO_FLAGS) 2226feeba80SIvan Kochin message(STATUS "IPO enabled") 2236feeba80SIvan Kochin endif() 2246feeba80SIvan Kochinendif() 2256feeba80SIvan Kochin 22651c0b2f7Stbbdevset(TBB_COMPILER_SETTINGS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compilers/${CMAKE_CXX_COMPILER_ID}.cmake) 22751c0b2f7Stbbdevif (EXISTS ${TBB_COMPILER_SETTINGS_FILE}) 22851c0b2f7Stbbdev include(${TBB_COMPILER_SETTINGS_FILE}) 22951c0b2f7Stbbdevelse() 23051c0b2f7Stbbdev message(WARNING "TBB compiler settings not found ${TBB_COMPILER_SETTINGS_FILE}") 23151c0b2f7Stbbdevendif() 23251c0b2f7Stbbdev 23351c0b2f7Stbbdevif (TBB_FIND_PACKAGE OR TBB_DIR) 23451c0b2f7Stbbdev # Allow specifying external TBB to test with. 23551c0b2f7Stbbdev # Do not add main targets and installation instructions in that case. 23651c0b2f7Stbbdev message(STATUS "Using external TBB for testing") 23751c0b2f7Stbbdev find_package(TBB REQUIRED) 23851c0b2f7Stbbdevelse() 2398584c456SIlya Isaev if (TBB_BUILD) 24051c0b2f7Stbbdev add_subdirectory(src/tbb) 2418584c456SIlya Isaev endif() 2428584c456SIlya Isaev if (TBBMALLOC_BUILD) 24351c0b2f7Stbbdev add_subdirectory(src/tbbmalloc) 2442915b9b9SAndrewDeanMS if(TBBMALLOC_PROXY_BUILD AND NOT "${MSVC_CXX_ARCHITECTURE_ID}" MATCHES "ARM64") 24551c0b2f7Stbbdev add_subdirectory(src/tbbmalloc_proxy) 2468584c456SIlya Isaev endif() 247b61fd081SSergey Zheltov endif() 248f9fd1beeSIlya Isaev if (NOT BUILD_SHARED_LIBS) 249e96dbf4bSIvan Kochin message(STATUS "TBBBind build targets are disabled due to unsupported environment") 25051c0b2f7Stbbdev else() 25151c0b2f7Stbbdev add_subdirectory(src/tbbbind) 25251c0b2f7Stbbdev endif() 253f27eb147SVladislav Shchapov if (TBB_INSTALL) 25451c0b2f7Stbbdev # ------------------------------------------------------------------- 25551c0b2f7Stbbdev # Installation instructions 25651c0b2f7Stbbdev include(CMakePackageConfigHelpers) 25751c0b2f7Stbbdev 258d86ed7fbStbbdev install(DIRECTORY include/ 259d86ed7fbStbbdev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 260d86ed7fbStbbdev COMPONENT devel) 26151c0b2f7Stbbdev 26251c0b2f7Stbbdev install(EXPORT ${PROJECT_NAME}Targets 26351c0b2f7Stbbdev NAMESPACE TBB:: 264d86ed7fbStbbdev DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 265d86ed7fbStbbdev COMPONENT devel) 26651c0b2f7Stbbdev file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake 26751c0b2f7Stbbdev "include(\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake)\n") 26812ceae12SLiam Keegan if (NOT BUILD_SHARED_LIBS) 26912ceae12SLiam Keegan file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake 27012ceae12SLiam Keegan "include(CMakeFindDependencyMacro)\nfind_dependency(Threads)\n") 27112ceae12SLiam Keegan endif() 27251c0b2f7Stbbdev 27351c0b2f7Stbbdev write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" 27451c0b2f7Stbbdev COMPATIBILITY AnyNewerVersion) 27551c0b2f7Stbbdev 27651c0b2f7Stbbdev install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" 27751c0b2f7Stbbdev "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" 278d86ed7fbStbbdev DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 279d86ed7fbStbbdev COMPONENT devel) 280b15aabb3Stbbdev 281b15aabb3Stbbdev install(FILES "README.md" 282b15aabb3Stbbdev DESTINATION ${CMAKE_INSTALL_DOCDIR} 283b15aabb3Stbbdev COMPONENT devel) 28451c0b2f7Stbbdev # ------------------------------------------------------------------- 28551c0b2f7Stbbdev endif() 286f27eb147SVladislav Shchapovendif() 28751c0b2f7Stbbdev 28851c0b2f7Stbbdevif (TBB_TEST) 28951c0b2f7Stbbdev enable_testing() 29051c0b2f7Stbbdev add_subdirectory(test) 29151c0b2f7Stbbdevendif() 29251c0b2f7Stbbdev 29351c0b2f7Stbbdevif (TBB_EXAMPLES) 29451c0b2f7Stbbdev add_subdirectory(examples) 29551c0b2f7Stbbdevendif() 29651c0b2f7Stbbdev 29751c0b2f7Stbbdevif (TBB_BENCH) 29851c0b2f7Stbbdev if (NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/benchmark) 29951c0b2f7Stbbdev message(FATAL_ERROR "Benchmarks are not supported yet") 30051c0b2f7Stbbdev endif() 30151c0b2f7Stbbdev 30251c0b2f7Stbbdev enable_testing() 30351c0b2f7Stbbdev add_subdirectory(benchmark) 30451c0b2f7Stbbdevendif() 30551c0b2f7Stbbdev 30651c0b2f7Stbbdevif (ANDROID_PLATFORM) 307c17f1ec1Sfpliu if ("${ANDROID_STL}" STREQUAL "c++_shared") 308d4775003SDmitry Kurtaev if (${ANDROID_NDK_MAJOR} GREATER_EQUAL "25") 309d4775003SDmitry Kurtaev if(ANDROID_ABI STREQUAL "arm64-v8a") 310d4775003SDmitry Kurtaev set(ANDROID_TOOLCHAIN_NAME "aarch64-linux-android") 311d4775003SDmitry Kurtaev elseif(ANDROID_ABI STREQUAL "x86_64") 312d4775003SDmitry Kurtaev set(ANDROID_TOOLCHAIN_NAME "x86_64-linux-android") 313d4775003SDmitry Kurtaev elseif(ANDROID_ABI STREQUAL "armeabi-v7a") 314d4775003SDmitry Kurtaev set(ANDROID_TOOLCHAIN_NAME "arm-linux-androideabi") 315d4775003SDmitry Kurtaev elseif(ANDROID_ABI STREQUAL "x86") 316d4775003SDmitry Kurtaev set(ANDROID_TOOLCHAIN_NAME "i686-linux-android") 317d4775003SDmitry Kurtaev endif() 318d4775003SDmitry Kurtaev 319d4775003SDmitry Kurtaev configure_file( 320d4775003SDmitry Kurtaev "${ANDROID_TOOLCHAIN_ROOT}/sysroot/usr/lib/${ANDROID_TOOLCHAIN_NAME}/libc++_shared.so" 321d4775003SDmitry Kurtaev "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libc++_shared.so" 322d4775003SDmitry Kurtaev COPYONLY) 323d4775003SDmitry Kurtaev else() 32451c0b2f7Stbbdev configure_file( 32551c0b2f7Stbbdev "${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_shared.so" 32651c0b2f7Stbbdev "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libc++_shared.so" 32751c0b2f7Stbbdev COPYONLY) 32851c0b2f7Stbbdev endif() 329d4775003SDmitry Kurtaev endif() 33051c0b2f7Stbbdev # This custom target may be implemented without separate CMake script, but it requires 33151c0b2f7Stbbdev # ADB(Android Debug Bridge) executable file availability, so to incapsulate this requirement 33251c0b2f7Stbbdev # only for corresponding custom target, it was implemented by this way. 33351c0b2f7Stbbdev add_custom_target(device_environment_cleanup COMMAND ${CMAKE_COMMAND} 33451c0b2f7Stbbdev -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/android/device_environment_cleanup.cmake) 33551c0b2f7Stbbdevendif() 33651c0b2f7Stbbdev 33751c0b2f7Stbbdevif (TBB4PY_BUILD) 33851c0b2f7Stbbdev add_subdirectory(python) 33951c0b2f7Stbbdevendif() 34051c0b2f7Stbbdev 34151c0b2f7Stbbdev# Keep it the last instruction. 34251c0b2f7Stbbdevadd_subdirectory(cmake/post_install) 343