# Locate Intel Threading Building Blocks include paths and libraries # ARBB can be found at http://www.threadingbuildingblocks.org/ # # Copyright by Hannes Hofmann, hannes.hofmann _at_ informatik.uni-erlangen.de # Copyright 2009, Matthias Kretz # # This module requires # ARBB_ARCHITECTURE [ ia32 | intel64 | itanium ] # which architecture to use # ARBB_COMPILER e.g. vc9 or cc3.2.3_libc2.3.2_kernel2.4.21 or cc4.0.1_os10.4.9 # which compiler to use (detected automatically on Windows) # # This module respects # ARBB_INSTALL_DIR or $ENV{ARBB21_INSTALL_DIR} or $ENV{ARBB_INSTALL_DIR} # # This module defines # ARBB_INCLUDE_DIRS, where to find task_scheduler_init.h, etc. # ARBB_LIBRARY_DIRS, where to find libarbb, libarbbmalloc # ARBB_INSTALL_DIR, the base ARBB install directory # ARBB_LIBRARIES, the libraries to link against to use ARBB. # ARBB_DEBUG_LIBRARIES, the libraries to link against to use ARBB with debug symbols. # ARBB_FOUND, If false, don't try to use ARBB. set(_ARBB_DISTRI_INCLUDE_DIR) set(_ARBB_DISTRI_LIB_DIR) if (WIN32) # has intel64/vc8 intel64/vc9 # has ia32/vc7.1 ia32/vc8 ia32/vc9 set(_ARBB_DEFAULT_INSTALL_DIR "C:/Program Files/Intel/ARBB" "C:/Program Files (x86)/Intel/ARBB") set(_ARBB_LIB_NAME "arbb") set(_ARBB_LIB_DEBUG_NAME "arbbd") set(_TBB_LIB_NAME "tbb") set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug") set(_ITT_NOTIFY "ittnotify") set(_ARBB_ARCHITECTURE ${ARBB_ARCHITECTURE}) endif (WIN32) if (UNIX) if (APPLE) # MAC set(_ARBB_DEFAULT_INSTALL_DIR "/Library/Frameworks/Intel_ARBB.framework/Versions") # libs: libarbb.dylib, libarbbmalloc.dylib, *_debug set(_ARBB_LIB_NAME "arbb") set(_ARBB_LIB_DEBUG_NAME "arbbd") set(_TBB_LIB_NAME "tbb") set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug") set(_ITT_NOTIFY "ittnotify") # has only one flavor: ia32/cc4.0.1_os10.4.9 set(_ARBB_COMPILER "cc4.0.1_os10.4.9") set(_ARBB_ARCHITECTURE "ia32") else (APPLE) # LINUX set(_ARBB_DEFAULT_INSTALL_DIR "/opt/intel/arbb") set(_ARBB_DISTRI_INCLUDE_DIR "/usr/include") set(_ARBB_LIB_NAME "arbb") set(_ARBB_LIB_DEBUG_NAME "arbbd") set(_TBB_LIB_NAME "tbb") set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug") set(_ITT_NOTIFY "ittnotify") # has intel64/cc3.2.3_libc2.3.2_kernel2.4.21 intel64/cc3.3.3_libc2.3.3_kernel2.6.5 intel64/cc3.4.3_libc2.3.4_kernel2.6.9 intel64/cc4.1.0_libc2.4_kernel2.6.16.21 # has ia32/* # has itanium/* set(_ARBB_COMPILER ${ARBB_COMPILER}) if(${CMAKE_SIZEOF_VOID_P} STREQUAL "8") set(_ARBB_ARCHITECTURE "intel64") elseif(${CMAKE_SIZEOF_VOID_P} STREQUAL "8") set(_ARBB_ARCHITECTURE "ia32") endif(${CMAKE_SIZEOF_VOID_P} STREQUAL "8") endif (APPLE) endif (UNIX) if (CMAKE_SYSTEM MATCHES "SunOS.*") # SUN # not yet supported # has intel64/cc3.4.3_kernel5.10 # has ia32/* endif (CMAKE_SYSTEM MATCHES "SunOS.*") #-- Clear the public variables set (ARBB_FOUND "NO") set (ARBB_INSTALL_DIR "NO") #-- Find ARBB install dir # first: use CMake variable ARBB_INSTALL_DIR if (ARBB_INSTALL_DIR) set (_ARBB_INSTALL_DIR ${ARBB_INSTALL_DIR}) endif (ARBB_INSTALL_DIR) # second: use environment variable if (NOT _ARBB_INSTALL_DIR) if (NOT "$ENV{ARBBROOT}" STREQUAL "") set (_ARBB_INSTALL_DIR $ENV{ARBBROOT}) endif (NOT "$ENV{ARBBROOT}" STREQUAL "") endif (NOT _ARBB_INSTALL_DIR) # third: try to find path automatically if (NOT _ARBB_INSTALL_DIR) if (_ARBB_DEFAULT_INSTALL_DIR) set (_ARBB_INSTALL_DIR ${_ARBB_DEFAULT_INSTALL_DIR}) endif (_ARBB_DEFAULT_INSTALL_DIR) endif (NOT _ARBB_INSTALL_DIR) # sanity check if (NOT _ARBB_INSTALL_DIR) message ("Warning ARBB_INSTALL_DIR not found.") else (NOT _ARBB_INSTALL_DIR) # finally: set the cached CMake variable ARBB_INSTALL_DIR if (NOT ARBB_INSTALL_DIR) set (ARBB_INSTALL_DIR ${_ARBB_INSTALL_DIR} CACHE PATH "Intel ARBB install directory") mark_as_advanced(ARBB_INSTALL_DIR) endif (NOT ARBB_INSTALL_DIR) #-- A macro to rewrite the paths of the library. This is necessary, because # find_library() always found the intel64/vc9 version of the ARBB libs macro(ARBB_CORRECT_LIB_DIR var_name) # if (NOT "${_ARBB_ARCHITECTURE}" STREQUAL "intel64") string(REPLACE intel64 "${_ARBB_ARCHITECTURE}" ${var_name} ${${var_name}}) # endif (NOT "${_ARBB_ARCHITECTURE}" STREQUAL "intel64") string(REPLACE ia32 "${_ARBB_ARCHITECTURE}" ${var_name} ${${var_name}}) endmacro(ARBB_CORRECT_LIB_DIR var_content) #-- Look for include directory set (ARBB_INC_SEARCH_DIR ${_ARBB_INSTALL_DIR} "${_ARBB_DISTRI_INCLUDE_DIR}") find_path(ARBB_INCLUDE_DIR arbb.hpp PATHS ${ARBB_INC_SEARCH_DIR} ) mark_as_advanced(ARBB_INCLUDE_DIR) #-- Look for libraries #set (_ARBB_LIB_SEARCH_DIR ${_ARBB_INSTALL_DIR}/${_ARBB_ARCHITECTURE}/${_ARBB_COMPILER}/lib) set (ARBB_LIBRARY_DIR "${_ARBB_INSTALL_DIR}/lib/${_ARBB_ARCHITECTURE}" "${_ARBB_DISTRI_LIB_DIR}") find_library(ARBB_LIBRARY ${_ARBB_LIB_NAME} ${ARBB_LIBRARY_DIR} NO_DEFAULT_PATH) find_library( TBB_LIBRARY ${_TBB_LIB_NAME} ${ARBB_LIBRARY_DIR} NO_DEFAULT_PATH) find_library(ITT_NOTIFY_LIBRARY ${_ITT_NOTIFY} ${ARBB_LIBRARY_DIR} NO_DEFAULT_PATH) mark_as_advanced(ARBB_LIBRARY TBB_LIBRARY ITT_NOTIFY_LIBRARY) #-- Look for debug libraries find_library(ARBB_LIBRARY_DEBUG ${_ARBB_LIB_DEBUG_NAME} ${ARBB_LIBRARY_DIR} NO_DEFAULT_PATH) find_library( TBB_LIBRARY_DEBUG ${_TBB_LIB_DEBUG_NAME} ${ARBB_LIBRARY_DIR} NO_DEFAULT_PATH) find_library(ITT_NOTIFY_LIBRARY_DEBUG ${_ITT_NOTIFY} ${ARBB_LIBRARY_DIR} NO_DEFAULT_PATH) mark_as_advanced(ARBB_LIBRARY_DEBUG TBB_LIBRARY_DEBUG ITT_NOTIFY_LIBRARY_DEBUG) if (ARBB_INCLUDE_DIR) if (ARBB_LIBRARY) set (ARBB_FOUND "YES") set (ARBB_RELEASE_LIBRARIES ${ARBB_LIBRARY} ${TBB_LIBRARY} ${ITT_NOTIFY_LIBRARY}) set (ARBB_DEBUG_LIBRARIES ${ARBB_LIBRARY_DEBUG} ${TBB_LIBRARY_DEBUG} ${ITT_NOTIFY_LIBRARY_DEBUG}) set (ARBB_LIBRARIES optimized ${ARBB_LIBRARY} optimized ${TBB_LIBRARY} optimized ${ITT_NOTIFY_LIBRARY_DEBUG} debug ${ARBB_LIBRARY_DEBUG} debug ${TBB_LIBRARY_DEBUG}) set (ARBB_INCLUDE_DIRS ${ARBB_INCLUDE_DIR} CACHE PATH "ARBB include directory" FORCE) set (ARBB_LIBRARY_DIRS ${ARBB_LIBRARY_DIR} CACHE PATH "ARBB library directory" FORCE) mark_as_advanced(ARBB_INCLUDE_DIRS ARBB_LIBRARY_DIRS ARBB_LIBRARIES ARBB_DEBUG_LIBRARIES) message(STATUS "Found Intel ARBB at ${_ARBB_INSTALL_DIR}. Architecture ${_ARBB_ARCHITECTURE} is used.") endif (ARBB_LIBRARY) endif (ARBB_INCLUDE_DIR) if (NOT ARBB_FOUND) message("ERROR: Intel ARBB NOT found!") message(STATUS "Looked for Array Building Blocks in ${_ARBB_INSTALL_DIR}") # do only throw fatal, if this pkg is REQUIRED if (ARBB_FIND_REQUIRED) message(FATAL_ERROR "Could NOT find ARBB library.") endif (ARBB_FIND_REQUIRED) endif (NOT ARBB_FOUND) endif (NOT _ARBB_INSTALL_DIR)