diff --git a/.github/workflows/linux-ci.yml b/.github/workflows/linux-ci.yml index fde46de..69e7067 100644 --- a/.github/workflows/linux-ci.yml +++ b/.github/workflows/linux-ci.yml @@ -117,5 +117,5 @@ jobs: conda activate pyctest && export CMAKE_PREFIX_PATH="${HOME}/ptl-install:${CMAKE_PREFIX_PATH}:${CONDA_PREFIX}" && cmake --build build-PTL --target install && - cmake -B ${HOME}/ptl-examples-build ${PWD}/examples/basic && + cmake -B ${HOME}/ptl-examples-build ${PWD}/examples && cmake --build ${HOME}/ptl-examples-build --target all diff --git a/CMakeLists.txt b/CMakeLists.txt index 923f4f7..42e5a9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,110 +1,95 @@ ################################################################################ # cmake settings # -cmake_minimum_required(VERSION 3.8 FATAL_ERROR) +cmake_minimum_required(VERSION 3.8...3.20) +if(${CMAKE_VERSION} VERSION_LESS 3.12) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +endif() +# Warn about an in-source build, but don't error out if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") - set(MSG "") message(STATUS "Warning! Building from the source directory is not recommended") message(STATUS "If unintented, please remove 'CMakeCache.txt' and 'CMakeFiles'") message(STATUS "and build from a separate directory") message(WARNING "In-source build") endif() -# Add allocation export symbol for the PLT module -add_compile_definitions(PTL_ALLOC_EXPORT) - -cmake_policy(SET CMP0048 NEW) -cmake_policy(SET CMP0042 NEW) - # Check if project is being used directly or via add_subdirectory set(PTL_MASTER_PROJECT ON) if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) set(PTL_MASTER_PROJECT OFF) endif() -################################################################################ -# version -# +# Version file(READ "${CMAKE_CURRENT_LIST_DIR}/VERSION" VERSION_STRING LIMIT_COUNT 1) string(REGEX REPLACE "(\n|\r)" "" VERSION_STRING "${VERSION_STRING}") string(REGEX REPLACE "[A-Za-z].*" "" VERSION_STRING "${VERSION_STRING}") set(PTL_VERSION "${VERSION_STRING}") - ################################################################################ -# project +# project setup # project(PTL LANGUAGES C CXX VERSION ${PTL_VERSION}) -if(NOT PTL_MASTER_PROJECT) - unset(${PROJECT_NAME}_C_FLAGS CACHE) - unset(${PROJECT_NAME}_CXX_FLAGS CACHE) -endif() -set(CMAKE_DIRECTORY_LABELS "PTL") - -################################################################################ -# -# -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/Modules ${CMAKE_MODULE_PATH}) -foreach(_TYPE MAJOR MINOR PATCH) - set(PTL_VERSION_${_TYPE} ${PROJECT_VERSION_${_TYPE}} - CACHE STRING "PTL ${_TYPE} version" FORCE) - mark_as_advanced(PTL_VERSION_${_TYPE}) -endforeach() -set(PTL_VERSION_STRING "${PTL_VERSION_MAJOR}.${PTL_VERSION_MINOR}.${PTL_VERSION_PATCH}" - CACHE STRING "PTL version string") +# Postprocess version info to create variables for export to Version.hh set(PTL_VERSION_STRING "${PTL_VERSION_MAJOR}.${PTL_VERSION_MINOR}.${PTL_VERSION_PATCH}") math(EXPR PTL_VERSION_CODE "10000 * ${PTL_VERSION_MAJOR} + 100 * ${PTL_VERSION_MINOR} + ${PTL_VERSION_PATCH}") -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/Modules ${CMAKE_MODULE_PATH}) -set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME development) -mark_as_advanced(PTL_VERSION) - -if("${CMAKE_BUILD_TYPE}" STREQUAL "") - set(CMAKE_BUILD_TYPE Release CACHE STRING "CMake build type" FORCE) -endif() +# Project-local CMake settings +set(CMAKE_DIRECTORY_LABELS "PTL") +set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON) +set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME Development) +set(CMAKE_INSTALL_MESSAGE LAZY) +set(CMAKE_LINK_DEPENDS_NO_SHARED ON) +list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}/cmake/Modules) +include(PTLCMakeUtilities) ################################################################################ - -# include(MacroUtilities) -include(Options) -include(Compilers) -include(GNUInstallDirs) -include(ProjectSettings) -include(BuildSettings) -include(Packages) -include(ClangFormat) +# Build/Install settings and options +include(PTLInstallDirs) +include(PTLBuildSettings) ################################################################################ -# PTL source +# User options +ptl_add_option(PTL_USE_TBB "Enable TBB" ON) +ptl_add_option(PTL_USE_LOCKS "Enable mutex locking in task subqueues for extra safety" OFF) + ################################################################################ +# Build Dependencies +# - Threads +if(NOT WIN32) + set(CMAKE_THREAD_PREFER_PTHREAD ON) + set(THREADS_PREFER_PTHREAD_FLAG ON) +endif() +find_package(Threads REQUIRED) -add_subdirectory(source) +# - TBB +if(PTL_USE_TBB) + find_package(TBB 2017 REQUIRED) +endif() ################################################################################ -# Installation and info -################################################################################ +# PTL Primary Build +add_subdirectory(source) -include(ConfigurePackage) +################################################################################ +# CMake/PkgConfig Support files +include(PTLPackageConfigHelpers) -if(PTL_BUILD_EXAMPLES) - if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/examples) +################################################################################ +# Examples build/test +if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/examples) + ptl_add_option(PTL_BUILD_EXAMPLES "Build examples" OFF) + if(PTL_BUILD_EXAMPLES) set(PTL_DIR ${CMAKE_BINARY_DIR}) add_subdirectory(examples) - else() - set(PTL_BUILD_EXAMPLES OFF CACHE BOOL - "PTL examples directory doesn't exist" FORCE) endif() endif() +################################################################################ +# Reporting if master project if(PTL_MASTER_PROJECT) ptl_print_features() -else() - set(${PROJECT_NAME}_C_FLAGS ${${PROJECT_NAME}_C_FLAGS} CACHE STRING - "C compiler flags for ${PROJECT_NAME}") - set(${PROJECT_NAME}_CXX_FLAGS ${${PROJECT_NAME}_CXX_FLAGS} CACHE STRING - "CXX compiler flags for ${PROJECT_NAME}") endif() diff --git a/VERSION b/VERSION index e9307ca..7ec1d6d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.2 +2.1.0 diff --git a/cmake/Modules/BuildSettings.cmake b/cmake/Modules/BuildSettings.cmake deleted file mode 100644 index ae2c0f9..0000000 --- a/cmake/Modules/BuildSettings.cmake +++ /dev/null @@ -1,89 +0,0 @@ -################################################################################ -# -# Handles the build settings -# -################################################################################ -# -set(LIBNAME ptl) - -include(GNUInstallDirs) -include(CheckCCompilerFlag) -include(CheckCXXCompilerFlag) -include(Compilers) -include(MacroUtilities) - -ptl_add_interface_library(ptl-compile-options) -ptl_add_interface_library(ptl-public-options) -ptl_add_interface_library(ptl-external-libraries) -ptl_add_interface_library(ptl-sanitizer-options) - -# ---------------------------------------------------------------------------- # -# -#set(SANITIZE_TYPE leak CACHE STRING "-fsantitize=") - -# ---------------------------------------------------------------------------- # -# if master project, set the output directory (critical on Windows and Xcode) -# -if("${CMAKE_PROJECT_NAME}" STREQUAL "${PROJECT_NAME}") - set(_BIN_DIR ${PROJECT_BINARY_DIR}) - if(WIN32) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${_BIN_DIR}/outputs/runtime) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${_BIN_DIR}/outputs/library) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_BIN_DIR}/outputs/archive) - else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${_BIN_DIR}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${_BIN_DIR}) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_BIN_DIR}) - endif() -endif() - -# ---------------------------------------------------------------------------- # -# debug macro -# -string(TOUPPER "${CMAKE_BUILD_TYPE}" UC_BUILD_TYPE) -if("${UC_BUILD_TYPE}" STREQUAL "DEBUG") - target_compile_definitions(ptl-compile-options INTERFACE DEBUG) -else() - target_compile_definitions(ptl-compile-options INTERFACE NDEBUG) -endif() - -if(PTL_USE_LOCKS) - target_compile_definitions(ptl-public-options INTERFACE PTL_USE_LOCKS) -endif() - -if(PTL_USE_COVERAGE) - target_compile_options(ptl-public-options INTERFACE - $ - $) - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - target_compile_options(ptl-public-options INTERFACE - $) - check_cxx_compiler_flag("-fprofile-abs-path -ftest-coverage -fprofile-arcs" fprofile_abs_path) - if(fprofile_abs_path) - target_compile_options(ptl-public-options INTERFACE - $) - endif() - set_target_properties(ptl-public-options PROPERTIES - INTERFACE_LINK_OPTIONS - $) - else() - set_target_properties(ptl-public-options PROPERTIES - INTERFACE_LINK_OPTIONS - $) - endif() -endif() - -if(PTL_USE_SANITIZER AND PTL_SANITIZER_TYPE) - if("${PTL_SANITIZER_TYPE}" STREQUAL "thread") - target_compile_options(ptl-sanitizer-options INTERFACE - -fsanitize=${PTL_SANITIZER_TYPE}) - else() - target_compile_options(ptl-sanitizer-options INTERFACE - -fsanitize=${PTL_SANITIZER_TYPE} - -fno-optimize-sibling-calls - -fno-omit-frame-pointer - -fno-inline-functions) - endif() - target_link_options(ptl-sanitizer-options INTERFACE - -fsanitize=${PTL_SANITIZER_TYPE}) -endif() diff --git a/cmake/Modules/ClangFormat.cmake b/cmake/Modules/ClangFormat.cmake deleted file mode 100644 index 90ea8c2..0000000 --- a/cmake/Modules/ClangFormat.cmake +++ /dev/null @@ -1,51 +0,0 @@ -################################################################################ -# -# Creates a 'format' target that runs clang-format -# -################################################################################ - -find_program(CLANG_FORMATTER - NAMES - clang-format-6 - clang-format-6.0 - clang-format-mp-6.0 # macports - clang-format) - -if(CLANG_FORMATTER) - set(_Source_DIR ${PROJECT_SOURCE_DIR}/source) - set(_Example_DIR ${PROJECT_SOURCE_DIR}/examples) - - set(_Header_DIR ${_Source_DIR}/PTL) - set(_Basic_DIR ${_Example_DIR}/basic) - set(_Common_DIR ${_Example_DIR}/common) - set(_Extended_DIR ${_Example_DIR}/extended/rotation) - set(_Gpu_DIR ${_Example_DIR}/gpu) - - file(GLOB headers - ${_Header_DIR}/*.hh ${_Header_DIR}/*.icc - ${_Basic_DIR}/*.hh ${_Common_DIR}/*.hh - ${_Gpu_DIR}/*.h ${_Gpu_DIR}/*.hh - ${_Extended_DIR}/source/*.h ${_Extended_DIR}/source/*.hh) - - file(GLOB sources - ${_Source_DIR}/*.cc ${_Extended_DIR}/*.cc - ${_Basic_DIR}/*.cc ${_Common_DIR}/*.cc - ${_Gpu_DIR}/*.cc ${_Gpu_DIR}/*.cu - ${_Extended_DIR}/source/*.cc) - - file(GLOB_RECURSE extended - ${_Extended_DIR}/*.hh ${_Extended_DIR}/*.cc) - - # avoid conflicting format targets - set(FORMAT_NAME format) - if(TARGET format) - set(FORMAT_NAME format-ptl) - endif() - - add_custom_target(${FORMAT_NAME} - COMMAND ${CLANG_FORMATTER} -i ${headers} ${sources} ${extended} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMENT "Running '${CLANG_FORMATTER}' on '${_Source_DIR}' and '${_Example_DIR}..." - SOURCES ${headers} ${sources}) - -endif() diff --git a/cmake/Modules/Compilers.cmake b/cmake/Modules/Compilers.cmake deleted file mode 100644 index c80d990..0000000 --- a/cmake/Modules/Compilers.cmake +++ /dev/null @@ -1,399 +0,0 @@ - -################################################################################ -# -# Compilers -# -################################################################################ -# -# sets (cached): -# -# CMAKE_C_COMPILER_IS_ -# CMAKE_CXX_COMPILER_IS_ -# -# where TYPE is: -# - GNU -# - CLANG -# - INTEL -# - INTEL_ICC -# - INTEL_ICPC -# - PGI -# - XLC -# - HP_ACC -# - MIPS -# - MSVC -# - -# include guard -include_guard(DIRECTORY) - -include(CheckLanguage) - -include(CheckCCompilerFlag) -include(CheckCSourceCompiles) -include(CheckCSourceRuns) - -include(CheckCXXCompilerFlag) -include(CheckCXXSourceCompiles) -include(CheckCXXSourceRuns) - -include(MacroUtilities) - -if("${LIBNAME}" STREQUAL "") - string(TOLOWER "${PROJECT_NAME}" LIBNAME) -endif() - -ptl_add_interface_library(${LIBNAME}-compile-options) - -#----------------------------------------------------------------------------------------# -# macro converting string to list -#----------------------------------------------------------------------------------------# -macro(to_list _VAR _STR) - STRING(REPLACE " " " " ${_VAR} "${_STR}") - STRING(REPLACE " " ";" ${_VAR} "${_STR}") -endmacro(to_list _VAR _STR) - - -#----------------------------------------------------------------------------------------# -# macro converting string to list -#----------------------------------------------------------------------------------------# -macro(to_string _VAR _STR) - STRING(REPLACE ";" " " ${_VAR} "${_STR}") -endmacro(to_string _VAR _STR) - - -#----------------------------------------------------------------------------------------# -# Macro to add to string -#----------------------------------------------------------------------------------------# -macro(add _VAR _FLAG) - if(NOT "${_FLAG}" STREQUAL "") - if("${${_VAR}}" STREQUAL "") - set(${_VAR} "${_FLAG}") - else() - set(${_VAR} "${${_VAR}} ${_FLAG}") - endif() - endif() -endmacro() - - -#----------------------------------------------------------------------------------------# -# macro to remove duplicates from string -#----------------------------------------------------------------------------------------# -macro(set_no_duplicates _VAR) - if(NOT "${ARGN}" STREQUAL "") - set(${_VAR} "${ARGN}") - endif() - # remove the duplicates - if(NOT "${${_VAR}}" STREQUAL "") - # create list of flags - to_list(_VAR_LIST "${${_VAR}}") - list(REMOVE_DUPLICATES _VAR_LIST) - to_string(${_VAR} "${_VAR_LIST}") - endif(NOT "${${_VAR}}" STREQUAL "") -endmacro(set_no_duplicates _VAR) - - -########################################################################################## -# -# C compiler flags -# -########################################################################################## - - -#----------------------------------------------------------------------------------------# -# add C flag to target -#----------------------------------------------------------------------------------------# -macro(ADD_TARGET_C_FLAG _TARG) - target_compile_options(${_TARG} INTERFACE $<$:${ARGN}>) -endmacro() - - -#----------------------------------------------------------------------------------------# -# add C flag w/o check -#----------------------------------------------------------------------------------------# -macro(ADD_C_FLAG FLAG) - set(_TARG ) - set(_LTARG ) - if(NOT "${ARGN}" STREQUAL "") - set(_TARG ${ARGN}) - string(TOLOWER "_${ARGN}" _LTARG) - endif() - if(NOT "${FLAG}" STREQUAL "") - if("${_LTARG}" STREQUAL "") - list(APPEND ${PROJECT_NAME}_C_FLAGS "${FLAG}") - list(APPEND ${PROJECT_NAME}_C_COMPILE_OPTIONS "${FLAG}") - add_target_c_flag(${LIBNAME}-compile-options ${FLAG}) - else() - add_target_c_flag(${_TARG} ${FLAG}) - endif() - endif() -endmacro() - - -#----------------------------------------------------------------------------------------# -# check C flag -#----------------------------------------------------------------------------------------# -macro(ADD_C_FLAG_IF_AVAIL FLAG) - set(_TARG ) - set(_LTARG ) - if(NOT "${ARGN}" STREQUAL "") - set(_TARG ${ARGN}) - string(TOLOWER "_${ARGN}" _LTARG) - endif() - if(NOT "${FLAG}" STREQUAL "") - string(REGEX REPLACE "^/" "c${_LTARG}_" FLAG_NAME "${FLAG}") - string(REGEX REPLACE "^-" "c${_LTARG}_" FLAG_NAME "${FLAG}") - string(REPLACE "-" "_" FLAG_NAME "${FLAG_NAME}") - string(REPLACE " " "_" FLAG_NAME "${FLAG_NAME}") - string(REPLACE "=" "_" FLAG_NAME "${FLAG_NAME}") - check_c_compiler_flag("${FLAG}" ${FLAG_NAME}) - if(${FLAG_NAME}) - if("${_LTARG}" STREQUAL "") - list(APPEND ${PROJECT_NAME}_C_FLAGS "${FLAG}") - list(APPEND ${PROJECT_NAME}_C_COMPILE_OPTIONS "${FLAG}") - add_target_c_flag(${LIBNAME}-compile-options ${FLAG}) - else() - add_target_c_flag(${_TARG} ${FLAG}) - endif() - endif() - endif() -endmacro() - - -#----------------------------------------------------------------------------------------# -# add C flag to target -#----------------------------------------------------------------------------------------# -macro(ADD_TARGET_C_FLAG_IF_AVAIL _TARG) - foreach(_FLAG ${ARGN}) - add_c_flag_if_avail(${_FLAG} ${_TARG}) - endforeach() -endmacro() - - -########################################################################################## -# -# CXX compiler flags -# -########################################################################################## - - - -#----------------------------------------------------------------------------------------# -# add CXX flag to target -#----------------------------------------------------------------------------------------# -macro(ADD_TARGET_CXX_FLAG _TARG) - target_compile_options(${_TARG} INTERFACE $<$:${ARGN}>) - get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) - if(CMAKE_CUDA_COMPILER AND "CUDA" IN_LIST LANGUAGES) - target_compile_options(${_TARG} INTERFACE $<$:-Xcompiler=${ARGN}>) - endif() -endmacro() - - -#----------------------------------------------------------------------------------------# -# add CXX flag w/o check -#----------------------------------------------------------------------------------------# -macro(ADD_CXX_FLAG FLAG) - set(_TARG ) - set(_LTARG ) - if(NOT "${ARGN}" STREQUAL "") - set(_TARG ${ARGN}) - string(TOLOWER "_${ARGN}" _LTARG) - endif() - if(NOT "${FLAG}" STREQUAL "") - if("${_LTARG}" STREQUAL "") - list(APPEND ${PROJECT_NAME}_CXX_FLAGS "${FLAG}") - list(APPEND ${PROJECT_NAME}_CXX_COMPILE_OPTIONS "${FLAG}") - add_target_cxx_flag(${LIBNAME}-compile-options ${FLAG}) - else() - add_target_cxx_flag(${_TARG} ${FLAG}) - endif() - endif() -endmacro() - - -#----------------------------------------------------------------------------------------# -# check CXX flag -#----------------------------------------------------------------------------------------# -macro(ADD_CXX_FLAG_IF_AVAIL FLAG) - set(_TARG ) - set(_LTARG ) - if(NOT "${ARGN}" STREQUAL "") - set(_TARG ${ARGN}) - string(TOLOWER "_${ARGN}" _LTARG) - endif() - if(NOT "${FLAG}" STREQUAL "") - string(REGEX REPLACE "^/" "cxx${_LTARG}_" FLAG_NAME "${FLAG}") - string(REGEX REPLACE "^-" "cxx${_LTARG}_" FLAG_NAME "${FLAG}") - string(REPLACE "-" "_" FLAG_NAME "${FLAG_NAME}") - string(REPLACE " " "_" FLAG_NAME "${FLAG_NAME}") - string(REPLACE "=" "_" FLAG_NAME "${FLAG_NAME}") - check_cxx_compiler_flag("${FLAG}" ${FLAG_NAME}) - if(${FLAG_NAME}) - if("${_LTARG}" STREQUAL "") - list(APPEND ${PROJECT_NAME}_CXX_FLAGS "${FLAG}") - list(APPEND ${PROJECT_NAME}_CXX_COMPILE_OPTIONS "${FLAG}") - add_target_cxx_flag(${LIBNAME}-compile-options ${FLAG}) - else() - add_target_cxx_flag(${_TARG} ${FLAG}) - endif() - endif() - endif() -endmacro() - - -#----------------------------------------------------------------------------------------# -# add CXX flag to target -#----------------------------------------------------------------------------------------# -macro(ADD_TARGET_CXX_FLAG_IF_AVAIL _TARG) - foreach(_FLAG ${ARGN}) - add_cxx_flag_if_avail(${_FLAG} ${_TARG}) - endforeach() -endmacro() - - -########################################################################################## -# -# Common -# -########################################################################################## - - -#----------------------------------------------------------------------------------------# -# add C and CXX flag w/o checking -#----------------------------------------------------------------------------------------# -macro(ADD_TARGET_FLAG _TARG) - foreach(_ARG ${ARGN}) - ADD_TARGET_C_FLAG(${_TARG} ${_ARG}) - ADD_TARGET_CXX_FLAG(${_TARG} ${_ARG}) - endforeach() -endmacro() - - -#----------------------------------------------------------------------------------------# -# check C and CXX flag -#----------------------------------------------------------------------------------------# -macro(ADD_FLAG_IF_AVAIL) - foreach(_ARG ${ARGN}) - ADD_C_FLAG_IF_AVAIL("${_ARG}") - ADD_CXX_FLAG_IF_AVAIL("${_ARG}") - endforeach() -endmacro() - - -#----------------------------------------------------------------------------------------# -# check C and CXX flag -#----------------------------------------------------------------------------------------# -macro(ADD_TARGET_FLAG_IF_AVAIL _TARG) - foreach(_ARG ${ARGN}) - ADD_TARGET_C_FLAG_IF_AVAIL(${_TARG} ${_ARG}) - ADD_TARGET_CXX_FLAG_IF_AVAIL(${_TARG} ${_ARG}) - endforeach() -endmacro() - - -#----------------------------------------------------------------------------------------# -# add to any language -#----------------------------------------------------------------------------------------# -function(ADD_USER_FLAGS _TARGET _LANGUAGE) - - set(_FLAGS ${${_LANGUAGE}FLAGS} $ENV{${_LANGUAGE}FLAGS} - ${${_LANGUAGE}_FLAGS} $ENV{${_LANGUAGE}_FLAGS}) - - string(REPLACE " " ";" _FLAGS "${_FLAGS}") - - set(${PROJECT_NAME}_${_LANGUAGE}_FLAGS - ${${PROJECT_NAME}_${_LANGUAGE}_FLAGS} ${_FLAGS} PARENT_SCOPE) - - set(${PROJECT_NAME}_${_LANGUAGE}_COMPILE_OPTIONS - ${${PROJECT_NAME}_${_LANGUAGE}_COMPILE_OPTIONS} ${_FLAGS} PARENT_SCOPE) - - target_compile_options(${_TARGET} INTERFACE - $<$:${_FLAGS}>) -endfunction() - - -#----------------------------------------------------------------------------------------# -# determine compiler types for each language -#----------------------------------------------------------------------------------------# -foreach(LANG C CXX) - - macro(SET_COMPILER_VAR VAR _BOOL) - set(CMAKE_${LANG}_COMPILER_IS_${VAR} ${_BOOL}) - endmacro() - - if(("${LANG}" STREQUAL "C" AND CMAKE_COMPILER_IS_GNUCC) - OR - ("${LANG}" STREQUAL "CXX" AND CMAKE_COMPILER_IS_GNUCXX)) - - # GNU compiler - SET_COMPILER_VAR( GNU ON) - - elseif(CMAKE_${LANG}_COMPILER MATCHES "icc.*") - - # Intel icc compiler - SET_COMPILER_VAR( INTEL ON) - SET_COMPILER_VAR( INTEL_ICC ON) - - elseif(CMAKE_${LANG}_COMPILER MATCHES "icpc.*") - - # Intel icpc compiler - SET_COMPILER_VAR( INTEL ON) - SET_COMPILER_VAR( INTEL_ICPC ON) - - elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "Clang" OR - CMAKE_${LANG}_COMPILER_ID MATCHES "AppleClang") - - # Clang/LLVM compiler - SET_COMPILER_VAR( CLANG ON) - - elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "PGI") - - # PGI compiler - SET_COMPILER_VAR( PGI ON) - - elseif(CMAKE_${LANG}_COMPILER MATCHES "xlC" AND UNIX) - - # IBM xlC compiler - SET_COMPILER_VAR( XLC ON) - - elseif(CMAKE_${LANG}_COMPILER MATCHES "aCC" AND UNIX) - - # HP aC++ compiler - SET_COMPILER_VAR( HP_ACC ON) - - elseif(CMAKE_${LANG}_COMPILER MATCHES "CC" AND - CMAKE_SYSTEM_NAME MATCHES "IRIX" AND UNIX) - - # IRIX MIPSpro CC Compiler - SET_COMPILER_VAR( MIPS ON) - - elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "Intel") - - SET_COMPILER_VAR( INTEL ON) - - set(CTYPE ICC) - if("${LANG}" STREQUAL "CXX") - set(CTYPE ICPC) - endif() - - SET_COMPILER_VAR( INTEL_${CTYPE} ON) - - elseif(CMAKE_${LANG}_COMPILER MATCHES "MSVC") - - # Windows Visual Studio compiler - SET_COMPILER_VAR( MSVC ON) - - endif() - - # set other to no - foreach(TYPE GNU INTEL INTEL_ICC INTEL_ICPC CLANG PGI XLC HP_ACC MIPS MSVC) - if(NOT ${CMAKE_${LANG}_COMPILER_IS_${TYPE}}) - SET_COMPILER_VAR(${TYPE} OFF) - endif() - endforeach() - - if(APPLE OR ("${CMAKE_INCLUDE_SYSTEM_FLAG_${LANG}}" STREQUAL "-I" AND NOT WIN32)) - # set(CMAKE_INCLUDE_SYSTEM_FLAG_${LANG} "-isystem ") - endif() - -endforeach() diff --git a/cmake/Modules/ConfigurePackage.cmake b/cmake/Modules/ConfigurePackage.cmake deleted file mode 100644 index efc51ae..0000000 --- a/cmake/Modules/ConfigurePackage.cmake +++ /dev/null @@ -1,43 +0,0 @@ - -################################################################################ -# -# PTL Package installation -# -################################################################################ - -include(CMakePackageConfigHelpers) - -set(INCLUDE_INSTALL_DIR ${PTL_INSTALL_INCLUDEDIR}) -set(LIB_INSTALL_DIR ${PTL_INSTALL_LIBDIR}) - -configure_package_config_file( - ${PROJECT_SOURCE_DIR}/cmake/Templates/${PROJECT_NAME}Config.cmake.in - ${PROJECT_BINARY_DIR}/installation/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${PTL_INSTALL_CONFIGDIR} - INSTALL_PREFIX ${PTL_INSTALL_PREFIX} - PATH_VARS - INCLUDE_INSTALL_DIR - LIB_INSTALL_DIR) - -write_basic_package_version_file( - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion) - -install(FILES ${PROJECT_BINARY_DIR}/installation/${PROJECT_NAME}Config.cmake - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - DESTINATION ${PTL_INSTALL_CONFIGDIR}) - -install(FILES ${PROJECT_SOURCE_DIR}/cmake/Modules/FindTBB.cmake - DESTINATION ${PTL_INSTALL_CONFIGDIR}/Modules) - - -set(BUILD_TREE ON) -configure_package_config_file( - ${PROJECT_SOURCE_DIR}/cmake/Templates/${PROJECT_NAME}Build.cmake.in - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${PROJECT_BINARY_DIR} - INSTALL_PREFIX ${PROJECT_BINARY_DIR} - PATH_VARS - INCLUDE_INSTALL_DIR - LIB_INSTALL_DIR) diff --git a/cmake/Modules/CudaConfig.cmake b/cmake/Modules/CudaConfig.cmake deleted file mode 100644 index 53e2f08..0000000 --- a/cmake/Modules/CudaConfig.cmake +++ /dev/null @@ -1,44 +0,0 @@ - -#------------------------------------------------------------------------------# -# CUDA function -# -function(NVCUDA_COMPILE_PTX) - set(options "") - set(oneValueArgs TARGET_PATH GENERATED_FILES OUTPUT_DIR) - set(multiValueArgs NVCC_OPTIONS SOURCES) - cmake_parse_arguments(NVCUDA_COMPILE_PTX "${options}" "${oneValueArgs}" - "${multiValueArgs}" ${ARGN}) - - # Match the bitness of the ptx to the bitness of the application - set( MACHINE "--machine=32" ) - if( CMAKE_SIZEOF_VOID_P EQUAL 8) - set( MACHINE "--machine=64" ) - endif() - - set(_OUTPUT_DIR ${NVCUDA_COMPILE_PTX_OUTPUT_DIR}) - if("${_OUTPUT_DIR}" STREQUAL "") - set(_OUTPUT_DIR ${CUDA_GENERATED_OUTPUT_DIR}) - endif() - - # Custom build rule to generate ptx files from cuda files - foreach(input ${NVCUDA_COMPILE_PTX_SOURCES}) - get_filename_component(input_we ${input} NAME_WE) - - # generate the *.ptx files inside "ptx" folder inside - # the executable's output directory. - set( output "${_OUTPUT_DIR}/${input_we}.ptx" ) - - list(APPEND PTX_FILES ${output}) - - add_custom_command( - OUTPUT ${output} - DEPENDS ${input} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMAND ${CUDA_NVCC_EXECUTABLE} ${MACHINE} - --ptx ${NVCUDA_COMPILE_PTX_NVCC_OPTIONS} ${input} - -o ${output} - ) - endforeach() - - set(${NVCUDA_COMPILE_PTX_GENERATED_FILES} ${PTX_FILES} PARENT_SCOPE) -endfunction() diff --git a/cmake/Modules/Documentation.cmake b/cmake/Modules/Documentation.cmake index f727f35..19360ad 100644 --- a/cmake/Modules/Documentation.cmake +++ b/cmake/Modules/Documentation.cmake @@ -7,7 +7,6 @@ # root of the source directory) include(MacroUtilities) -include(CMakeDependentOption) #------------------------------------------------------------------------------# @@ -40,7 +39,7 @@ set(AVAILABLE_DOXYGEN_DOC_FORMATS HTML LATEX MAN XML RTF) set(_default_on "MAN") foreach(_doc_format ${AVAILABLE_DOXYGEN_DOC_FORMATS}) # find if we want it on - STRING(REGEX MATCH "${_doc_format}" SET_TO_ON "${_default_on}") + string(REGEX MATCH "${_doc_format}" SET_TO_ON "${_default_on}") # if doc format is MAN and it is not a UNIX machine --> turn off if("${_doc_format}" STREQUAL "MAN" AND NOT UNIX) set(SET_TO_ON "") @@ -95,7 +94,7 @@ if("${BUILDTREE_DIRS}" STREQUAL "") message(FATAL_ERROR "Property PTL_DOCUMENTATION_DIRS is empty") endif() -LIST(REMOVE_DUPLICATES BUILDTREE_DIRS) +list(REMOVE_DUPLICATES BUILDTREE_DIRS) set(SOURCE_FILES) set(EXTENSIONS h hh hpp c cc cpp icc tcc py) @@ -108,7 +107,6 @@ foreach(_DIR ${BUILDTREE_DIRS}) unset(_FILES CACHE) endforeach() endforeach() -#message(STATUS "source files: ${SOURCE_FILES}") # Doxyfiles was spaces not semi-colon separated lists STRING(REPLACE ";" " " BUILDTREE_DIRS "${BUILDTREE_DIRS}") @@ -129,7 +127,7 @@ configure_file(${PROJECT_SOURCE_DIR}/cmake/Templates/Doxyfile.in @ONLY) if(${PROJECT_NAME}_HTML_DOCS) - FILE(WRITE ${PROJECT_BINARY_DIR}/doc/${PROJECT_NAME}_Documentation.html + file(WRITE ${PROJECT_BINARY_DIR}/doc/${PROJECT_NAME}_Documentation.html "") endif() @@ -137,25 +135,25 @@ endif() # Macro to generate documentation # from: # http://www.cmake.org/pipermail/cmake/2007-May/014174.html -MACRO(GENERATE_DOCUMENTATION DOXYGEN_CONFIG_FILE) +macro(GENERATE_DOCUMENTATION DOXYGEN_CONFIG_FILE) - FIND_PACKAGE(Doxygen) + find_package(Doxygen) if(NOT Doxygen_FOUND) message(STATUS "Doxygen executable cannot be found. Disable ${PROJECT_NAME}_DOXYGEN_DOCS") return() endif() - SET(DOXYFILE_FOUND false) + set(DOXYFILE_FOUND false) - IF(EXISTS ${PROJECT_BINARY_DIR}/doc/${DOXYGEN_CONFIG_FILE}) - SET(DOXYFILE_FOUND true) - ELSE(EXISTS ${PROJECT_BINARY_DIR}/doc/${DOXYGEN_CONFIG_FILE}) - MESSAGE(STATUS "Doxygen config file was not found at ${PROJECT_BINARY_DIR}/doc/${DOXYGEN_CONFIG_FILE}") - ENDIF(EXISTS ${PROJECT_BINARY_DIR}/doc/${DOXYGEN_CONFIG_FILE}) + if(EXISTS ${PROJECT_BINARY_DIR}/doc/${DOXYGEN_CONFIG_FILE}) + set(DOXYFILE_FOUND true) + else() + message(STATUS "Doxygen config file was not found at ${PROJECT_BINARY_DIR}/doc/${DOXYGEN_CONFIG_FILE}") + endif() - IF( DOXYGEN_FOUND ) - IF( DOXYFILE_FOUND ) + if(DOXYGEN_FOUND) + if(DOXYFILE_FOUND) # Add target - ADD_CUSTOM_TARGET(docs ${DOXYGEN_EXECUTABLE} + add_custom_target(docs ${DOXYGEN_EXECUTABLE} "${PROJECT_BINARY_DIR}/doc/${DOXYGEN_CONFIG_FILE}" ) install(DIRECTORY ${PROJECT_BINARY_DIR}/doc/man/ @@ -182,19 +180,19 @@ MACRO(GENERATE_DOCUMENTATION DOXYGEN_CONFIG_FILE) COMPONENT documentation ) - ELSE( DOXYFILE_FOUND ) - MESSAGE( STATUS "Doxygen configuration file not found - Documentation will not be generated" ) - ENDIF( DOXYFILE_FOUND ) - ELSE(DOXYGEN_FOUND) - MESSAGE(STATUS "Doxygen not found - Documentation will not be generated") - ENDIF(DOXYGEN_FOUND) + else() + message(STATUS "Doxygen configuration file not found - Documentation will not be generated" ) + endif() + else() + message(STATUS "Doxygen not found - Documentation will not be generated") + endif() -ENDMACRO(GENERATE_DOCUMENTATION) +endmacro() #------------------------------------------------------------------------------# # Macro to generate PDF manual from LaTeX using pdflatex # assumes manual is in ${CMAKE_SOURCE_DIR}/doc -MACRO(GENERATE_MANUAL MANUAL_TEX MANUAL_BUILD_PATH EXTRA_FILES_TO_COPY) +macro(GENERATE_MANUAL MANUAL_TEX MANUAL_BUILD_PATH EXTRA_FILES_TO_COPY) find_program(PDFLATEX pdflatex) @@ -224,4 +222,4 @@ MACRO(GENERATE_MANUAL MANUAL_TEX MANUAL_BUILD_PATH EXTRA_FILES_TO_COPY) ${MANUAL_BUILD_PATH} ) endif() -ENDMACRO() +endmacro() diff --git a/cmake/Modules/FindGPerfTools.cmake b/cmake/Modules/FindGPerfTools.cmake index daf990e..826d382 100644 --- a/cmake/Modules/FindGPerfTools.cmake +++ b/cmake/Modules/FindGPerfTools.cmake @@ -5,11 +5,10 @@ include(FindPackageHandleStandardArgs) #------------------------------------------------------------------------------# -IF (CMAKE_VERSION VERSION_GREATER 2.8.7) - SET (GPerfTools_CHECK_COMPONENTS FALSE) -ELSE (CMAKE_VERSION VERSION_GREATER 2.8.7) - SET (GPerfTools_CHECK_COMPONENTS TRUE) -ENDIF (CMAKE_VERSION VERSION_GREATER 2.8.7) +set(GPerfTools_CHECK_COMPONENTS TRUE) +if(CMAKE_VERSION VERSION_GREATER 2.8.7) + set(GPerfTools_CHECK_COMPONENTS FALSE) +endif() #------------------------------------------------------------------------------# @@ -25,13 +24,13 @@ set(_GPerfTools_COMPONENT_OPTIONS #------------------------------------------------------------------------------# -IF("${GPerfTools_FIND_COMPONENTS}" STREQUAL "") - IF("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - LIST(APPEND GPerfTools_FIND_COMPONENTS profiler tcmalloc_debug) - ELSE() - LIST(APPEND GPerfTools_FIND_COMPONENTS tcmalloc_and_profiler) - ENDIF() -ENDIF("${GPerfTools_FIND_COMPONENTS}" STREQUAL "") +if("${GPerfTools_FIND_COMPONENTS}" STREQUAL "") + if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + list(APPEND GPerfTools_FIND_COMPONENTS profiler tcmalloc_debug) + else() + list(APPEND GPerfTools_FIND_COMPONENTS tcmalloc_and_profiler) + endif() +endif() #------------------------------------------------------------------------------# @@ -68,58 +67,56 @@ set(GPerfTools_INCLUDE_DIRS ${GPerfTools_INCLUDE_DIR}) #------------------------------------------------------------------------------# # Find components -FOREACH (_GPerfTools_COMPONENT ${GPerfTools_FIND_COMPONENTS}) - IF(NOT "${_GPerfTools_COMPONENT_OPTIONS}" MATCHES "${_GPerfTools_COMPONENT}") - MESSAGE(WARNING "${_GPerfTools_COMPONENT} is not listed as a real component") - ENDIF() +foreach(_GPerfTools_COMPONENT ${GPerfTools_FIND_COMPONENTS}) + if(NOT "${_GPerfTools_COMPONENT_OPTIONS}" MATCHES "${_GPerfTools_COMPONENT}") + message(WARNING "${_GPerfTools_COMPONENT} is not listed as a real component") + endif() - STRING (TOUPPER ${_GPerfTools_COMPONENT} _GPerfTools_COMPONENT_UPPER) - SET (_GPerfTools_LIBRARY_BASE GPerfTools_${_GPerfTools_COMPONENT_UPPER}_LIBRARY) + string(TOUPPER ${_GPerfTools_COMPONENT} _GPerfTools_COMPONENT_UPPER) + set(_GPerfTools_LIBRARY_BASE GPerfTools_${_GPerfTools_COMPONENT_UPPER}_LIBRARY) - SET (_GPerfTools_LIBRARY_NAME ${_GPerfTools_COMPONENT}) + set(_GPerfTools_LIBRARY_NAME ${_GPerfTools_COMPONENT}) - FIND_LIBRARY (${_GPerfTools_LIBRARY_BASE} + find_library(${_GPerfTools_LIBRARY_BASE} NAMES ${_GPerfTools_LIBRARY_NAME} HINTS ${GPerfTools_ROOT_DIR} PATH_SUFFIXES ${_GPerfTools_POSSIBLE_LIB_SUFFIXES} DOC "MKL ${_GPerfTools_COMPONENT} library") - MARK_AS_ADVANCED (${_GPerfTools_LIBRARY_BASE}) + mark_as_advanced(${_GPerfTools_LIBRARY_BASE}) - SET (GPerfTools_${_GPerfTools_COMPONENT_UPPER}_FOUND TRUE) + set(GPerfTools_${_GPerfTools_COMPONENT_UPPER}_FOUND TRUE) - IF (NOT ${_GPerfTools_LIBRARY_BASE}) + if(NOT ${_GPerfTools_LIBRARY_BASE}) # Component missing: record it for a later report - LIST (APPEND _GPerfTools_MISSING_COMPONENTS ${_GPerfTools_COMPONENT}) - SET (GPerfTools_${_GPerfTools_COMPONENT_UPPER}_FOUND FALSE) - ENDIF (NOT ${_GPerfTools_LIBRARY_BASE}) + list(APPEND _GPerfTools_MISSING_COMPONENTS ${_GPerfTools_COMPONENT}) + set(GPerfTools_${_GPerfTools_COMPONENT_UPPER}_FOUND FALSE) + endif() - SET (GPerfTools_${_GPerfTools_COMPONENT}_FOUND + set(GPerfTools_${_GPerfTools_COMPONENT}_FOUND ${GPerfTools_${_GPerfTools_COMPONENT_UPPER}_FOUND}) - IF (${_GPerfTools_LIBRARY_BASE}) + if(${_GPerfTools_LIBRARY_BASE}) # setup the GPerfTools__LIBRARIES variable - SET (GPerfTools_${_GPerfTools_COMPONENT_UPPER}_LIBRARIES + set(GPerfTools_${_GPerfTools_COMPONENT_UPPER}_LIBRARIES ${${_GPerfTools_LIBRARY_BASE}}) - LIST (APPEND GPerfTools_LIBRARIES ${${_GPerfTools_LIBRARY_BASE}}) - ELSE (${_GPerfTools_LIBRARY_BASE}) - LIST (APPEND _GPerfTools_MISSING_LIBRARIES ${_GPerfTools_LIBRARY_BASE}) - ENDIF (${_GPerfTools_LIBRARY_BASE}) - -ENDFOREACH (_GPerfTools_COMPONENT ${GPerfTools_FIND_COMPONENTS}) + list(APPEND GPerfTools_LIBRARIES ${${_GPerfTools_LIBRARY_BASE}}) + else() + list(APPEND _GPerfTools_MISSING_LIBRARIES ${_GPerfTools_LIBRARY_BASE}) + endif() +endforeach() #----- Missing components -IF (DEFINED _GPerfTools_MISSING_COMPONENTS AND _GPerfTools_CHECK_COMPONENTS) - IF (NOT GPerfTools_FIND_QUIETLY) - MESSAGE (STATUS "One or more MKL components were not found:") +if(DEFINED _GPerfTools_MISSING_COMPONENTS AND _GPerfTools_CHECK_COMPONENTS) + if(NOT GPerfTools_FIND_QUIETLY) + message(STATUS "One or more MKL components were not found:") # Display missing components indented, each on a separate line - FOREACH (_GPerfTools_MISSING_COMPONENT ${_GPerfTools_MISSING_COMPONENTS}) - MESSAGE (STATUS " " ${_GPerfTools_MISSING_COMPONENT}) - ENDFOREACH (_GPerfTools_MISSING_COMPONENT ${_GPerfTools_MISSING_COMPONENTS}) - ENDIF (NOT GPerfTools_FIND_QUIETLY) -ENDIF (DEFINED _GPerfTools_MISSING_COMPONENTS AND _GPerfTools_CHECK_COMPONENTS) - + foreach(_GPerfTools_MISSING_COMPONENT ${_GPerfTools_MISSING_COMPONENTS}) + message(STATUS " " ${_GPerfTools_MISSING_COMPONENT}) + endforeach() + endif() +endif() #------------------------------------------------------------------------------# mark_as_advanced(GPerfTools_INCLUDE_DIR) diff --git a/cmake/Modules/FindTBB.cmake b/cmake/Modules/FindTBB.cmake index c41147c..427eea4 100644 --- a/cmake/Modules/FindTBB.cmake +++ b/cmake/Modules/FindTBB.cmake @@ -1,340 +1,463 @@ -# Module for locating Intel's Threading Building Blocks (TBB). +# - Find ThreadingBuildingBlocks include dirs and libraries +# Use this module by invoking find_package with the form: +# find_package(TBB +# [REQUIRED] # Fail with error if TBB is not found +# ) # +# Once done, this will define # -# Customizable variables: -# TBB_ROOT_DIR -# Specifies TBB's root directory. +# TBB_FOUND - system has TBB +# TBB_INCLUDE_DIRS - the TBB include directories +# TBB_LIBRARIES - TBB libraries to be lined, doesn't include malloc or +# malloc proxy +# TBB::tbb - imported target for the TBB library # -# Read-only variables: -# TBB_FOUND -# Indicates whether the library has been found. +# TBB_VERSION_MAJOR - Major Product Version Number +# TBB_VERSION_MINOR - Minor Product Version Number +# TBB_INTERFACE_VERSION - Engineering Focused Version Number +# TBB_COMPATIBLE_INTERFACE_VERSION - The oldest major interface version +# still supported. This uses the engineering +# focused interface version numbers. # -# TBB_INCLUDE_DIRS -# Specifies TBB's include directory. +# TBB_MALLOC_FOUND - system has TBB malloc library +# TBB_MALLOC_INCLUDE_DIRS - the TBB malloc include directories +# TBB_MALLOC_LIBRARIES - The TBB malloc libraries to be lined +# TBB::malloc - imported target for the TBB malloc library # -# TBB_LIBRARIES -# Specifies TBB libraries that should be passed to target_link_libararies. +# TBB_MALLOC_PROXY_FOUND - system has TBB malloc proxy library +# TBB_MALLOC_PROXY_INCLUDE_DIRS = the TBB malloc proxy include directories +# TBB_MALLOC_PROXY_LIBRARIES - The TBB malloc proxy libraries to be lined +# TBB::malloc_proxy - imported target for the TBB malloc proxy library # -# TBB__LIBRARIES -# Specifies the libraries of a specific . # -# TBB__FOUND -# Indicates whether the specified was found. +# This module reads hints about search locations from variables: +# ENV TBB_ARCH_PLATFORM - for eg. set it to "mic" for Xeon Phi builds +# ENV TBB_ROOT or just TBB_ROOT - root directory of tbb installation +# ENV TBB_BUILD_PREFIX - specifies the build prefix for user built tbb +# libraries. Should be specified with ENV TBB_ROOT +# and optionally... +# ENV TBB_BUILD_DIR - if build directory is different than ${TBB_ROOT}/build # # -# Copyright (c) 2012 Sergiu Dotenco +# Modified by Robert Maynard from the original OGRE source # -# 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: +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- # -# 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 PARTTBBLAR 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. - -INCLUDE (FindPackageHandleStandardArgs) - -#------------------------------------------------------------------------------# -# -# Paths -# -#------------------------------------------------------------------------------# - -IF(CMAKE_VERSION VERSION_GREATER 2.8.7) - SET(_TBB_CHECK_COMPONENTS ON) -ELSE() - SET(_TBB_CHECK_COMPONENTS OFF) -ENDIF() - -FIND_PATH(TBB_ROOT_DIR - NAMES include/tbb/tbb.h - PATHS ENV TBBROOT - ENV TBB40_INSTALL_DIR - ENV TBB30_INSTALL_DIR - ENV TBB22_INSTALL_DIR - ENV TBB21_INSTALL_DIR - ENV TBB_ROOT_DIR - DOC "TBB root directory") - -FIND_PATH(TBB_INCLUDE_DIR - NAMES tbb/tbb.h - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES include - DOC "TBB include directory") - -#------------------------------------------------------------------------------# -# -# Library suffixes -# -#------------------------------------------------------------------------------# - -IF(MSVC11) - SET(_TBB_COMPILER vc11) -ELSEIF(MSVC10) - SET(_TBB_COMPILER vc10) -ELSEIF(MSVC90) - SET(_TBB_COMPILER vc9) -ELSEIF(MSVC80) - SET(_TBB_COMPILER vc8) -ELSEIF(WIN32) - SET(_TBB_COMPILER vc_mt) -ENDIF(MSVC11) - -IF(CMAKE_SIZEOF_VOID_P EQUAL 8) - SET(_TBB_POSSIBLE_LIB_SUFFIXES lib/intel64/${_TBB_COMPILER}) - SET(_TBB_POSSIBLE_BIN_SUFFIXES bin/intel64/${_TBB_COMPILER}) -ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8) - SET(_TBB_POSSIBLE_LIB_SUFFIXES lib/ia32/${_TBB_COMPILER}) - SET(_TBB_POSSIBLE_BIN_SUFFIXES bin/ia32/${_TBB_COMPILER}) -ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) - -LIST(APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/$ENV{TBB_ARCH_PLATFORM}) - -IF(UNIX) - FOREACH(_VERSION 4.7 4.4 4.1) - IF(CMAKE_SIZEOF_VOID_P EQUAL 8) - LIST(APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/intel64/gcc${_VERSION}) - ELSE() - LIST(APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/ia32/gcc${_VERSION}) - ENDIF() - ENDFOREACH() -ENDIF() - -#------------------------------------------------------------------------------# -# -# TBB library +#============================================================================= +# Copyright 2010-2012 Kitware, Inc. +# Copyright 2012 Rolf Eike Beer # -#------------------------------------------------------------------------------# - -FIND_LIBRARY(TBB_LIBRARY_RELEASE - NAMES tbb - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB release library") - -FIND_LIBRARY(TBB_LIBRARY_DEBUG - NAMES tbb_debug - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB debug library") - -IF(TBB_LIBRARY_DEBUG AND "${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - IF(NOT TBB_LIBRARY) - SET(TBB_LIBRARY ${TBB_LIBRARY_DEBUG} CACHE FILEPATH "TBB library" FORCE) - ENDIF(NOT TBB_LIBRARY) - LIST(APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_DEBUG}) -ELSEIF(TBB_LIBRARY_RELEASE) - IF(NOT TBB_LIBRARY) - SET(TBB_LIBRARY ${TBB_LIBRARY_RELEASE} CACHE FILEPATH "TBB library" FORCE) - ENDIF(NOT TBB_LIBRARY) - LIST(APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_RELEASE}) -ENDIF() - - -#------------------------------------------------------------------------------# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. # -# Components -# -#------------------------------------------------------------------------------# - -SET(_TBB_POSSIBLE_COMPONENTS preview malloc malloc_proxy) - -FOREACH(_TBB_COMPONENT ${TBB_FIND_COMPONENTS}) - - STRING(REPLACE "_debug" "" _TBB_COMPONENT ${_TBB_COMPONENT}) - STRING(TOUPPER ${_TBB_COMPONENT} _TBB_COMPONENT_UPPER) - SET(_TBB_LIBRARY_BASE TBB_${_TBB_COMPONENT_UPPER}_LIBRARY) - - IF(${_TBB_COMPONENT} MATCHES "malloc*") - SET(_TBB_LIBRARY_NAME tbb${_TBB_COMPONENT}) - ELSE() - SET(_TBB_LIBRARY_NAME tbb_${_TBB_COMPONENT}) - ENDIF() - - FIND_LIBRARY(${_TBB_LIBRARY_BASE}_RELEASE - NAMES ${_TBB_LIBRARY_NAME} - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB ${_TBB_COMPONENT} release library") - - FIND_LIBRARY(${_TBB_LIBRARY_BASE}_DEBUG - NAMES ${_TBB_LIBRARY_NAME}_debug - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB ${_TBB_COMPONENT} debug library") - - MARK_AS_ADVANCED (${_TBB_LIBRARY_BASE} ${_TBB_LIBRARY_BASE}_DEBUG) - - # default assumption - SET(TBB_${_TBB_COMPONENT_UPPER}_FOUND ON) - SET(TBB_${_TBB_COMPONENT}_FOUND ON) - - IF(${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE) - SET(${_TBB_LIBRARY_BASE} - debug ${${_TBB_LIBRARY_BASE}_DEBUG} - optimized ${${_TBB_LIBRARY_BASE}_RELEASE} CACHE STRING - "TBB ${_TBB_COMPONENT} library") - LIST(APPEND _TBB_ALL_LIBS - optimized ${${_TBB_LIBRARY_BASE}_RELEASE} - debug ${${_TBB_LIBRARY_BASE}_DEBUG}) - LIST(APPEND TBB_FOUND_COMPONENTS ${_TBB_LIBRARY_BASE} ${_TBB_LIBRARY_BASE}_debug) - SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARY ${${_TBB_LIBRARY_BASE}_RELEASE}) - ELSEIF(${_TBB_LIBRARY_BASE}_DEBUG) - SET(${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_DEBUG}) - LIST(APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_DEBUG}) - LIST(APPEND TBB_FOUND_COMPONENTS ${_TBB_LIBRARY_BASE}) - SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARY ${${_TBB_LIBRARY_BASE}_DEBUG}) - ELSEIF(${_TBB_LIBRARY_BASE}_RELEASE) - SET(${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_RELEASE} - CACHE FILEPATH "TBB ${_TBB_COMPONENT} library") - LIST(APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_RELEASE}) - LIST(APPEND TBB_FOUND_COMPONENTS ${_TBB_LIBRARY_BASE}_debug) - SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARY ${${_TBB_LIBRARY_BASE}_RELEASE}) - ELSE() - # Component missing: record it for a later report - LIST(APPEND _TBB_MISSING_COMPONENTS ${_TBB_COMPONENT}) - SET(TBB_${_TBB_COMPONENT}_FOUND OFF) - SET(TBB_${_TBB_COMPONENT_UPPER}_FOUND OFF) - ENDIF() - - IF(${_TBB_LIBRARY_BASE}) - # setup the TBB__LIBRARIES variable - SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARIES ${${_TBB_LIBRARY_BASE}}) - ELSE() - LIST(APPEND _TBB_MISSING_LIBRARIES ${_TBB_LIBRARY_BASE}) - ENDIF() - -ENDFOREACH(_TBB_COMPONENT ${TBB_FIND_COMPONENTS}) - -#------------------------------------------------------------------------------# -# -# Standard variables -# -#------------------------------------------------------------------------------# -IF(_TBB_ALL_LIBS) - SET(TBB_LIBRARIES ${_TBB_ALL_LIBS}) -ENDIF() - -IF(TBB_INCLUDE_DIR) - SET(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR}) -ENDIF() - -IF(DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS) - IF(NOT TBB_FIND_QUIETLY) - MESSAGE(STATUS "One or more TBB components were not found:") - # Display missing components indented, each on a separate line - FOREACH(_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS}) - MESSAGE(STATUS " " ${_TBB_MISSING_COMPONENT}) - ENDFOREACH(_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS}) - ENDIF(NOT TBB_FIND_QUIETLY) -ENDIF(DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS) - -#------------------------------------------------------------------------------# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +#============================================================================= +# FindTBB helper functions and macros # -# Library's version + +# Use TBBConfig.cmake if possible. + +set(_tbb_find_quiet) +if (TBB_FIND_QUIETLY) + set(_tbb_find_quiet QUIET) +endif () +set(_tbb_find_components) +set(_tbb_find_optional_components) +foreach (_tbb_find_component IN LISTS TBB_FIND_COMPONENTS) + if (TBB_FIND_REQUIRED_${_tbb_find_component}) + list(APPEND _tbb_find_components "${_tbb_find_component}") + else () + list(APPEND _tbb_find_optional_components "${_tbb_find_component}") + endif () +endforeach () +unset(_tbb_find_component) +find_package(TBB CONFIG ${_tbb_find_quiet} + COMPONENTS ${_tbb_find_components} + OPTIONAL_COMPONENTS ${_tbb_find_optional_components}) +unset(_tbb_find_quiet) +unset(_tbb_find_components) +unset(_tbb_find_optional_components) +if (TBB_FOUND) + return () +endif () + +#==================================================== +# Fix the library path in case it is a linker script +#==================================================== +function(tbb_extract_real_library library real_library) + if(NOT UNIX OR NOT EXISTS ${library}) + set(${real_library} "${library}" PARENT_SCOPE) + return() + endif() + + #Read in the first 4 bytes and see if they are the ELF magic number + set(_elf_magic "7f454c46") + file(READ ${library} _hex_data OFFSET 0 LIMIT 4 HEX) + if(_hex_data STREQUAL _elf_magic) + #we have opened a elf binary so this is what + #we should link to + set(${real_library} "${library}" PARENT_SCOPE) + return() + endif() + + file(READ ${library} _data OFFSET 0 LIMIT 1024) + if("${_data}" MATCHES "INPUT \\(([^(]+)\\)") + #extract out the .so name from REGEX MATCH command + set(_proper_so_name "${CMAKE_MATCH_1}") + + #construct path to the real .so which is presumed to be in the same directory + #as the input file + get_filename_component(_so_dir "${library}" DIRECTORY) + set(${real_library} "${_so_dir}/${_proper_so_name}" PARENT_SCOPE) + else() + #unable to determine what this library is so just hope everything works + #and pass it unmodified. + set(${real_library} "${library}" PARENT_SCOPE) + endif() +endfunction() + +#=============================================== +# Do the final processing for the package find. +#=============================================== +macro(findpkg_finish PREFIX TARGET_NAME) + if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) + set(${PREFIX}_FOUND TRUE) + set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) + set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) + else () + if (${PREFIX}_FIND_REQUIRED AND NOT ${PREFIX}_FIND_QUIETLY) + message(FATAL_ERROR "Required library ${PREFIX} not found.") + endif () + endif () + + if (NOT TARGET "TBB::${TARGET_NAME}") + if (${PREFIX}_LIBRARY_RELEASE) + tbb_extract_real_library(${${PREFIX}_LIBRARY_RELEASE} real_release) + endif () + if (${PREFIX}_LIBRARY_DEBUG) + tbb_extract_real_library(${${PREFIX}_LIBRARY_DEBUG} real_debug) + endif () + add_library(TBB::${TARGET_NAME} UNKNOWN IMPORTED) + set_target_properties(TBB::${TARGET_NAME} PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${${PREFIX}_INCLUDE_DIR}") + if (${PREFIX}_LIBRARY_DEBUG AND ${PREFIX}_LIBRARY_RELEASE) + set_target_properties(TBB::${TARGET_NAME} PROPERTIES + IMPORTED_LOCATION "${real_release}" + IMPORTED_LOCATION_DEBUG "${real_debug}" + IMPORTED_LOCATION_RELEASE "${real_release}") + elseif (${PREFIX}_LIBRARY_RELEASE) + set_target_properties(TBB::${TARGET_NAME} PROPERTIES + IMPORTED_LOCATION "${real_release}") + elseif (${PREFIX}_LIBRARY_DEBUG) + set_target_properties(TBB::${TARGET_NAME} PROPERTIES + IMPORTED_LOCATION "${real_debug}") + endif () + endif () + + #mark the following variables as internal variables + mark_as_advanced(${PREFIX}_INCLUDE_DIR + ${PREFIX}_LIBRARY + ${PREFIX}_LIBRARY_DEBUG + ${PREFIX}_LIBRARY_RELEASE) +endmacro() + +#=============================================== +# Generate debug names from given release names +#=============================================== +macro(get_debug_names PREFIX) + foreach(i ${${PREFIX}}) + set(${PREFIX}_DEBUG ${${PREFIX}_DEBUG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i}) + endforeach() +endmacro() + +#=============================================== +# See if we have env vars to help us find tbb +#=============================================== +macro(getenv_path VAR) + set(ENV_${VAR} $ENV{${VAR}}) + # replace won't work if var is blank + if (ENV_${VAR}) + string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) + endif () +endmacro() + +#=============================================== +# Couple a set of release AND debug libraries +#=============================================== +macro(make_library_set PREFIX) + if (${PREFIX}_RELEASE AND ${PREFIX}_DEBUG) + set(${PREFIX} optimized ${${PREFIX}_RELEASE} debug ${${PREFIX}_DEBUG}) + elseif (${PREFIX}_RELEASE) + set(${PREFIX} ${${PREFIX}_RELEASE}) + elseif (${PREFIX}_DEBUG) + set(${PREFIX} ${${PREFIX}_DEBUG}) + endif () +endmacro() + + +#============================================================================= +# Now to actually find TBB # -#------------------------------------------------------------------------------# - -SET(_TBB_VERSION_HEADER ${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h) - -IF(EXISTS ${_TBB_VERSION_HEADER}) - FILE(READ ${_TBB_VERSION_HEADER} _TBB_VERSION_CONTENTS) - - STRING(REGEX REPLACE ".*#define TBB_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" - TBB_VERSION_MAJOR "${_TBB_VERSION_CONTENTS}") - STRING(REGEX REPLACE ".*#define TBB_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" - TBB_VERSION_MINOR "${_TBB_VERSION_CONTENTS}") - - SET(TBB_VERSION ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}) - SET(TBB_VERSION_COMPONENTS 2) -ENDIF() - -IF(WIN32) - FIND_PROGRAM(LIB_EXECUTABLE NAMES lib - HINTS - "$ENV{VS110COMNTOOLS}/../../VC/bin" - "$ENV{VS100COMNTOOLS}/../../VC/bin" - "$ENV{VS90COMNTOOLS}/../../VC/bin" - "$ENV{VS71COMNTOOLS}/../../VC/bin" - "$ENV{VS80COMNTOOLS}/../../VC/bin" - DOC "Library manager") - - MARK_AS_ADVANCED (LIB_EXECUTABLE) -ENDIF() - -MACRO(GET_LIB_REQUISITES LIB REQUISITES) - IF(LIB_EXECUTABLE) - GET_FILENAME_COMPONENT(_LIB_PATH ${LIB_EXECUTABLE} PATH) - - IF(MSVC) - # Do not redirect the output - UNSET(ENV{VS_UNICODE_OUTPUT}) - ENDIF() - - EXECUTE_PROCESS(COMMAND ${LIB_EXECUTABLE} /nologo /list ${LIB} - WORKING_DIRECTORY ${_LIB_PATH}/../../Common7/IDE - OUTPUT_VARIABLE _LIB_OUTPUT ERROR_QUIET) - - STRING(REPLACE "\n" ";" "${REQUISITES}" "${_LIB_OUTPUT}") - LIST(REMOVE_DUPLICATES ${REQUISITES}) - ENDIF() -ENDMACRO() - -IF(_TBB_ALL_LIBS) - # collect lib requisites using the lib tool - FOREACH(_TBB_COMPONENT ${_TBB_ALL_LIBS}) - GET_LIB_REQUISITES(${_TBB_COMPONENT} _TBB_REQUISITES) - ENDFOREACH(_TBB_COMPONENT) -ENDIF() - -IF(NOT TBB_BINARY_DIR) - SET(_TBB_UPDATE_BINARY_DIR ON) -ELSE() - SET(_TBB_UPDATE_BINARY_DIR OFF) -ENDIF() - -SET(_TBB_BINARY_DIR_HINTS ${_TBB_POSSIBLE_BIN_SUFFIXES}) - -IF(_TBB_REQUISITES) - FIND_FILE(TBB_BINARY_DIR NAMES ${_TBB_REQUISITES} - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_BINARY_DIR_HINTS} NO_DEFAULT_PATH) -ENDIF() - -IF(TBB_BINARY_DIR AND _TBB_UPDATE_BINARY_DIR) - SET(_TBB_BINARY_DIR ${TBB_BINARY_DIR}) - UNSET(TBB_BINARY_DIR CACHE) - - IF(_TBB_BINARY_DIR) - GET_FILENAME_COMPONENT(TBB_BINARY_DIR ${_TBB_BINARY_DIR} PATH) - ENDIF() -ENDIF() - -SET(TBB_BINARY_DIR ${TBB_BINARY_DIR} CACHE PATH "TBB binary directory") - -MARK_AS_ADVANCED(TBB_INCLUDE_DIR TBB_LIBRARY TBB_LIBRARY_RELEASE - TBB_LIBRARY_DEBUG TBB_BINARY_DIR) - -IF(NOT _TBB_CHECK_COMPONENTS) - SET(_TBB_FPHSA_ADDITIONAL_ARGS HANDLE_COMPONENTS) -ENDIF() - -LIST(APPEND _TBB_FPHSA_ADDITIONAL_ARGS VERSION_VAR TBB_VERSION) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(TBB - REQUIRED_VARS - TBB_ROOT_DIR - TBB_INCLUDE_DIR - TBB_LIBRARY - ${_TBB_MISSING_LIBRARIES} - HANDLE_COMPONENTS - ${_TBB_FPHSA_ADDITIONAL_ARGS}) + +# Get path, convert backslashes as ${ENV_${var}} +getenv_path(TBB_ROOT) + +# initialize search paths +set(TBB_PREFIX_PATH ${TBB_ROOT} ${ENV_TBB_ROOT}) +set(TBB_INC_SEARCH_PATH "") +set(TBB_LIB_SEARCH_PATH "") + + +# If user built from sources +set(TBB_BUILD_PREFIX $ENV{TBB_BUILD_PREFIX}) +if (TBB_BUILD_PREFIX AND ENV_TBB_ROOT) + getenv_path(TBB_BUILD_DIR) + if (NOT ENV_TBB_BUILD_DIR) + set(ENV_TBB_BUILD_DIR ${ENV_TBB_ROOT}/build) + endif () + + # include directory under ${ENV_TBB_ROOT}/include + list(APPEND TBB_LIB_SEARCH_PATH + ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_release + ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_debug) +endif () + + +# For Windows, let's assume that the user might be using the precompiled +# TBB packages from the main website. These use a rather awkward directory +# structure (at least for automatically finding the right files) depending +# on platform and compiler, but we'll do our best to accommodate it. +# Not adding the same effort for the precompiled linux builds, though. Those +# have different versions for CC compiler versions and linux kernels which +# will never adequately match the user's setup, so there is no feasible way +# to detect the "best" version to use. The user will have to manually +# select the right files. (Chances are the distributions are shipping their +# custom version of tbb, anyway, so the problem is probably nonexistent.) +if (WIN32 AND MSVC) + set(COMPILER_PREFIX "vc7.1") + if (MSVC_VERSION EQUAL 1400) + set(COMPILER_PREFIX "vc8") + elseif(MSVC_VERSION EQUAL 1500) + set(COMPILER_PREFIX "vc9") + elseif(MSVC_VERSION EQUAL 1600) + set(COMPILER_PREFIX "vc10") + elseif(MSVC_VERSION EQUAL 1700) + set(COMPILER_PREFIX "vc11") + elseif(MSVC_VERSION EQUAL 1800) + set(COMPILER_PREFIX "vc12") + elseif(MSVC_VERSION GREATER_EQUAL 1900) + set(COMPILER_PREFIX "vc14") + endif () + + # for each prefix path, add ia32/64\${COMPILER_PREFIX}\lib to the lib search path + foreach (dir IN LISTS TBB_PREFIX_PATH) + if (CMAKE_CL_64) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia64/${COMPILER_PREFIX}/lib) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia64/${COMPILER_PREFIX}) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/${COMPILER_PREFIX}/lib) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64/${COMPILER_PREFIX}) + else () + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/${COMPILER_PREFIX}/lib) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32/${COMPILER_PREFIX}) + endif () + endforeach () +endif () + +# For OS X binary distribution, choose libc++ based libraries for Mavericks (10.9) +# and above and AppleClang +if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND + NOT CMAKE_SYSTEM_VERSION VERSION_LESS 13.0) + set (USE_LIBCXX OFF) + cmake_policy(GET CMP0025 POLICY_VAR) + + if (POLICY_VAR STREQUAL "NEW") + if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set (USE_LIBCXX ON) + endif () + else () + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set (USE_LIBCXX ON) + endif () + endif () + + if (USE_LIBCXX) + foreach (dir IN LISTS TBB_PREFIX_PATH) + list (APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/libc++ ${dir}/libc++/lib) + endforeach () + endif () +endif () + +# check compiler ABI +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(COMPILER_PREFIX) + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) + list(APPEND COMPILER_PREFIX "gcc4.8") + endif() + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7) + list(APPEND COMPILER_PREFIX "gcc4.7") + endif() + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4) + list(APPEND COMPILER_PREFIX "gcc4.4") + endif() + list(APPEND COMPILER_PREFIX "gcc4.1") +elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(COMPILER_PREFIX) + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) # Complete guess + list(APPEND COMPILER_PREFIX "gcc4.8") + endif() + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.6) + list(APPEND COMPILER_PREFIX "gcc4.7") + endif() + list(APPEND COMPILER_PREFIX "gcc4.4") +else() # Assume compatibility with 4.4 for other compilers + list(APPEND COMPILER_PREFIX "gcc4.4") +endif () + +# if platform architecture is explicitly specified +set(TBB_ARCH_PLATFORM $ENV{TBB_ARCH_PLATFORM}) +if (TBB_ARCH_PLATFORM) + foreach (dir IN LISTS TBB_PREFIX_PATH) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/${TBB_ARCH_PLATFORM}/lib) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/${TBB_ARCH_PLATFORM}) + endforeach () +endif () + +foreach (dir IN LISTS TBB_PREFIX_PATH) + foreach (prefix IN LISTS COMPILER_PREFIX) + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64/${prefix}) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/lib) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/${prefix}/lib) + else () + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32/${prefix}) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/lib) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/${prefix}/lib) + endif () + endforeach() +endforeach () + +# add general search paths +foreach (dir IN LISTS TBB_PREFIX_PATH) + list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib ${dir}/Lib ${dir}/lib/tbb + ${dir}/Libs) + list(APPEND TBB_INC_SEARCH_PATH ${dir}/include ${dir}/Include + ${dir}/include/tbb) +endforeach () + +set(TBB_LIBRARY_NAMES tbb) +get_debug_names(TBB_LIBRARY_NAMES) + + +find_path(TBB_INCLUDE_DIR + NAMES tbb/tbb.h + PATHS ${TBB_INC_SEARCH_PATH}) + +find_library(TBB_LIBRARY_RELEASE + NAMES ${TBB_LIBRARY_NAMES} + PATHS ${TBB_LIB_SEARCH_PATH}) +find_library(TBB_LIBRARY_DEBUG + NAMES ${TBB_LIBRARY_NAMES_DEBUG} + PATHS ${TBB_LIB_SEARCH_PATH}) +make_library_set(TBB_LIBRARY) + +findpkg_finish(TBB tbb) + +#if we haven't found TBB no point on going any further +if (NOT TBB_FOUND) + return() +endif () + +#============================================================================= +# Look for TBB's malloc package +set(TBB_MALLOC_LIBRARY_NAMES tbbmalloc) +get_debug_names(TBB_MALLOC_LIBRARY_NAMES) + +find_path(TBB_MALLOC_INCLUDE_DIR + NAMES tbb/tbb.h + PATHS ${TBB_INC_SEARCH_PATH}) + +find_library(TBB_MALLOC_LIBRARY_RELEASE + NAMES ${TBB_MALLOC_LIBRARY_NAMES} + PATHS ${TBB_LIB_SEARCH_PATH}) +find_library(TBB_MALLOC_LIBRARY_DEBUG + NAMES ${TBB_MALLOC_LIBRARY_NAMES_DEBUG} + PATHS ${TBB_LIB_SEARCH_PATH}) +make_library_set(TBB_MALLOC_LIBRARY) + +findpkg_finish(TBB_MALLOC tbbmalloc) + +#============================================================================= +# Look for TBB's malloc proxy package +set(TBB_MALLOC_PROXY_LIBRARY_NAMES tbbmalloc_proxy) +get_debug_names(TBB_MALLOC_PROXY_LIBRARY_NAMES) + +find_path(TBB_MALLOC_PROXY_INCLUDE_DIR + NAMES tbb/tbbmalloc_proxy.h + PATHS ${TBB_INC_SEARCH_PATH}) + +find_library(TBB_MALLOC_PROXY_LIBRARY_RELEASE + NAMES ${TBB_MALLOC_PROXY_LIBRARY_NAMES} + PATHS ${TBB_LIB_SEARCH_PATH}) +find_library(TBB_MALLOC_PROXY_LIBRARY_DEBUG + NAMES ${TBB_MALLOC_PROXY_LIBRARY_NAMES_DEBUG} + PATHS ${TBB_LIB_SEARCH_PATH}) +make_library_set(TBB_MALLOC_PROXY_LIBRARY) + +findpkg_finish(TBB_MALLOC_PROXY tbbmalloc_proxy) + + +#============================================================================= +#parse all the version numbers from tbb +if(NOT TBB_VERSION) + if (EXISTS "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h") + file(STRINGS + "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h" + TBB_VERSION_CONTENTS + REGEX "VERSION") + else() + #only read the start of the file + file(STRINGS + "${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h" + TBB_VERSION_CONTENTS + REGEX "VERSION") + endif() + + string(REGEX REPLACE + ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" + TBB_VERSION_MAJOR "${TBB_VERSION_CONTENTS}") + + string(REGEX REPLACE + ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" + TBB_VERSION_MINOR "${TBB_VERSION_CONTENTS}") + + string(REGEX REPLACE + ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" + TBB_INTERFACE_VERSION "${TBB_VERSION_CONTENTS}") + + string(REGEX REPLACE + ".*#define TBB_COMPATIBLE_INTERFACE_VERSION ([0-9]+).*" "\\1" + TBB_COMPATIBLE_INTERFACE_VERSION "${TBB_VERSION_CONTENTS}") + + set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}") + +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(TBB + REQUIRED_VARS TBB_INCLUDE_DIR TBB_LIBRARY + VERSION_VAR TBB_VERSION) diff --git a/cmake/Modules/Findittnotify.cmake b/cmake/Modules/Findittnotify.cmake index deba733..0e8d294 100644 --- a/cmake/Modules/Findittnotify.cmake +++ b/cmake/Modules/Findittnotify.cmake @@ -9,7 +9,7 @@ set(_ITTNOTIFY_PATH_HINTS) #------------------------------------------------------------------------------# # function to check for hints in environment -function(_ITTNOTIFY_CHECK_VAR) +function(_ittnotify_check_var) foreach(_VAR ${ARGN}) if(NOT "$ENV{${_VAR}}" STREQUAL "") list(APPEND _HINTS "$ENV{${_VAR}}") diff --git a/cmake/Modules/MacroUtilities.cmake b/cmake/Modules/MacroUtilities.cmake deleted file mode 100644 index d8272a6..0000000 --- a/cmake/Modules/MacroUtilities.cmake +++ /dev/null @@ -1,988 +0,0 @@ -# MacroUtilities - useful macros and functions for generic tasks -# -# CMake Extensions -# ---------------- -# macro set_ifnot( ) -# If variable var is not set, set its value to that provided -# -# function enum_option(