From 459d6562f4a840350e2a712763fe1178540921e5 Mon Sep 17 00:00:00 2001
From: Ben Cumming <louncharf@gmail.com>
Date: Thu, 15 Mar 2018 17:43:38 +0100
Subject: [PATCH] Improve TBB vs. CMake (#451)

This replaces the CMake templates provided by TBB with a much more sane alternative!

The TBB CMake templates had a very strange workflow, that involved downloading the TBB source and compiling it, which made it impossible to configure the TBB build, and caused problems on systems without connection to the internet.

We replace this with a fork of the TBB repository maintained by Github user @wjakob:
https://github.com/wjakob/tbb
This fork provides a sane CMakeLists.txt that can be configured from our CMake setup.
It is added as a git submodule, so it can be downloaded with the rest of the repository, hence not requiring connection to the internet during CMake configuration.

It could be extended to use a user-provided build of TBB to use instead of building it.

fixes #332.
---
 .gitmodules                                   |   3 +
 .travis.yml                                   |   4 +-
 CMakeLists.txt                                |  46 +--
 cmake/tbb/TBBBuild.cmake                      | 197 ------------
 cmake/tbb/TBBGet.cmake                        | 298 ------------------
 cmake/tbb/TBBMakeConfig.cmake                 | 162 ----------
 cmake/tbb/templates/TBBConfig.cmake.in        |  89 ------
 .../tbb/templates/TBBConfigForSource.cmake.in |  82 -----
 cmake/tbb/templates/TBBConfigVersion.cmake.in |  28 --
 tbb                                           |   1 +
 10 files changed, 32 insertions(+), 878 deletions(-)
 delete mode 100644 cmake/tbb/TBBBuild.cmake
 delete mode 100644 cmake/tbb/TBBGet.cmake
 delete mode 100644 cmake/tbb/TBBMakeConfig.cmake
 delete mode 100644 cmake/tbb/templates/TBBConfig.cmake.in
 delete mode 100644 cmake/tbb/templates/TBBConfigForSource.cmake.in
 delete mode 100644 cmake/tbb/templates/TBBConfigVersion.cmake.in
 create mode 160000 tbb

diff --git a/.gitmodules b/.gitmodules
index ee35645b..5749e2a2 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
 [submodule "doc/rtd_theme"]
 	path = doc/rtd_theme
 	url = https://github.com/rtfd/sphinx_rtd_theme.git
+[submodule "tbb"]
+	path = tbb
+	url = https://github.com/wjakob/tbb.git
diff --git a/.travis.yml b/.travis.yml
index 53854394..3cb47355 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,10 +17,10 @@ env:
     # test single node/rank with different threading back ends
     - BUILD_NAME=serial   WITH_THREAD=serial   WITH_DISTRIBUTED=serial
     - BUILD_NAME=cthread  WITH_THREAD=cthread  WITH_DISTRIBUTED=serial
-    # The tbb backend sometimes fails to build because CMake. Turn it off until our CMake TBB support is stable.
-    #- BUILD_NAME=tbb      WITH_THREAD=tbb      WITH_DISTRIBUTED=serial
+    - BUILD_NAME=tbb      WITH_THREAD=tbb      WITH_DISTRIBUTED=serial
     # test mpi
     - BUILD_NAME=mpi      WITH_THREAD=cthread  WITH_DISTRIBUTED=mpi
+    - BUILD_NAME=mpitbb   WITH_THREAD=tbb  WITH_DISTRIBUTED=mpi
 
 before_install:
     - CC=gcc-5
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 99b5d3cf..df3894c1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -66,40 +66,46 @@ set(ARB_THREADING_MODEL "cthread" CACHE STRING "set the threading model, one of
 set_property(CACHE ARB_THREADING_MODEL PROPERTY STRINGS cthread tbb serial )
 
 if(ARB_THREADING_MODEL MATCHES "tbb")
-    # download and build TBB
-    include(${CMAKE_SOURCE_DIR}/cmake/tbb/TBBGet.cmake)
-    include(${CMAKE_SOURCE_DIR}/cmake/tbb/TBBBuild.cmake)
-    tbb_get(TBB_ROOT tbb_root SOURCE_CODE)
-    tbb_build(TBB_ROOT ${tbb_root} CONFIG_DIR TBB_DIR)
+    # TODO: update to use built-in support for detecting git submodules.
+    if(NOT EXISTS "${CMAKE_SOURCE_DIR}/tbb/.git")
+        message(FATAL_ERROR
+            "\nThe git submodule for tbb must be checked out to use TBB.\n"
+            "  git submodule init\n"
+            "  git submodule update\n")
+    endif()
+
+    # turn off proxy malloc library and test compilation
+    option(TBB_BUILD_TBBMALLOC_PROXY OFF)
+    option(TBB_BUILD_TESTS           OFF)
 
-    # configure TBB
-    find_package(TBB REQUIRED tbb tbbmalloc)
+    # Use the CMake configuration in the TBB submodule
+    # Reset the CXX flags, to avoid the litany of warnings that -Wall
+    # gives when compiling TBB.
+    set(CMAKE_CXX_FLAGS_TBB_BACK "${CMAKE_CXX_FLAGS}")
+    unset(CMAKE_CXX_FLAGS)
+    add_subdirectory(tbb)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_TBB_BACK}")
 
+    # set flags for TBB
     add_definitions(-DARB_HAVE_TBB)
     set(ARB_WITH_TBB TRUE)
 
-    # The TBB CMake package creates the TBB::tbb and TBB:tbbmalloc targets.
-    # The following should be sufficient, however on some systems (e.g. Cray PE),
-    # they don't work (because CMake is fragile):
-    #   list(APPEND EXTERNAL_LIBRARIES TBB::tbb)
-    #   list(APPEND EXTERNAL_LIBRARIES TBB::tbbmalloc)
-    # So, instead, manually add the library links:
-    set(TBB_LIB_PATH ${CMAKE_BINARY_DIR}/tbb_cmake_build/tbb_cmake_build_subdir_release)
-    list(APPEND EXTERNAL_LIBRARIES ${TBB_LIB_PATH}/libtbb.so)
-    list(APPEND EXTERNAL_LIBRARIES ${TBB_LIB_PATH}/libtbbmalloc.so)
+    include_directories(${CMAKE_SOURCE_DIR}/tbb/include)
 
-    # The TBB headers are in the downloaded TBB source
-    list(APPEND EXTERNAL_INCLUDES ${tbb_root}/include)
+    list(APPEND EXTERNAL_LIBRARIES tbb_static tbbmalloc_static)
+    list(APPEND EXTERNAL_LIBRARIES pthread dl)
 
-elseif(ARB_THREADING_MODEL MATCHES "cthread")
+    # TODO add support for user-supplied tbb implementation,
+    # e.g. using an TBB_ROOT variable.
 
+elseif(ARB_THREADING_MODEL MATCHES "cthread")
     find_package(Threads REQUIRED)
     add_definitions(-DARB_HAVE_CTHREAD)
     set(ARB_WITH_CTHREAD TRUE)
     list(APPEND EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
 
     if(CMAKE_USE_PTHREADS_INIT)
-      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
     endif()
 endif()
 
diff --git a/cmake/tbb/TBBBuild.cmake b/cmake/tbb/TBBBuild.cmake
deleted file mode 100644
index bcf04c87..00000000
--- a/cmake/tbb/TBBBuild.cmake
+++ /dev/null
@@ -1,197 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-#
-#
-
-#
-# Usage:
-#  include(TBBBuild.cmake)
-#  tbb_build(ROOT <tbb_root> MAKE_ARGS <arg1> [... <argN>])
-#  find_package(TBB <options>)
-#
-
-include(CMakeParseArguments)
-
-# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,
-# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html
-set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})
-
-##
-# Builds Intel TBB.
-#
-# Parameters:
-#  TBB_ROOT   <directory> - path to Intel TBB root directory (with sources);
-#  MAKE_ARGS  <list>      - user-defined arguments to be passed to make-tool;
-#  CONFIG_DIR <variable>  - store location of the created TBBConfig if the build was ok, store <variable>-NOTFOUND otherwise.
-#
-function(tbb_build)
-    # NOTE: internal function are used to hide them from user.
-
-    ##
-    # Provides arguments for make-command to build Intel TBB.
-    #
-    # Following arguments are provided automatically if they are not defined by user:
-    #  compiler=<value>
-    #  tbb_build_dir=<value>
-    #  tbb_build_prefix=<value>
-    #  -j<n>
-    #
-    # Parameters:
-    #  USER_DEFINED_ARGS <list> - list of user-defined arguments;
-    #  RESULT <variable> - resulting list of 'make' arguments.
-    #
-    function(tbb_get_make_args)
-        set(oneValueArgs RESULT)
-        set(multiValueArgs USER_DEFINED_ARGS)
-        cmake_parse_arguments(tbb_GMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-        set(result ${tbb_GMA_USER_DEFINED_ARGS})
-
-        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "compiler=")
-            # TODO: add other supported compilers.
-            if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-                set(compiler gcc)
-            elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
-                set(compiler icc)
-                if (CMAKE_SYSTEM_NAME MATCHES "Windows")
-                    set(compiler icl)
-                endif()
-            elseif (MSVC)
-                set(compiler cl)
-            elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-                set(compiler clang)
-            endif()
-
-            set(result "compiler=${compiler}" ${result})
-        endif()
-
-        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "tbb_build_dir=")
-            set(result "tbb_build_dir=${CMAKE_CURRENT_BINARY_DIR}/tbb_cmake_build" ${result})
-        endif()
-
-        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "tbb_build_prefix=")
-            set(result "tbb_build_prefix=tbb_cmake_build_subdir" ${result})
-        endif()
-
-        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "(;|^) *\\-j[0-9]* *(;|$)")
-            include(ProcessorCount)
-            ProcessorCount(num_of_cores)
-            if (NOT num_of_cores EQUAL 0)
-                set(result "-j${num_of_cores}" ${result})
-            endif()
-        endif()
-
-        if (CMAKE_SYSTEM_NAME MATCHES "Android")
-            set(result target=android ${result})
-        endif()
-
-        set(${tbb_GMA_RESULT} ${result} PARENT_SCOPE)
-    endfunction()
-
-    ##
-    # Provides release and debug directories basing on 'make' arguments.
-    #
-    # Following 'make' arguments are parsed: tbb_build_dir, tbb_build_prefix
-    #
-    # Parameters:
-    #  MAKE_ARGS   <list>     - 'make' arguments (tbb_build_dir and tbb_build_prefix are required)
-    #  RELEASE_DIR <variable> - store normalized (CMake) path to release directory
-    #  DEBUG_DIR   <variable> - store normalized (CMake) path to debug directory
-    #
-    function(tbb_get_build_paths_from_make_args)
-        set(oneValueArgs RELEASE_DIR DEBUG_DIR)
-        set(multiValueArgs MAKE_ARGS)
-        cmake_parse_arguments(tbb_GBPFMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-        foreach(arg ${tbb_GBPFMA_MAKE_ARGS})
-            if (arg MATCHES "tbb_build_dir=")
-                string(REPLACE "tbb_build_dir=" "" tbb_build_dir "${arg}")
-            elseif (arg MATCHES "tbb_build_prefix=")
-                string(REPLACE "tbb_build_prefix=" "" tbb_build_prefix "${arg}")
-            endif()
-        endforeach()
-
-        set(tbb_release_dir "${tbb_build_dir}/${tbb_build_prefix}_release")
-        set(tbb_debug_dir "${tbb_build_dir}/${tbb_build_prefix}_debug")
-
-        file(TO_CMAKE_PATH "${tbb_release_dir}" tbb_release_dir)
-        file(TO_CMAKE_PATH "${tbb_debug_dir}" tbb_debug_dir)
-
-        set(${tbb_GBPFMA_RELEASE_DIR} ${tbb_release_dir} PARENT_SCOPE)
-        set(${tbb_GBPFMA_DEBUG_DIR} ${tbb_debug_dir} PARENT_SCOPE)
-    endfunction()
-
-    # -------------------- #
-    # Function entry point #
-    # -------------------- #
-    set(oneValueArgs TBB_ROOT CONFIG_DIR)
-    set(multiValueArgs MAKE_ARGS)
-    cmake_parse_arguments(tbb_build "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-    if (NOT EXISTS "${tbb_build_TBB_ROOT}/Makefile" OR NOT EXISTS "${tbb_build_TBB_ROOT}/src")
-        message(STATUS "Intel TBB can not be built: Makefile or src directory was not found in ${tbb_build_TBB_ROOT}")
-        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    set(make_tool_name make)
-    if (CMAKE_SYSTEM_NAME MATCHES "Windows")
-        set(make_tool_name gmake)
-    elseif (CMAKE_SYSTEM_NAME MATCHES "Android")
-        set(make_tool_name ndk-build)
-    endif()
-
-    find_program(TBB_MAKE_TOOL ${make_tool_name} DOC "Make-tool to build Intel TBB.")
-    mark_as_advanced(TBB_MAKE_TOOL)
-
-    if (NOT TBB_MAKE_TOOL)
-        message(STATUS "Intel TBB can not be built: required make-tool (${make_tool_name}) was not found")
-        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    tbb_get_make_args(USER_DEFINED_ARGS ${tbb_build_MAKE_ARGS} RESULT tbb_make_args)
-
-    set(tbb_build_cmd ${TBB_MAKE_TOOL} ${tbb_make_args})
-
-    string(REPLACE ";" " " tbb_build_cmd_str "${tbb_build_cmd}")
-    message(STATUS "Building Intel TBB: ${tbb_build_cmd_str}")
-    execute_process(COMMAND ${tbb_build_cmd}
-                    WORKING_DIRECTORY ${tbb_build_TBB_ROOT}
-                    RESULT_VARIABLE tbb_build_result
-                    ERROR_VARIABLE tbb_build_error_output
-                    OUTPUT_QUIET)
-
-    if (NOT tbb_build_result EQUAL 0)
-        message(STATUS "Building is unsuccessful (${tbb_build_result}): ${tbb_build_error_output}")
-        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    tbb_get_build_paths_from_make_args(MAKE_ARGS ${tbb_make_args}
-                                       RELEASE_DIR tbb_release_dir
-                                       DEBUG_DIR tbb_debug_dir)
-
-    include(${_tbb_cmake_module_path}/TBBMakeConfig.cmake)
-    tbb_make_config(TBB_ROOT ${tbb_build_TBB_ROOT}
-                    SYSTEM_NAME ${CMAKE_SYSTEM_NAME}
-                    CONFIG_DIR tbb_config_dir
-                    CONFIG_FOR_SOURCE
-                    TBB_RELEASE_DIR ${tbb_release_dir}
-                    TBB_DEBUG_DIR ${tbb_debug_dir})
-
-    set(${tbb_build_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)
-endfunction()
diff --git a/cmake/tbb/TBBGet.cmake b/cmake/tbb/TBBGet.cmake
deleted file mode 100644
index 4f595d23..00000000
--- a/cmake/tbb/TBBGet.cmake
+++ /dev/null
@@ -1,298 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-#
-#
-
-include(CMakeParseArguments)
-
-# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,
-# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html
-set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})
-
-##
-# Downloads file.
-#
-# Parameters:
-#  URL     <url>      - URL to download data from;
-#  SAVE_AS <filename> - filename there to save downloaded data;
-#  INFO    <string>   - text description of content to be downloaded;
-#                       will be printed as message in format is "Downloading <INFO>: <URL>;
-#  FORCE              - option to delete local file from SAVE_AS if it exists;
-#
-function(_tbb_download_file)
-    set(options FORCE)
-    set(oneValueArgs URL RELEASE SAVE_AS INFO)
-    cmake_parse_arguments(tbb_df "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-    if (tbb_df_FORCE AND EXISTS "${tbb_df_SAVE_AS}")
-        file(REMOVE ${tbb_df_SAVE_AS})
-    endif()
-
-    if (NOT EXISTS "${tbb_df_SAVE_AS}")
-        set(_show_progress)
-        if (TBB_DOWNLOADING_PROGRESS)
-            set(_show_progress SHOW_PROGRESS)
-        endif()
-
-        message(STATUS "Downloading ${tbb_df_INFO}: ${tbb_df_URL}")
-        file(DOWNLOAD ${tbb_df_URL} ${tbb_df_SAVE_AS} ${_show_progress} STATUS download_status)
-
-        list(GET download_status 0 download_status_num)
-        if (NOT download_status_num EQUAL 0)
-            message(STATUS "Unsuccessful downloading: ${download_status}")
-            file(REMOVE ${tbb_df_SAVE_AS})
-            return()
-        endif()
-    else()
-        message(STATUS "Needed file was found locally ${tbb_df_SAVE_AS}. Remove it if you still want to download a new one")
-    endif()
-endfunction()
-
-##
-# Checks if specified Intel TBB release is available on GitHub.
-#
-# tbb_check_git_release(<release> <result>)
-# Parameters:
-#  <release_tag> - release to be checked;
-#  <result>  - store result (TRUE/FALSE).
-#
-function(_tbb_check_git_release_tag _tbb_release_tag _tbb_release_tag_avail)
-    if (_tbb_release_tag STREQUAL LATEST)
-        set(${_tbb_release_tag_avail} TRUE PARENT_SCOPE)
-        return()
-    endif()
-
-    set(tbb_releases_file "${CMAKE_CURRENT_BINARY_DIR}/tbb_releases.json")
-
-    _tbb_download_file(URL     "${tbb_github_api}/releases"
-                       SAVE_AS ${tbb_releases_file}
-                       INFO    "information from GitHub about Intel TBB releases"
-                       FORCE)
-
-    if (NOT EXISTS "${tbb_releases_file}")
-        set(${_tbb_release_tag_avail} FALSE PARENT_SCOPE)
-        return()
-    endif()
-
-    file(READ ${tbb_releases_file} tbb_releases)
-
-    string(REPLACE "\"" "" tbb_releases ${tbb_releases})
-    string(REGEX MATCHALL "tag_name: *([A-Za-z0-9_\\.]+)" tbb_releases ${tbb_releases})
-
-    set(_release_available FALSE)
-    foreach(tbb_rel ${tbb_releases})
-        string(REGEX REPLACE "tag_name: *" "" tbb_rel_cut ${tbb_rel})
-        list(REMOVE_ITEM tbb_releases ${tbb_rel})
-        list(APPEND tbb_releases ${tbb_rel_cut})
-        if (_tbb_release_tag STREQUAL tbb_rel_cut)
-            set(_release_available TRUE)
-            break()
-        endif()
-    endforeach()
-
-    if (NOT _release_available)
-        string(REPLACE ";" ", " tbb_releases_str "${tbb_releases}")
-        message(STATUS "Requested release tag ${_tbb_release_tag} is not available. Available Intel TBB release tags: ${tbb_releases_str}")
-    endif()
-
-    set(${_tbb_release_tag_avail} ${_release_available} PARENT_SCOPE)
-endfunction()
-
-##
-# Compares two Intel TBB releases and provides result
-# TRUE if the first release is less than the second, FALSE otherwise.
-#
-# tbb_is_release_less(<rel1> <rel2> <result>)
-#
-function(_tbb_is_release_less rel1 rel2 result)
-    # Convert release to numeric representation to compare it using "if" with VERSION_LESS.
-    string(REGEX REPLACE "[A-Za-z]" "" rel1 "${rel1}")
-    string(REPLACE "_" "." rel1 "${rel1}")
-    string(REGEX REPLACE "[A-Za-z]" "" rel2 "${rel2}")
-    string(REPLACE "_" "." rel2 "${rel2}")
-
-    if (${rel1} VERSION_LESS ${rel2})
-        set(${result} TRUE PARENT_SCOPE)
-        return()
-    endif()
-
-    set(${result} FALSE PARENT_SCOPE)
-endfunction()
-
-##
-# Finds exact URL to download Intel TBB basing on provided parameters.
-#
-# Usage:
-#  _tbb_get_url(URL <var_to_save_url> RELEASE_TAG <release_tag|LATEST> OS <os> [SOURCE_CODE])
-#
-function(_tbb_get_url)
-    set(oneValueArgs URL RELEASE_TAG OS)
-    set(options SOURCE_CODE)
-    cmake_parse_arguments(tbb_get_url "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-    set(tbb_github_api "https://api.github.com/repos/01org/tbb")
-
-    _tbb_check_git_release_tag(${tbb_get_url_RELEASE_TAG} tbb_release_available)
-    if (NOT tbb_release_available)
-        set(${tbb_download_FULL_PATH} ${tbb_download_FULL_PATH}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)
-        set(tbb_rel_info_api_url "${tbb_github_api}/releases/latest")
-    else()
-        set(tbb_rel_info_api_url "${tbb_github_api}/releases/tags/${tbb_get_url_RELEASE_TAG}")
-    endif()
-
-    set(tbb_release_info_file "${CMAKE_CURRENT_BINARY_DIR}/tbb_${tbb_get_url_RELEASE_TAG}_info.json")
-
-    _tbb_download_file(URL     ${tbb_rel_info_api_url}
-                       SAVE_AS ${tbb_release_info_file}
-                       INFO    "information from GitHub about packages for Intel TBB ${tbb_get_url_RELEASE_TAG}"
-                       FORCE)
-
-    if (NOT EXISTS "${tbb_release_info_file}")
-        set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    file(STRINGS ${tbb_release_info_file} tbb_release_info)
-
-    if (tbb_get_url_SOURCE_CODE)
-        # Find name of the latest release to get link to source archive.
-        if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)
-            string(REPLACE "\"" "" tbb_release_info ${tbb_release_info})
-            string(REGEX REPLACE ".*tag_name: *([A-Za-z0-9_\\.]+).*" "\\1" tbb_get_url_RELEASE_TAG "${tbb_release_info}")
-        endif()
-
-        set(${tbb_get_url_URL} "https://github.com/01org/tbb/archive/${tbb_get_url_RELEASE_TAG}.tar.gz" PARENT_SCOPE)
-    else()
-        if (tbb_get_url_OS MATCHES "Linux")
-            set(tbb_lib_archive_suffix lin.tgz)
-        elseif (tbb_get_url_OS MATCHES "Windows")
-            set(tbb_lib_archive_suffix win.zip)
-        elseif (tbb_get_url_OS MATCHES "Darwin")
-            set(tbb_lib_archive_suffix mac.tgz)
-
-            # Since 2017_U4 release archive for Apple has suffix "mac.tgz" instead of "osx.tgz".
-            if (NOT tbb_get_url_RELEASE_TAG STREQUAL "LATEST")
-                _tbb_is_release_less(${tbb_get_url_RELEASE_TAG} 2017_U4 release_less)
-                if (release_less)
-                    set(tbb_lib_archive_suffix osx.tgz)
-                endif()
-            endif()
-        elseif (tbb_get_url_OS MATCHES "Android")
-            set(tbb_lib_archive_suffix and.tgz)
-        else()
-            message(STATUS "Currently prebuilt Intel TBB is not available for your OS (${tbb_get_url_OS})")
-            set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)
-            return()
-        endif()
-
-        string(REGEX REPLACE ".*(https.*oss_${tbb_lib_archive_suffix}).*" "\\1" tbb_bin_url "${tbb_release_info}")
-
-        set(${tbb_get_url_URL} ${tbb_bin_url} PARENT_SCOPE)
-    endif()
-endfunction()
-
-function(tbb_get)
-    set(oneValueArgs RELEASE_TAG SYSTEM_NAME SAVE_TO TBB_ROOT CONFIG_DIR)
-    set(options SOURCE_CODE)
-    cmake_parse_arguments(tbb_get "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-    set(tbb_os ${CMAKE_SYSTEM_NAME})
-    if (tbb_get_SYSTEM_NAME)
-        set(tbb_os ${tbb_get_SYSTEM_NAME})
-    endif()
-
-    set(tbb_release_tag LATEST)
-    if (tbb_get_RELEASE_TAG)
-        set(tbb_release_tag ${tbb_get_RELEASE_TAG})
-    endif()
-
-    set(tbb_save_to ${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded)
-    if (tbb_get_SAVE_TO)
-        set(tbb_save_to ${tbb_get_SAVE_TO})
-    endif()
-
-    if (tbb_get_SOURCE_CODE)
-        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os} SOURCE_CODE)
-    else()
-        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os})
-    endif()
-
-    if (NOT tbb_url)
-        message(STATUS "URL to download Intel TBB has not been found")
-        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    get_filename_component(filename ${tbb_url} NAME)
-    set(local_file "${CMAKE_CURRENT_BINARY_DIR}/${filename}")
-
-    _tbb_download_file(URL     ${tbb_url}
-                       SAVE_AS ${local_file}
-                       INFO    "Intel TBB library")
-
-    if (NOT EXISTS "${local_file}")
-        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    get_filename_component(subdir_name ${filename} NAME_WE)
-    file(MAKE_DIRECTORY ${tbb_save_to}/${subdir_name})
-    if (NOT EXISTS "${tbb_save_to}/${subdir_name}")
-        message(STATUS "${tbb_save_to}/${subdir_name} can not be created")
-        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    message(STATUS "Unpacking ${local_file} to ${tbb_save_to}/${subdir_name}")
-    execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${local_file}
-                    WORKING_DIRECTORY ${tbb_save_to}/${subdir_name}
-                    RESULT_VARIABLE unpacking_result)
-
-    if (NOT unpacking_result EQUAL 0)
-        message(STATUS "Unsuccessful unpacking: ${unpacking_result}")
-        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    file(GLOB_RECURSE tbb_h ${tbb_save_to}/${subdir_name}/*/include/tbb/tbb.h)
-    list(GET tbb_h 0 tbb_h)
-
-    if (NOT EXISTS "${tbb_h}")
-        message(STATUS "tbb/tbb.h has not been found in the downloaded package")
-        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
-        return()
-    endif()
-
-    get_filename_component(tbb_root "${tbb_h}" PATH)
-    get_filename_component(tbb_root "${tbb_root}" PATH)
-    get_filename_component(tbb_root "${tbb_root}" PATH)
-
-    if (NOT tbb_get_SOURCE_CODE)
-        set(tbb_config_dir ${tbb_root}/cmake)
-
-        if (NOT EXISTS "${tbb_config_dir}")
-            tbb_make_config(TBB_ROOT ${tbb_root} CONFIG_DIR tbb_config_dir)
-        endif()
-
-        set(${tbb_get_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)
-    endif()
-
-    set(${tbb_get_TBB_ROOT} ${tbb_root} PARENT_SCOPE)
-endfunction()
diff --git a/cmake/tbb/TBBMakeConfig.cmake b/cmake/tbb/TBBMakeConfig.cmake
deleted file mode 100644
index 6d25db0c..00000000
--- a/cmake/tbb/TBBMakeConfig.cmake
+++ /dev/null
@@ -1,162 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-#
-#
-
-#
-# Usage:
-#   include(TBBMakeConfig.cmake)
-#   tbb_make_config(TBB_ROOT <tbb_root> SYSTEM_NAME <system_name> CONFIG_DIR <var_to_store_config_dir> [CONFIG_FOR_SOURCE TBB_RELEASE_DIR <tbb_release_dir> TBB_DEBUG_DIR <tbb_debug_dir>])
-#
-
-include(CMakeParseArguments)
-
-# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,
-# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html
-set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})
-
-function(tbb_make_config)
-    set(oneValueArgs TBB_ROOT SYSTEM_NAME CONFIG_DIR TBB_RELEASE_DIR TBB_DEBUG_DIR)
-    set(options CONFIG_FOR_SOURCE)
-    cmake_parse_arguments(tbb_MK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-    set(tbb_system_name ${CMAKE_SYSTEM_NAME})
-    if (tbb_MK_SYSTEM_NAME)
-        set(tbb_system_name ${tbb_MK_SYSTEM_NAME})
-    endif()
-
-    file(MAKE_DIRECTORY ${tbb_MK_TBB_ROOT}/cmake)
-
-    set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc tbbmalloc_proxy)
-
-    if (tbb_MK_CONFIG_FOR_SOURCE)
-        set(TBB_RELEASE_DIR ${tbb_MK_TBB_RELEASE_DIR})
-        set(TBB_DEBUG_DIR ${tbb_MK_TBB_DEBUG_DIR})
-    endif()
-
-    if (tbb_system_name STREQUAL "Linux")
-        set(TBB_SHARED_LIB_DIR "lib")
-        set(TBB_X32_SUBDIR "ia32")
-        set(TBB_X64_SUBDIR "intel64")
-        set(TBB_LIB_PREFIX "lib")
-        set(TBB_LIB_EXT "so.2")
-
-        # Note: multiline variable
-        set(TBB_CHOOSE_COMPILER_SUBDIR "if (CMAKE_CXX_COMPILER_LOADED)
-    set(_tbb_compiler_id \${CMAKE_CXX_COMPILER_ID})
-    set(_tbb_compiler_ver \${CMAKE_CXX_COMPILER_VERSION})
-elseif (CMAKE_C_COMPILER_LOADED)
-    set(_tbb_compiler_id \${CMAKE_C_COMPILER_ID})
-    set(_tbb_compiler_ver \${CMAKE_C_COMPILER_VERSION})
-endif()
-
-# For non-GCC compilers try to find version of system GCC to choose right compiler subdirectory.
-if (NOT _tbb_compiler_id STREQUAL \"GNU\")
-    execute_process(COMMAND gcc --version OUTPUT_VARIABLE _tbb_gcc_ver_output ERROR_QUIET)
-    string(REGEX REPLACE \".*gcc.*([0-9]+\\\\.[0-9]+)\\\\.[0-9]+.*\" \"\\\\1\" _tbb_compiler_ver \"\${_tbb_gcc_ver_output}\")
-    if (NOT _tbb_compiler_ver)
-        message(FATAL_ERROR \"This Intel TBB package is intended to be used only environment with available 'gcc'\")
-    endif()
-    unset(_tbb_gcc_ver_output)
-endif()
-
-set(_tbb_compiler_subdir gcc4.1)
-foreach (_tbb_gcc_version 4.1 4.4 4.7)
-    if (NOT _tbb_compiler_ver VERSION_LESS \${_tbb_gcc_version})
-        set(_tbb_compiler_subdir gcc\${_tbb_gcc_version})
-    endif()
-endforeach()
-
-unset(_tbb_compiler_id)
-unset(_tbb_compiler_ver)")
-
-    elseif (tbb_system_name STREQUAL "Windows")
-        set(TBB_SHARED_LIB_DIR "bin")
-        set(TBB_X32_SUBDIR "ia32")
-        set(TBB_X64_SUBDIR "intel64")
-        set(TBB_LIB_PREFIX "")
-        set(TBB_LIB_EXT "dll")
-
-        # Note: multiline variable
-        set(TBB_CHOOSE_COMPILER_SUBDIR "if (NOT MSVC)
-    message(FATAL_ERROR \"This Intel TBB package is intended to be used only in the project with MSVC\")
-endif()
-
-# Detect the most relevant MSVC subdirectory
-set(_tbb_msvc_1700_subdir vc11)
-set(_tbb_msvc_1800_subdir vc12)
-set(_tbb_msvc_1900_subdir vc14)
-set(_tbb_msvc_ver \${MSVC_VERSION})
-if (MSVC_VERSION VERSION_LESS 1700)
-    message(FATAL_ERROR \"This Intel TBB package is intended to be used only in the project with MSVC version 1700 (vc11) or higher\")
-elseif (MSVC_VERSION VERSION_GREATER 1900)
-    set(_tbb_msvc_ver 1900)
-endif()
-set(_tbb_compiler_subdir \${_tbb_msvc_\${_tbb_msvc_ver}_subdir})
-unset(_tbb_msvc_1700_subdir)
-unset(_tbb_msvc_1800_subdir)
-unset(_tbb_msvc_1900_subdir)
-
-if (WINDOWS_STORE)
-    set(_tbb_compiler_subdir \${_tbb_compiler_subdir}_ui)
-endif()")
-
-        if (tbb_MK_CONFIG_FOR_SOURCE)
-            set(TBB_IMPLIB_RELEASE "\nIMPORTED_IMPLIB_RELEASE \"${tbb_MK_TBB_RELEASE_DIR}/\${_tbb_component}.lib\"")
-            set(TBB_IMPLIB_DEBUG "\nIMPORTED_IMPLIB_DEBUG \"${tbb_MK_TBB_DEBUG_DIR}/\${_tbb_component}_debug.lib\"")
-        else()
-            # Note: multiline variable
-            set(TBB_IMPLIB "
-                              IMPORTED_IMPLIB_RELEASE       \"\${_tbb_root}/lib/\${_tbb_arch_subdir}/\${_tbb_compiler_subdir}/\${_tbb_component}.lib\"
-                              IMPORTED_IMPLIB_DEBUG         \"\${_tbb_root}/lib/\${_tbb_arch_subdir}/\${_tbb_compiler_subdir}/\${_tbb_component}_debug.lib\"")
-        endif()
-
-        # Note: multiline variable
-        # tbb/internal/_tbb_windef.h (included via tbb/tbb_stddef.h) does implicit linkage of some .lib files, use a special define to avoid it
-        set(TBB_COMPILE_DEFINITIONS "
-                              INTERFACE_COMPILE_DEFINITIONS \"__TBB_NO_IMPLICIT_LINKAGE=1\"")
-    elseif (tbb_system_name STREQUAL "Darwin")
-        set(TBB_SHARED_LIB_DIR "lib")
-        set(TBB_X32_SUBDIR ".")
-        set(TBB_X64_SUBDIR ".")
-        set(TBB_LIB_PREFIX "lib")
-        set(TBB_LIB_EXT "dylib")
-        set(TBB_CHOOSE_COMPILER_SUBDIR "set(_tbb_compiler_subdir .)")
-    elseif (tbb_system_name STREQUAL "Android")
-        set(TBB_SHARED_LIB_DIR "lib")
-        set(TBB_X32_SUBDIR ".")
-        set(TBB_X64_SUBDIR "x86_64")
-        set(TBB_LIB_PREFIX "lib")
-        set(TBB_LIB_EXT "so")
-        set(TBB_CHOOSE_COMPILER_SUBDIR "set(_tbb_compiler_subdir .)")
-    endif()
-
-    file(READ "${tbb_MK_TBB_ROOT}/include/tbb/tbb_stddef.h" _tbb_stddef)
-    string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _tbb_ver_major "${_tbb_stddef}")
-    string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _tbb_ver_minor "${_tbb_stddef}")
-    string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" TBB_INTERFACE_VERSION "${_tbb_stddef}")
-    set(TBB_VERSION "${_tbb_ver_major}.${_tbb_ver_minor}")
-
-    if (tbb_MK_CONFIG_FOR_SOURCE)
-        set(_tbb_config_template TBBConfigForSource.cmake.in)
-    else()
-        set(_tbb_config_template TBBConfig.cmake.in)
-    endif()
-    configure_file(${_tbb_cmake_module_path}/templates/${_tbb_config_template}   ${tbb_MK_TBB_ROOT}/cmake/TBBConfig.cmake @ONLY)
-    configure_file(${_tbb_cmake_module_path}/templates/TBBConfigVersion.cmake.in ${tbb_MK_TBB_ROOT}/cmake/TBBConfigVersion.cmake @ONLY)
-
-    set(${tbb_MK_CONFIG_DIR} ${tbb_MK_TBB_ROOT}/cmake PARENT_SCOPE)
-endfunction()
diff --git a/cmake/tbb/templates/TBBConfig.cmake.in b/cmake/tbb/templates/TBBConfig.cmake.in
deleted file mode 100644
index 19bc1fca..00000000
--- a/cmake/tbb/templates/TBBConfig.cmake.in
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-#
-#
-
-# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.
-# Handling of TBB_VERSION is in TBBConfigVersion.cmake.
-
-if (NOT TBB_FIND_COMPONENTS)
-    set(TBB_FIND_COMPONENTS "@TBB_DEFAULT_COMPONENTS@")
-    foreach (_tbb_component ${TBB_FIND_COMPONENTS})
-        set(TBB_FIND_REQUIRED_${_tbb_component} 1)
-    endforeach()
-endif()
-
-# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc
-list(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)
-if (NOT _tbbmalloc_proxy_ix EQUAL -1)
-    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)
-    if (_tbbmalloc_ix EQUAL -1)
-        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)
-        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})
-    endif()
-endif()
-
-set(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)
-
-get_filename_component(_tbb_root "${CMAKE_CURRENT_LIST_FILE}" PATH)
-get_filename_component(_tbb_root "${_tbb_root}" PATH)
-
-set(_tbb_x32_subdir @TBB_X32_SUBDIR@)
-set(_tbb_x64_subdir @TBB_X64_SUBDIR@)
-
-if (CMAKE_SIZEOF_VOID_P EQUAL 8)
-    set(_tbb_arch_subdir ${_tbb_x64_subdir})
-else()
-    set(_tbb_arch_subdir ${_tbb_x32_subdir})
-endif()
-
-@TBB_CHOOSE_COMPILER_SUBDIR@
-
-get_filename_component(_tbb_lib_path "${_tbb_root}/@TBB_SHARED_LIB_DIR@/${_tbb_arch_subdir}/${_tbb_compiler_subdir}" ABSOLUTE)
-
-foreach (_tbb_component ${TBB_FIND_COMPONENTS})
-    set(_tbb_release_lib "${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@")
-    set(_tbb_debug_lib "${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@")
-
-    if (EXISTS "${_tbb_release_lib}" AND EXISTS "${_tbb_debug_lib}")
-        add_library(TBB::${_tbb_component} SHARED IMPORTED)
-        set_target_properties(TBB::${_tbb_component} PROPERTIES
-                              IMPORTED_CONFIGURATIONS "RELEASE;DEBUG"
-                              IMPORTED_LOCATION_RELEASE     "${_tbb_release_lib}"
-                              IMPORTED_LOCATION_DEBUG       "${_tbb_debug_lib}"
-                              INTERFACE_INCLUDE_DIRECTORIES "${_tbb_root}/include"@TBB_IMPLIB@@TBB_COMPILE_DEFINITIONS@)
-
-        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc
-        if (_tbb_component STREQUAL tbbmalloc_proxy)
-            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)
-        endif()
-
-        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})
-        set(TBB_${_tbb_component}_FOUND 1)
-    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})
-        message(FATAL_ERROR "Missed required Intel TBB component: ${_tbb_component}")
-    endif()
-endforeach()
-
-unset(_tbb_x32_subdir)
-unset(_tbb_x64_subdir)
-unset(_tbb_arch_subdir)
-unset(_tbb_compiler_subdir)
-unset(_tbbmalloc_proxy_ix)
-unset(_tbbmalloc_ix)
-unset(_tbb_lib_path)
-unset(_tbb_release_lib)
-unset(_tbb_debug_lib)
diff --git a/cmake/tbb/templates/TBBConfigForSource.cmake.in b/cmake/tbb/templates/TBBConfigForSource.cmake.in
deleted file mode 100644
index e708a9b8..00000000
--- a/cmake/tbb/templates/TBBConfigForSource.cmake.in
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-#
-#
-
-# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.
-# Handling of TBB_VERSION is in TBBConfigVersion.cmake.
-
-if (NOT TBB_FIND_COMPONENTS)
-    set(TBB_FIND_COMPONENTS "@TBB_DEFAULT_COMPONENTS@")
-    foreach (_tbb_component ${TBB_FIND_COMPONENTS})
-        set(TBB_FIND_REQUIRED_${_tbb_component} 1)
-    endforeach()
-endif()
-
-# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc
-list(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)
-if (NOT _tbbmalloc_proxy_ix EQUAL -1)
-    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)
-    if (_tbbmalloc_ix EQUAL -1)
-        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)
-        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})
-    endif()
-endif()
-
-set(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)
-
-get_filename_component(_tbb_root "${CMAKE_CURRENT_LIST_FILE}" PATH)
-get_filename_component(_tbb_root "${_tbb_root}" PATH)
-
-foreach (_tbb_component ${TBB_FIND_COMPONENTS})
-    set(_tbb_release_lib "@TBB_RELEASE_DIR@/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@")
-    set(_tbb_debug_lib "@TBB_DEBUG_DIR@/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@")
-
-    if (EXISTS "${_tbb_release_lib}" OR EXISTS "${_tbb_debug_lib}")
-        add_library(TBB::${_tbb_component} SHARED IMPORTED)
-        set_target_properties(TBB::${_tbb_component} PROPERTIES
-                              INTERFACE_INCLUDE_DIRECTORIES "${_tbb_root}/include"@TBB_COMPILE_DEFINITIONS@)
-
-
-        if (EXISTS "${_tbb_release_lib}")
-            set_target_properties(TBB::${_tbb_component} PROPERTIES
-                                  IMPORTED_LOCATION_RELEASE "${_tbb_release_lib}"@TBB_IMPLIB_RELEASE@)
-            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-        endif()
-
-        if (EXISTS "${_tbb_debug_lib}")
-            set_target_properties(TBB::${_tbb_component} PROPERTIES
-                                  IMPORTED_LOCATION_DEBUG "${_tbb_debug_lib}"@TBB_IMPLIB_DEBUG@)
-            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-        endif()
-
-        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc
-        if (_tbb_component STREQUAL tbbmalloc_proxy)
-            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)
-        endif()
-
-        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})
-        set(TBB_${_tbb_component}_FOUND 1)
-    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})
-        message(FATAL_ERROR "Missed required Intel TBB component: ${_tbb_component}")
-    endif()
-endforeach()
-
-unset(_tbbmalloc_proxy_ix)
-unset(_tbbmalloc_ix)
-unset(_tbb_lib_path)
-unset(_tbb_release_lib)
-unset(_tbb_debug_lib)
diff --git a/cmake/tbb/templates/TBBConfigVersion.cmake.in b/cmake/tbb/templates/TBBConfigVersion.cmake.in
deleted file mode 100644
index 69d16cf0..00000000
--- a/cmake/tbb/templates/TBBConfigVersion.cmake.in
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-#
-#
-
-set(PACKAGE_VERSION @TBB_VERSION@)
-
-if ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
-    set(PACKAGE_VERSION_COMPATIBLE FALSE)
-else()
-    set(PACKAGE_VERSION_COMPATIBLE TRUE)
-    if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
-        set(PACKAGE_VERSION_EXACT TRUE)
-    endif()
-endif()
diff --git a/tbb b/tbb
new file mode 160000
index 00000000..a0dc9bf7
--- /dev/null
+++ b/tbb
@@ -0,0 +1 @@
+Subproject commit a0dc9bf76d0120f917b641ed095360448cabc85b
-- 
GitLab