You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.5 KiB
137 lines
5.5 KiB
#
|
|
# Copyright 2020 Adobe. All rights reserved.
|
|
# This file is licensed to you 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 REPRESENTATIONS
|
|
# OF ANY KIND, either express or implied. See the License for the specific language
|
|
# governing permissions and limitations under the License.
|
|
#
|
|
|
|
####################################################################################################
|
|
# IMPORTANT
|
|
#
|
|
# This file defines a single ALIAS target `TBB::tbb`.
|
|
#
|
|
# Depending on the option TBB_PREFER_STATIC, this alias may point to either the dynamic version
|
|
# of TBB, or the static version. The official recommendation is to use the dynamic library:
|
|
#
|
|
# https://www.threadingbuildingblocks.org/faq/there-version-tbb-provides-statically-linked-libraries
|
|
# https://stackoverflow.com/questions/638278/how-to-statically-link-to-tbb
|
|
#
|
|
# For now we do not have a proper CMake workflow to deal with DLLs, so we default to tbb_static
|
|
####################################################################################################
|
|
|
|
if(TARGET TBB::tbb)
|
|
return()
|
|
endif()
|
|
|
|
message(STATUS "Third-party: creating target 'TBB::tbb'")
|
|
|
|
# Using wjakob's fork as it has a better cmake build system
|
|
# Change it back to intel's once they fix it
|
|
# https://github.com/intel/tbb/issues/6
|
|
include(FetchContent)
|
|
FetchContent_Declare(
|
|
tbb
|
|
GIT_REPOSITORY https://github.com/wjakob/tbb.git
|
|
GIT_TAG 141b0e310e1fb552bdca887542c9c1a8544d6503
|
|
GIT_SHALLOW FALSE
|
|
)
|
|
|
|
option(TBB_PREFER_STATIC "Use the static version of TBB for the alias target" ON)
|
|
option(TBB_BUILD_SHARED "Build TBB shared library" OFF)
|
|
option(TBB_BUILD_STATIC "Build TBB static library" OFF)
|
|
option(TBB_BUILD_TBBMALLOC "Build TBB malloc library" ON)
|
|
option(TBB_BUILD_TBBMALLOC_PROXY "Build TBB malloc proxy library" OFF)
|
|
option(TBB_BUILD_TESTS "Build TBB tests and enable testing infrastructure" OFF)
|
|
option(TBB_NO_DATE "Do not save the configure date in the version string" ON)
|
|
|
|
# Mark those options as advanced so they don't show up in CMake GUI
|
|
# Please use TBB_PREFER_STATIC instead
|
|
mark_as_advanced(TBB_BUILD_SHARED TBB_BUILD_STATIC)
|
|
|
|
# Make sure tbb or tbb_static is built, according to the user's option
|
|
if(TBB_PREFER_STATIC)
|
|
set(TBB_BUILD_STATIC ON CACHE BOOL "Build TBB static library" FORCE)
|
|
set(TBB_BUILD_SHARED OFF CACHE BOOL "Build TBB shared library" FORCE)
|
|
else()
|
|
set(TBB_BUILD_SHARED ON CACHE BOOL "Build TBB shared library" FORCE)
|
|
set(TBB_BUILD_STATIC OFF CACHE BOOL "Build TBB static library" FORCE)
|
|
endif()
|
|
|
|
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME TBB)
|
|
FetchContent_MakeAvailable(tbb)
|
|
|
|
# Install rules for the tbb_static target (not defined by upstream CMakeLists.txt)
|
|
if(TBB_INSTALL_TARGETS AND TBB_BUILD_STATIC)
|
|
if(NOT TBB_INSTALL_RUNTIME_DIR)
|
|
set(TBB_INSTALL_RUNTIME_DIR bin)
|
|
endif()
|
|
if(NOT TBB_INSTALL_LIBRARY_DIR)
|
|
set(TBB_INSTALL_LIBRARY_DIR lib)
|
|
endif()
|
|
if(NOT TBB_INSTALL_ARCHIVE_DIR)
|
|
set(TBB_INSTALL_ARCHIVE_DIR lib)
|
|
endif()
|
|
if(NOT TBB_INSTALL_INCLUDE_DIR)
|
|
set(TBB_INSTALL_INCLUDE_DIR include)
|
|
endif()
|
|
if(NOT TBB_CMAKE_PACKAGE_INSTALL_DIR)
|
|
set(TBB_CMAKE_PACKAGE_INSTALL_DIR lib/cmake/tbb)
|
|
endif()
|
|
if(TARGET tbb_interface)
|
|
install(TARGETS tbb_interface EXPORT TBB)
|
|
endif()
|
|
if(TARGET tbb_static)
|
|
install(TARGETS tbb_static EXPORT TBB
|
|
LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR}
|
|
ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}
|
|
RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR})
|
|
endif()
|
|
if(TARGET tbbmalloc_static)
|
|
install(TARGETS tbbmalloc_static EXPORT TBB
|
|
LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR}
|
|
ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}
|
|
RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR})
|
|
endif()
|
|
install(EXPORT TBB DESTINATION ${TBB_CMAKE_PACKAGE_INSTALL_DIR} NAMESPACE TBB:: FILE TBBConfig.cmake)
|
|
endif()
|
|
|
|
# Fix include directories to not explicitly reference the build directory, otherwise install() will complain
|
|
function(tbb_fix_include_dirs)
|
|
foreach(name IN ITEMS ${ARGN})
|
|
if(NOT TARGET ${name})
|
|
message(FATAL_ERROR "'${name}' is not a CMake target")
|
|
endif()
|
|
get_target_property(__include_dirs ${name} INTERFACE_INCLUDE_DIRECTORIES)
|
|
set_property(TARGET ${name} PROPERTY INTERFACE_INCLUDE_DIRECTORIES
|
|
$<BUILD_INTERFACE:${__include_dirs}>
|
|
$<INSTALL_INTERFACE:${TBB_INSTALL_INCLUDE_DIR}>
|
|
)
|
|
endforeach()
|
|
endfunction()
|
|
|
|
# Meta-target that brings both tbb and tbbmalloc
|
|
add_library(tbb_tbb INTERFACE)
|
|
add_library(TBB::tbb ALIAS tbb_tbb)
|
|
if(TBB_PREFER_STATIC)
|
|
target_link_libraries(tbb_tbb INTERFACE tbb_static tbbmalloc_static)
|
|
tbb_fix_include_dirs(tbb_static)
|
|
else()
|
|
target_link_libraries(tbb_tbb INTERFACE tbb tbbmalloc)
|
|
tbb_fix_include_dirs(tbb)
|
|
endif()
|
|
|
|
# Install rules
|
|
install(TARGETS tbb_tbb EXPORT TBB)
|
|
|
|
# Set -fPIC flag and IDE folder name for tbb targets
|
|
foreach(name IN ITEMS tbb_def_files tbb_static tbb tbbmalloc tbbmalloc_static)
|
|
if(TARGET ${name})
|
|
set_target_properties(${name} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
set_target_properties(${name} PROPERTIES FOLDER third_party)
|
|
endif()
|
|
endforeach()
|
|
|