88 lines
2.3 KiB
CMake
88 lines
2.3 KiB
CMake
project("libtatum")
|
|
|
|
|
|
#
|
|
#
|
|
#Check for parallel execution framework support
|
|
#
|
|
#
|
|
set(TBB_SUPPORTED FALSE)
|
|
|
|
#Check for Thread Building Blocks support
|
|
find_package(TBB)
|
|
|
|
if (TBB_FOUND)
|
|
set(TBB_SUPPORTED TRUE)
|
|
endif()
|
|
|
|
#
|
|
#
|
|
# Determine parallel execution framework
|
|
#
|
|
#
|
|
set(TATUM_USE_EXECUTION_ENGINE "") #The actual execution engine to use (based on what is available)
|
|
|
|
if (TATUM_EXECUTION_ENGINE STREQUAL "auto")
|
|
#Pick the best supported execution engine
|
|
if (TBB_SUPPORTED)
|
|
set(TATUM_USE_EXECUTION_ENGINE "tbb")
|
|
else()
|
|
set(TATUM_USE_EXECUTION_ENGINE "serial")
|
|
endif()
|
|
else()
|
|
#The user requested a specific execution engine
|
|
if (TATUM_EXECUTION_ENGINE STREQUAL "tbb")
|
|
if (NOT TBB_SUPPORTED)
|
|
message(FATAL_ERROR "Tatum: Requested execution engine '${TATUM_EXECUTION_ENGINE}' not found")
|
|
endif()
|
|
elseif (TATUM_EXECUTION_ENGINE STREQUAL "serial")
|
|
#Pass
|
|
else()
|
|
message(FATAL_ERROR "Tatum: Unrecognized execution engine '${TATUM_EXECUTION_ENGINE}'")
|
|
endif()
|
|
#Set the engine to use (it must be valid or we would have errored out)
|
|
set(TATUM_USE_EXECUTION_ENGINE "${TATUM_EXECUTION_ENGINE}")
|
|
endif()
|
|
|
|
#
|
|
#
|
|
# Build files configuration
|
|
#
|
|
#
|
|
|
|
#Source files for the library
|
|
file(GLOB_RECURSE LIB_TATUM_SOURCES *.cpp)
|
|
file(GLOB_RECURSE LIB_TATUM_HEADERS *.hpp)
|
|
|
|
#Include directories
|
|
set(LIB_TATUM_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
#
|
|
#
|
|
# Define the actual build targets
|
|
#
|
|
#
|
|
|
|
#Define the library
|
|
add_library(libtatum STATIC ${LIB_TATUM_SOURCES} ${LIB_TATUM_HEADERS})
|
|
set_target_properties(libtatum PROPERTIES PREFIX "") #Avoid extra 'lib' prefix
|
|
|
|
#Export library headers
|
|
target_include_directories(libtatum PUBLIC ${LIB_TATUM_INCLUDE_DIRS})
|
|
|
|
#Setup parallel execution
|
|
if (TATUM_USE_EXECUTION_ENGINE STREQUAL "tbb")
|
|
message(STATUS "Tatum: will support parallel execution using '${TATUM_USE_EXECUTION_ENGINE}'")
|
|
|
|
target_compile_definitions(libtatum PUBLIC TATUM_USE_TBB)
|
|
target_link_libraries(libtatum tbb)
|
|
target_link_libraries(libtatum tbbmalloc_proxy) #Use the scalable memory allocator
|
|
|
|
elseif (TATUM_USE_EXECUTION_ENGINE STREQUAL "serial")
|
|
#Nothing to do
|
|
message(STATUS "Tatum: will support only serial execution")
|
|
else()
|
|
message(FATAL_ERROR "Tatum: Unrecognized concrete execution engine '${TATUM_USE_EXECUTION_ENGINE}'")
|
|
endif()
|
|
|