annotate pstl/CMakeLists.txt @ 167:e037d1dd7369

...
author anatofuz
date Tue, 24 Mar 2020 17:35:46 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 #===-- CMakeLists.txt ----------------------------------------------------===##
anatofuz
parents:
diff changeset
2 #
anatofuz
parents:
diff changeset
3 # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 # See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 #
anatofuz
parents:
diff changeset
7 #===----------------------------------------------------------------------===##
anatofuz
parents:
diff changeset
8 cmake_minimum_required(VERSION 3.4.3)
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 set(PARALLELSTL_VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/include/pstl/internal/pstl_config.h")
anatofuz
parents:
diff changeset
11 file(STRINGS "${PARALLELSTL_VERSION_FILE}" PARALLELSTL_VERSION_SOURCE REGEX "#define _PSTL_VERSION .*$")
anatofuz
parents:
diff changeset
12 string(REGEX REPLACE "#define _PSTL_VERSION (.*)$" "\\1" PARALLELSTL_VERSION_SOURCE "${PARALLELSTL_VERSION_SOURCE}")
anatofuz
parents:
diff changeset
13 math(EXPR VERSION_MAJOR "(${PARALLELSTL_VERSION_SOURCE} / 1000)")
anatofuz
parents:
diff changeset
14 math(EXPR VERSION_MINOR "((${PARALLELSTL_VERSION_SOURCE} % 1000) / 10)")
anatofuz
parents:
diff changeset
15 math(EXPR VERSION_PATCH "(${PARALLELSTL_VERSION_SOURCE} % 10)")
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 project(ParallelSTL VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} LANGUAGES CXX)
anatofuz
parents:
diff changeset
18
anatofuz
parents:
diff changeset
19 set(PSTL_PARALLEL_BACKEND "serial" CACHE STRING "Threading backend to use. Valid choices are 'serial' and 'tbb'. The default is 'serial'.")
anatofuz
parents:
diff changeset
20 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).")
anatofuz
parents:
diff changeset
21 set(_PSTL_HIDE_FROM_ABI_PER_TU ${PSTL_HIDE_FROM_ABI_PER_TU}) # For __pstl_config_site
anatofuz
parents:
diff changeset
22
anatofuz
parents:
diff changeset
23 if (NOT TBB_DIR)
anatofuz
parents:
diff changeset
24 get_filename_component(PSTL_DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
anatofuz
parents:
diff changeset
25 string(REPLACE pstl tbb TBB_DIR_NAME ${PSTL_DIR_NAME})
anatofuz
parents:
diff changeset
26 if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../${TBB_DIR_NAME}/cmake")
anatofuz
parents:
diff changeset
27 get_filename_component(TBB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${TBB_DIR_NAME}/cmake" ABSOLUTE)
anatofuz
parents:
diff changeset
28 endif()
anatofuz
parents:
diff changeset
29 endif()
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 ###############################################################################
anatofuz
parents:
diff changeset
32 # Setup the ParallelSTL library target
anatofuz
parents:
diff changeset
33 ###############################################################################
anatofuz
parents:
diff changeset
34 add_library(ParallelSTL INTERFACE)
anatofuz
parents:
diff changeset
35 add_library(pstl::ParallelSTL ALIAS ParallelSTL)
anatofuz
parents:
diff changeset
36 target_compile_features(ParallelSTL INTERFACE cxx_std_17)
anatofuz
parents:
diff changeset
37
anatofuz
parents:
diff changeset
38 if (PSTL_PARALLEL_BACKEND STREQUAL "serial")
anatofuz
parents:
diff changeset
39 message(STATUS "Parallel STL uses the serial backend")
anatofuz
parents:
diff changeset
40 set(_PSTL_PAR_BACKEND_SERIAL ON)
anatofuz
parents:
diff changeset
41 elseif (PSTL_PARALLEL_BACKEND STREQUAL "tbb")
anatofuz
parents:
diff changeset
42 find_package(TBB 2018 REQUIRED tbb OPTIONAL_COMPONENTS tbbmalloc)
anatofuz
parents:
diff changeset
43 message(STATUS "Parallel STL uses TBB ${TBB_VERSION} (interface version: ${TBB_INTERFACE_VERSION})")
anatofuz
parents:
diff changeset
44 target_link_libraries(ParallelSTL INTERFACE TBB::tbb)
anatofuz
parents:
diff changeset
45 set(_PSTL_PAR_BACKEND_TBB ON)
anatofuz
parents:
diff changeset
46 else()
anatofuz
parents:
diff changeset
47 message(FATAL_ERROR "Requested unknown Parallel STL backend '${PSTL_PARALLEL_BACKEND}'.")
anatofuz
parents:
diff changeset
48 endif()
anatofuz
parents:
diff changeset
49
anatofuz
parents:
diff changeset
50 set(PSTL_GENERATED_HEADERS_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated_headers")
anatofuz
parents:
diff changeset
51 set(PSTL_CONFIG_SITE_PATH "${PSTL_GENERATED_HEADERS_DIR}/__pstl_config_site")
anatofuz
parents:
diff changeset
52 configure_file("include/__pstl_config_site.in"
anatofuz
parents:
diff changeset
53 "${PSTL_CONFIG_SITE_PATH}"
anatofuz
parents:
diff changeset
54 @ONLY)
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 target_include_directories(ParallelSTL
anatofuz
parents:
diff changeset
57 INTERFACE
anatofuz
parents:
diff changeset
58 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
anatofuz
parents:
diff changeset
59 $<BUILD_INTERFACE:${PSTL_GENERATED_HEADERS_DIR}>
anatofuz
parents:
diff changeset
60 $<INSTALL_INTERFACE:include>)
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 ###############################################################################
anatofuz
parents:
diff changeset
63 # Setup tests
anatofuz
parents:
diff changeset
64 ###############################################################################
anatofuz
parents:
diff changeset
65 enable_testing()
anatofuz
parents:
diff changeset
66 add_subdirectory(test)
anatofuz
parents:
diff changeset
67
anatofuz
parents:
diff changeset
68 ###############################################################################
anatofuz
parents:
diff changeset
69 # Install the target and the associated CMake files
anatofuz
parents:
diff changeset
70 ###############################################################################
anatofuz
parents:
diff changeset
71 include(CMakePackageConfigHelpers)
anatofuz
parents:
diff changeset
72 write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfigVersion.cmake"
anatofuz
parents:
diff changeset
73 COMPATIBILITY ExactVersion)
anatofuz
parents:
diff changeset
74
anatofuz
parents:
diff changeset
75 configure_file(cmake/ParallelSTLConfig.cmake.in
anatofuz
parents:
diff changeset
76 "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake"
anatofuz
parents:
diff changeset
77 @ONLY)
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 install(TARGETS ParallelSTL
anatofuz
parents:
diff changeset
80 EXPORT ParallelSTLTargets)
anatofuz
parents:
diff changeset
81 install(EXPORT ParallelSTLTargets
anatofuz
parents:
diff changeset
82 FILE ParallelSTLTargets.cmake
anatofuz
parents:
diff changeset
83 NAMESPACE pstl::
anatofuz
parents:
diff changeset
84 DESTINATION lib/cmake/ParallelSTL)
anatofuz
parents:
diff changeset
85 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake"
anatofuz
parents:
diff changeset
86 "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfigVersion.cmake"
anatofuz
parents:
diff changeset
87 DESTINATION lib/cmake/ParallelSTL)
anatofuz
parents:
diff changeset
88 install(DIRECTORY include/
anatofuz
parents:
diff changeset
89 DESTINATION include)
anatofuz
parents:
diff changeset
90 install(FILES "${PSTL_CONFIG_SITE_PATH}"
anatofuz
parents:
diff changeset
91 DESTINATION include)
anatofuz
parents:
diff changeset
92
anatofuz
parents:
diff changeset
93 add_custom_target(install-pstl
anatofuz
parents:
diff changeset
94 COMMAND "${CMAKE_COMMAND}" -P "${PROJECT_BINARY_DIR}/cmake_install.cmake" -DCOMPONENT=ParallelSTL)