xref: /oneTBB/CMakeLists.txt (revision fabaaa65)
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