JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 1 | #===-- CMakeLists.txt ----------------------------------------------------===## |
| 2 | # |
Chandler Carruth | 57b08b0 | 2019-01-19 10:56:40 | [diff] [blame] | 3 | # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | # See https://llvm.org/LICENSE.txt for license information. |
| 5 | # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 6 | # |
| 7 | #===----------------------------------------------------------------------===## |
Louis Dionne | afa1afd | 2020-04-22 15:15:05 | [diff] [blame] | 8 | cmake_minimum_required(VERSION 3.13.4) |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 9 | |
Louis Dionne | 5e334b5 | 2018-12-21 15:59:04 | [diff] [blame] | 10 | set(PARALLELSTL_VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/include/pstl/internal/pstl_config.h") |
Louis Dionne | ab38599 | 2019-04-11 17:08:55 | [diff] [blame] | 11 | file(STRINGS "${PARALLELSTL_VERSION_FILE}" PARALLELSTL_VERSION_SOURCE REGEX "#define _PSTL_VERSION .*$") |
| 12 | string(REGEX REPLACE "#define _PSTL_VERSION (.*)$" "\\1" PARALLELSTL_VERSION_SOURCE "${PARALLELSTL_VERSION_SOURCE}") |
| 13 | math(EXPR VERSION_MAJOR "(${PARALLELSTL_VERSION_SOURCE} / 1000)") |
| 14 | math(EXPR VERSION_MINOR "((${PARALLELSTL_VERSION_SOURCE} % 1000) / 10)") |
| 15 | math(EXPR VERSION_PATCH "(${PARALLELSTL_VERSION_SOURCE} % 10)") |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 16 | |
Louis Dionne | ab38599 | 2019-04-11 17:08:55 | [diff] [blame] | 17 | project(ParallelSTL VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} LANGUAGES CXX) |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 18 | |
John Ericson | df31ff1 | 2022-01-19 06:45:07 | [diff] [blame] | 19 | # Must go below project(..) |
| 20 | include(GNUInstallDirs) |
| 21 | |
Mikhail Dvorskiy | 6069a6a | 2021-10-15 12:36:07 | [diff] [blame] | 22 | set(PSTL_PARALLEL_BACKEND "serial" CACHE STRING "Threading backend to use. Valid choices are 'serial', 'omp', and 'tbb'. The default is 'serial'.") |
Louis Dionne | 1b6d6e5 | 2019-08-13 12:49:00 | [diff] [blame] | 23 | set(PSTL_HIDE_FROM_ABI_PER_TU OFF CACHE BOOL "Whether to constrain ABI-unstable symbols to each translation unit (basically, mark them with C's static keyword).") |
| 24 | set(_PSTL_HIDE_FROM_ABI_PER_TU ${PSTL_HIDE_FROM_ABI_PER_TU}) # For __pstl_config_site |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 25 | |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 26 | if (NOT TBB_DIR) |
| 27 | get_filename_component(PSTL_DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME) |
| 28 | string(REPLACE pstl tbb TBB_DIR_NAME ${PSTL_DIR_NAME}) |
| 29 | if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../${TBB_DIR_NAME}/cmake") |
| 30 | get_filename_component(TBB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${TBB_DIR_NAME}/cmake" ABSOLUTE) |
| 31 | endif() |
| 32 | endif() |
| 33 | |
Louis Dionne | f7433f9 | 2019-04-09 18:35:56 | [diff] [blame] | 34 | ############################################################################### |
| 35 | # Setup the ParallelSTL library target |
| 36 | ############################################################################### |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 37 | add_library(ParallelSTL INTERFACE) |
| 38 | add_library(pstl::ParallelSTL ALIAS ParallelSTL) |
Louis Dionne | 540e18d | 2019-04-03 17:17:40 | [diff] [blame] | 39 | target_compile_features(ParallelSTL INTERFACE cxx_std_17) |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 40 | |
Louis Dionne | 5065e78 | 2019-08-13 11:50:26 | [diff] [blame] | 41 | if (PSTL_PARALLEL_BACKEND STREQUAL "serial") |
Louis Dionne | 65a422c | 2019-04-24 20:12:36 | [diff] [blame] | 42 | message(STATUS "Parallel STL uses the serial backend") |
Louis Dionne | bf48084 | 2019-08-08 12:43:04 | [diff] [blame] | 43 | set(_PSTL_PAR_BACKEND_SERIAL ON) |
Louis Dionne | 5065e78 | 2019-08-13 11:50:26 | [diff] [blame] | 44 | elseif (PSTL_PARALLEL_BACKEND STREQUAL "tbb") |
Louis Dionne | 65a422c | 2019-04-24 20:12:36 | [diff] [blame] | 45 | find_package(TBB 2018 REQUIRED tbb OPTIONAL_COMPONENTS tbbmalloc) |
| 46 | message(STATUS "Parallel STL uses TBB ${TBB_VERSION} (interface version: ${TBB_INTERFACE_VERSION})") |
| 47 | target_link_libraries(ParallelSTL INTERFACE TBB::tbb) |
Louis Dionne | bf48084 | 2019-08-08 12:43:04 | [diff] [blame] | 48 | set(_PSTL_PAR_BACKEND_TBB ON) |
Mikhail Dvorskiy | 6069a6a | 2021-10-15 12:36:07 | [diff] [blame] | 49 | elseif (PSTL_PARALLEL_BACKEND STREQUAL "omp") |
| 50 | message(STATUS "Parallel STL uses the omp backend") |
| 51 | target_compile_options(ParallelSTL INTERFACE "-fopenmp=libomp") |
| 52 | set(_PSTL_PAR_BACKEND_OPENMP ON) |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 53 | else() |
Louis Dionne | 5065e78 | 2019-08-13 11:50:26 | [diff] [blame] | 54 | message(FATAL_ERROR "Requested unknown Parallel STL backend '${PSTL_PARALLEL_BACKEND}'.") |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 55 | endif() |
| 56 | |
Louis Dionne | bf48084 | 2019-08-08 12:43:04 | [diff] [blame] | 57 | set(PSTL_GENERATED_HEADERS_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated_headers") |
| 58 | set(PSTL_CONFIG_SITE_PATH "${PSTL_GENERATED_HEADERS_DIR}/__pstl_config_site") |
| 59 | configure_file("include/__pstl_config_site.in" |
| 60 | "${PSTL_CONFIG_SITE_PATH}" |
| 61 | @ONLY) |
| 62 | |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 63 | target_include_directories(ParallelSTL |
| 64 | INTERFACE |
Louis Dionne | 5e334b5 | 2018-12-21 15:59:04 | [diff] [blame] | 65 | $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
Louis Dionne | bf48084 | 2019-08-08 12:43:04 | [diff] [blame] | 66 | $<BUILD_INTERFACE:${PSTL_GENERATED_HEADERS_DIR}> |
JF Bastien | e637637 | 2018-12-19 17:45:32 | [diff] [blame] | 67 | $<INSTALL_INTERFACE:include>) |
| 68 | |
Louis Dionne | f7433f9 | 2019-04-09 18:35:56 | [diff] [blame] | 69 | ############################################################################### |
| 70 | # Setup tests |
| 71 | ############################################################################### |
Louis Dionne | 5e334b5 | 2018-12-21 15:59:04 | [diff] [blame] | 72 | enable_testing() |
| 73 | add_subdirectory(test) |
Louis Dionne | f7433f9 | 2019-04-09 18:35:56 | [diff] [blame] | 74 | |
| 75 | ############################################################################### |
| 76 | # Install the target and the associated CMake files |
| 77 | ############################################################################### |
| 78 | include(CMakePackageConfigHelpers) |
| 79 | write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfigVersion.cmake" |
| 80 | COMPATIBILITY ExactVersion) |
| 81 | |
| 82 | configure_file(cmake/ParallelSTLConfig.cmake.in |
| 83 | "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake" |
| 84 | @ONLY) |
| 85 | |
| 86 | install(TARGETS ParallelSTL |
| 87 | EXPORT ParallelSTLTargets) |
| 88 | install(EXPORT ParallelSTLTargets |
| 89 | FILE ParallelSTLTargets.cmake |
| 90 | NAMESPACE pstl:: |
| 91 | DESTINATION lib/cmake/ParallelSTL) |
| 92 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake" |
| 93 | "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfigVersion.cmake" |
| 94 | DESTINATION lib/cmake/ParallelSTL) |
Louis Dionne | 762e662 | 2019-08-07 20:29:04 | [diff] [blame] | 95 | install(DIRECTORY include/ |
John Ericson | c90d136 | 2022-01-16 06:07:13 | [diff] [blame] | 96 | DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
Louis Dionne | ef14e52 | 2020-07-08 18:51:30 | [diff] [blame] | 97 | PATTERN "*.in" EXCLUDE) |
Louis Dionne | bf48084 | 2019-08-08 12:43:04 | [diff] [blame] | 98 | install(FILES "${PSTL_CONFIG_SITE_PATH}" |
John Ericson | c90d136 | 2022-01-16 06:07:13 | [diff] [blame] | 99 | DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") |
Louis Dionne | f7433f9 | 2019-04-09 18:35:56 | [diff] [blame] | 100 | |
| 101 | add_custom_target(install-pstl |
| 102 | COMMAND "${CMAKE_COMMAND}" -P "${PROJECT_BINARY_DIR}/cmake_install.cmake" -DCOMPONENT=ParallelSTL) |