forked from supermerill/SuperSlicer
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use TBB config scripts to find the library if using dynamic libraries.
fixes prusa3d#7470 fixes prusa3d#6355 ?
- Loading branch information
1 parent
2121a98
commit 914f170
Showing
2 changed files
with
356 additions
and
328 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,332 +1,28 @@ | ||
# The MIT License (MIT) | ||
# | ||
# Copyright (c) 2015 Justus Calvin | ||
# | ||
# Permission is hereby granted, free of charge, to any person obtaining a copy | ||
# of this software and associated documentation files (the "Software"), to deal | ||
# in the Software without restriction, including without limitation the rights | ||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
# copies of the Software, and to permit persons to whom the Software is | ||
# furnished to do so, subject to the following conditions: | ||
# | ||
# The above copyright notice and this permission notice shall be included in all | ||
# copies or substantial portions of the Software. | ||
# | ||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
# SOFTWARE. | ||
|
||
# | ||
# FindTBB | ||
# ------- | ||
# | ||
# Find TBB include directories and libraries. | ||
# | ||
# Usage: | ||
# | ||
# find_package(TBB [major[.minor]] [EXACT] | ||
# [QUIET] [REQUIRED] | ||
# [[COMPONENTS] [components...]] | ||
# [OPTIONAL_COMPONENTS components...]) | ||
# | ||
# where the allowed components are tbbmalloc and tbb_preview. Users may modify | ||
# the behavior of this module with the following variables: | ||
# | ||
# * TBB_ROOT_DIR - The base directory the of TBB installation. | ||
# * TBB_INCLUDE_DIR - The directory that contains the TBB headers files. | ||
# * TBB_LIBRARY - The directory that contains the TBB library files. | ||
# * TBB_<library>_LIBRARY - The path of the TBB the corresponding TBB library. | ||
# These libraries, if specified, override the | ||
# corresponding library search results, where <library> | ||
# may be tbb, tbb_debug, tbbmalloc, tbbmalloc_debug, | ||
# tbb_preview, or tbb_preview_debug. | ||
# * TBB_USE_DEBUG_BUILD - The debug version of tbb libraries, if present, will | ||
# be used instead of the release version. | ||
# * TBB_STATIC - Static linking of libraries with a _static suffix. | ||
# For example, on Windows a tbb_static.lib will be searched for | ||
# instead of tbb.lib. | ||
# | ||
# Users may modify the behavior of this module with the following environment | ||
# variables: | ||
# | ||
# * TBB_INSTALL_DIR | ||
# * TBBROOT | ||
# * LIBRARY_PATH | ||
# | ||
# This module will set the following variables: | ||
# | ||
# * TBB_FOUND - Set to false, or undefined, if we haven’t found, or | ||
# don’t want to use TBB. | ||
# * TBB_<component>_FOUND - If False, optional <component> part of TBB sytem is | ||
# not available. | ||
# * TBB_VERSION - The full version string | ||
# * TBB_VERSION_MAJOR - The major version | ||
# * TBB_VERSION_MINOR - The minor version | ||
# * TBB_INTERFACE_VERSION - The interface version number defined in | ||
# tbb/tbb_stddef.h. | ||
# * TBB_<library>_LIBRARY_RELEASE - The path of the TBB release version of | ||
# <library>, where <library> may be tbb, tbb_debug, | ||
# tbbmalloc, tbbmalloc_debug, tbb_preview, or | ||
# tbb_preview_debug. | ||
# * TBB_<library>_LIBRARY_DEGUG - The path of the TBB release version of | ||
# <library>, where <library> may be tbb, tbb_debug, | ||
# tbbmalloc, tbbmalloc_debug, tbb_preview, or | ||
# tbb_preview_debug. | ||
# | ||
# The following varibles should be used to build and link with TBB: | ||
# | ||
# * TBB_INCLUDE_DIRS - The include directory for TBB. | ||
# * TBB_LIBRARIES - The libraries to link against to use TBB. | ||
# * TBB_LIBRARIES_RELEASE - The release libraries to link against to use TBB. | ||
# * TBB_LIBRARIES_DEBUG - The debug libraries to link against to use TBB. | ||
# * TBB_DEFINITIONS - Definitions to use when compiling code that uses | ||
# TBB. | ||
# * TBB_DEFINITIONS_RELEASE - Definitions to use when compiling release code that | ||
# uses TBB. | ||
# * TBB_DEFINITIONS_DEBUG - Definitions to use when compiling debug code that | ||
# uses TBB. | ||
# | ||
# This module will also create the "tbb" target that may be used when building | ||
# executables and libraries. | ||
|
||
unset(TBB_FOUND CACHE) | ||
unset(TBB_INCLUDE_DIRS CACHE) | ||
unset(TBB_LIBRARIES) | ||
unset(TBB_LIBRARIES_DEBUG) | ||
unset(TBB_LIBRARIES_RELEASE) | ||
|
||
include(FindPackageHandleStandardArgs) | ||
|
||
find_package(Threads QUIET REQUIRED) | ||
|
||
if(NOT TBB_FOUND) | ||
|
||
################################## | ||
# Check the build type | ||
################################## | ||
|
||
if(NOT DEFINED TBB_USE_DEBUG_BUILD) | ||
if(CMAKE_BUILD_TYPE MATCHES "(Debug|DEBUG|debug)") | ||
set(TBB_BUILD_TYPE DEBUG) | ||
else() | ||
set(TBB_BUILD_TYPE RELEASE) | ||
endif() | ||
elseif(TBB_USE_DEBUG_BUILD) | ||
set(TBB_BUILD_TYPE DEBUG) | ||
else() | ||
set(TBB_BUILD_TYPE RELEASE) | ||
endif() | ||
|
||
################################## | ||
# Set the TBB search directories | ||
################################## | ||
|
||
# Define search paths based on user input and environment variables | ||
set(TBB_SEARCH_DIR ${TBB_ROOT_DIR} $ENV{TBB_INSTALL_DIR} $ENV{TBBROOT}) | ||
|
||
# Define the search directories based on the current platform | ||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows") | ||
set(TBB_DEFAULT_SEARCH_DIR "C:/Program Files/Intel/TBB" | ||
"C:/Program Files (x86)/Intel/TBB") | ||
|
||
# Set the target architecture | ||
if(CMAKE_SIZEOF_VOID_P EQUAL 8) | ||
set(TBB_ARCHITECTURE "intel64") | ||
else() | ||
set(TBB_ARCHITECTURE "ia32") | ||
endif() | ||
|
||
# Set the TBB search library path search suffix based on the version of VC | ||
if(WINDOWS_STORE) | ||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11_ui") | ||
elseif(MSVC14) | ||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc14") | ||
elseif(MSVC12) | ||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc12") | ||
elseif(MSVC11) | ||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11") | ||
elseif(MSVC10) | ||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc10") | ||
endif() | ||
|
||
# Add the library path search suffix for the VC independent version of TBB | ||
list(APPEND TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc_mt") | ||
|
||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | ||
# OS X | ||
set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb") | ||
|
||
# TODO: Check to see which C++ library is being used by the compiler. | ||
if(NOT ${CMAKE_SYSTEM_VERSION} VERSION_LESS 13.0) | ||
# The default C++ library on OS X 10.9 and later is libc++ | ||
set(TBB_LIB_PATH_SUFFIX "lib/libc++" "lib") | ||
else() | ||
set(TBB_LIB_PATH_SUFFIX "lib") | ||
endif() | ||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") | ||
# Linux | ||
set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb") | ||
|
||
# TODO: Check compiler version to see the suffix should be <arch>/gcc4.1 or | ||
# <arch>/gcc4.1. For now, assume that the compiler is more recent than | ||
# gcc 4.4.x or later. | ||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") | ||
set(TBB_LIB_PATH_SUFFIX "lib/intel64/gcc4.4") | ||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") | ||
set(TBB_LIB_PATH_SUFFIX "lib/ia32/gcc4.4") | ||
endif() | ||
endif() | ||
|
||
################################## | ||
# Find the TBB include dir | ||
################################## | ||
|
||
find_path(TBB_INCLUDE_DIRS tbb/tbb.h | ||
HINTS ${TBB_INCLUDE_DIR} ${TBB_SEARCH_DIR} | ||
PATHS ${TBB_DEFAULT_SEARCH_DIR} | ||
PATH_SUFFIXES include) | ||
|
||
################################## | ||
# Set version strings | ||
################################## | ||
|
||
if(TBB_INCLUDE_DIRS) | ||
file(READ "${TBB_INCLUDE_DIRS}/tbb/tbb_stddef.h" _tbb_version_file) | ||
string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" | ||
TBB_VERSION_MAJOR "${_tbb_version_file}") | ||
string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" | ||
TBB_VERSION_MINOR "${_tbb_version_file}") | ||
string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" | ||
TBB_INTERFACE_VERSION "${_tbb_version_file}") | ||
set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}") | ||
endif() | ||
|
||
################################## | ||
# Find TBB components | ||
################################## | ||
|
||
if(TBB_VERSION VERSION_LESS 4.3) | ||
set(TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc tbb) | ||
else() | ||
set(TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc_proxy tbbmalloc tbb) | ||
endif() | ||
|
||
if(TBB_STATIC) | ||
set(TBB_STATIC_SUFFIX "_static") | ||
endif() | ||
|
||
# Find each component | ||
foreach(_comp ${TBB_SEARCH_COMPOMPONENTS}) | ||
if(";${TBB_FIND_COMPONENTS};tbb;" MATCHES ";${_comp};") | ||
|
||
unset(TBB_${_comp}_LIBRARY_DEBUG CACHE) | ||
unset(TBB_${_comp}_LIBRARY_RELEASE CACHE) | ||
|
||
# Search for the libraries | ||
find_library(TBB_${_comp}_LIBRARY_RELEASE ${_comp}${TBB_STATIC_SUFFIX} | ||
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR} | ||
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH | ||
PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX}) | ||
|
||
find_library(TBB_${_comp}_LIBRARY_DEBUG ${_comp}${TBB_STATIC_SUFFIX}_debug | ||
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR} | ||
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH | ||
PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX}) | ||
|
||
if(TBB_${_comp}_LIBRARY_DEBUG) | ||
list(APPEND TBB_LIBRARIES_DEBUG "${TBB_${_comp}_LIBRARY_DEBUG}") | ||
endif() | ||
if(TBB_${_comp}_LIBRARY_RELEASE) | ||
list(APPEND TBB_LIBRARIES_RELEASE "${TBB_${_comp}_LIBRARY_RELEASE}") | ||
endif() | ||
if(TBB_${_comp}_LIBRARY_${TBB_BUILD_TYPE} AND NOT TBB_${_comp}_LIBRARY) | ||
set(TBB_${_comp}_LIBRARY "${TBB_${_comp}_LIBRARY_${TBB_BUILD_TYPE}}") | ||
endif() | ||
|
||
if(TBB_${_comp}_LIBRARY AND EXISTS "${TBB_${_comp}_LIBRARY}") | ||
set(TBB_${_comp}_FOUND TRUE) | ||
else() | ||
set(TBB_${_comp}_FOUND FALSE) | ||
endif() | ||
|
||
# Mark internal variables as advanced | ||
mark_as_advanced(TBB_${_comp}_LIBRARY_RELEASE) | ||
mark_as_advanced(TBB_${_comp}_LIBRARY_DEBUG) | ||
mark_as_advanced(TBB_${_comp}_LIBRARY) | ||
|
||
endif() | ||
endforeach() | ||
|
||
################################## | ||
# Set compile flags and libraries | ||
################################## | ||
|
||
set(TBB_DEFINITIONS_RELEASE "") | ||
set(TBB_DEFINITIONS_DEBUG "TBB_USE_DEBUG=1") | ||
|
||
if(TBB_LIBRARIES_${TBB_BUILD_TYPE}) | ||
set(TBB_LIBRARIES "${TBB_LIBRARIES_${TBB_BUILD_TYPE}}") | ||
endif() | ||
|
||
if(NOT MSVC AND NOT TBB_LIBRARIES) | ||
set(TBB_LIBRARIES ${TBB_LIBRARIES_RELEASE}) | ||
endif() | ||
|
||
set(TBB_DEFINITIONS "") | ||
if (MSVC AND TBB_STATIC) | ||
set(TBB_DEFINITIONS __TBB_NO_IMPLICIT_LINKAGE) | ||
endif () | ||
|
||
unset (TBB_STATIC_SUFFIX) | ||
|
||
find_package_handle_standard_args(TBB | ||
REQUIRED_VARS TBB_INCLUDE_DIRS TBB_LIBRARIES | ||
FAIL_MESSAGE "TBB library cannot be found. Consider set TBBROOT environment variable." | ||
HANDLE_COMPONENTS | ||
VERSION_VAR TBB_VERSION) | ||
|
||
################################## | ||
# Create targets | ||
################################## | ||
# This is a wrapper of FindTBB which prefers the config scripts if available in the system | ||
# but only if building with dynamic dependencies. The config scripts potentially belong | ||
# to TBB >= 2020 which is incompatible with OpenVDB in our static dependency bundle. | ||
# This workaround is useful for package maintainers on Linux systems to use newer versions | ||
# of intel TBB (renamed to oneTBB from version 2021 up). | ||
set(_q "") | ||
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) | ||
set(_q QUIET) | ||
endif() | ||
|
||
if(NOT CMAKE_VERSION VERSION_LESS 3.0 AND TBB_FOUND) | ||
add_library(TBB::tbb UNKNOWN IMPORTED) | ||
set_target_properties(TBB::tbb PROPERTIES | ||
INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS}" | ||
INTERFACE_LINK_LIBRARIES "Threads::Threads;${CMAKE_DL_LIBS}" | ||
INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIRS} | ||
IMPORTED_LOCATION ${TBB_LIBRARIES}) | ||
if(TBB_LIBRARIES_RELEASE AND TBB_LIBRARIES_DEBUG) | ||
set_target_properties(TBB::tbb PROPERTIES | ||
INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS};$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:${TBB_DEFINITIONS_RELEASE}>;$<$<CONFIG:Debug>:${TBB_DEFINITIONS_DEBUG}>" | ||
IMPORTED_LOCATION_DEBUG ${TBB_LIBRARIES_DEBUG} | ||
IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_LIBRARIES_RELEASE} | ||
IMPORTED_LOCATION_RELEASE ${TBB_LIBRARIES_RELEASE} | ||
IMPORTED_LOCATION_MINSIZEREL ${TBB_LIBRARIES_RELEASE} | ||
) | ||
# Not building the static dependencies | ||
# Newer versions of TBB also discourage from using TBB as a static library | ||
if (NOT SLIC3R_STATIC AND NOT BUILD_SHARED_LIBS) | ||
find_package(${CMAKE_FIND_PACKAGE_NAME} ${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION} CONFIG ${_q}) | ||
|
||
if(NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) | ||
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND) | ||
message(STATUS "Falling back to MODULE search for ${CMAKE_FIND_PACKAGE_NAME}...") | ||
else() | ||
message(STATUS "${CMAKE_FIND_PACKAGE_NAME} found in ${${CMAKE_FIND_PACKAGE_NAME}_DIR}") | ||
endif() | ||
endif() | ||
endif() | ||
|
||
mark_as_advanced(TBB_INCLUDE_DIRS TBB_LIBRARIES) | ||
|
||
unset(TBB_ARCHITECTURE) | ||
unset(TBB_BUILD_TYPE) | ||
unset(TBB_LIB_PATH_SUFFIX) | ||
unset(TBB_DEFAULT_SEARCH_DIR) | ||
endif () | ||
|
||
if(TBB_DEBUG) | ||
message(STATUS " TBB_FOUND = ${TBB_FOUND}") | ||
message(STATUS " TBB_INCLUDE_DIRS = ${TBB_INCLUDE_DIRS}") | ||
message(STATUS " TBB_DEFINITIONS = ${TBB_DEFINITIONS}") | ||
message(STATUS " TBB_LIBRARIES = ${TBB_LIBRARIES}") | ||
message(STATUS " TBB_DEFINITIONS_DEBUG = ${TBB_DEFINITIONS_DEBUG}") | ||
message(STATUS " TBB_LIBRARIES_DEBUG = ${TBB_LIBRARIES_DEBUG}") | ||
message(STATUS " TBB_DEFINITIONS_RELEASE = ${TBB_DEFINITIONS_RELEASE}") | ||
message(STATUS " TBB_LIBRARIES_RELEASE = ${TBB_LIBRARIES_RELEASE}") | ||
endif() | ||
|
||
endif() | ||
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND) | ||
include(${CMAKE_CURRENT_LIST_DIR}/FindTBB.cmake.in) | ||
endif () |
Oops, something went wrong.