summaryrefslogtreecommitdiff
path: root/pstl
diff options
context:
space:
mode:
authorLouis Dionne <ldionne@apple.com>2019-08-08 12:43:04 +0000
committerLouis Dionne <ldionne@apple.com>2019-08-08 12:43:04 +0000
commitbf4808439f10d270b34cdb82765b74cecc1be191 (patch)
treef9227919883f59ff8fee5b02ea61aa30be615c30 /pstl
parentbdc022a695e0f09638219e1be6ebcce793cb9d2b (diff)
downloadllvm-bf4808439f10d270b34cdb82765b74cecc1be191.tar.gz
[pstl] Add a __pstl_config_site header to record the CMake configuration
This commit adds a __pstl_config_site header that contains the value of macros specified at CMake configuration time. It works similarly to libc++'s __config_site header, except we always include it as a separate file instead of concatenating it to the main configuration header. It is necessary to thread the includes for that header into libc++'s lit configuration, otherwise we'd be requiring an installation step prior to running the test suite. llvm-svn: 368284
Diffstat (limited to 'pstl')
-rw-r--r--pstl/CMakeLists.txt13
-rw-r--r--pstl/include/__pstl_config_site.in15
-rw-r--r--pstl/include/pstl/internal/pstl_config.h2
3 files changed, 28 insertions, 2 deletions
diff --git a/pstl/CMakeLists.txt b/pstl/CMakeLists.txt
index 24845dfe78e2..dd024c7c2d0d 100644
--- a/pstl/CMakeLists.txt
+++ b/pstl/CMakeLists.txt
@@ -35,19 +35,26 @@ target_compile_features(ParallelSTL INTERFACE cxx_std_17)
if (PARALLELSTL_BACKEND STREQUAL "serial")
message(STATUS "Parallel STL uses the serial backend")
- target_compile_definitions(ParallelSTL INTERFACE -D_PSTL_PAR_BACKEND_SERIAL)
+ set(_PSTL_PAR_BACKEND_SERIAL ON)
elseif (PARALLELSTL_BACKEND STREQUAL "tbb")
find_package(TBB 2018 REQUIRED tbb OPTIONAL_COMPONENTS tbbmalloc)
message(STATUS "Parallel STL uses TBB ${TBB_VERSION} (interface version: ${TBB_INTERFACE_VERSION})")
target_link_libraries(ParallelSTL INTERFACE TBB::tbb)
- target_compile_definitions(ParallelSTL INTERFACE -D_PSTL_PAR_BACKEND_TBB)
+ set(_PSTL_PAR_BACKEND_TBB ON)
else()
message(FATAL_ERROR "Requested unknown Parallel STL backend '${PARALLELSTL_BACKEND}'.")
endif()
+set(PSTL_GENERATED_HEADERS_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated_headers")
+set(PSTL_CONFIG_SITE_PATH "${PSTL_GENERATED_HEADERS_DIR}/__pstl_config_site")
+configure_file("include/__pstl_config_site.in"
+ "${PSTL_CONFIG_SITE_PATH}"
+ @ONLY)
+
target_include_directories(ParallelSTL
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<BUILD_INTERFACE:${PSTL_GENERATED_HEADERS_DIR}>
$<INSTALL_INTERFACE:include>)
###############################################################################
@@ -78,6 +85,8 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake"
DESTINATION lib/cmake/ParallelSTL)
install(DIRECTORY include/
DESTINATION include)
+install(FILES "${PSTL_CONFIG_SITE_PATH}"
+ DESTINATION include)
add_custom_target(install-pstl
COMMAND "${CMAKE_COMMAND}" -P "${PROJECT_BINARY_DIR}/cmake_install.cmake" -DCOMPONENT=ParallelSTL)
diff --git a/pstl/include/__pstl_config_site.in b/pstl/include/__pstl_config_site.in
new file mode 100644
index 000000000000..f92c695bad50
--- /dev/null
+++ b/pstl/include/__pstl_config_site.in
@@ -0,0 +1,15 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __PSTL_CONFIG_SITE
+#define __PSTL_CONFIG_SITE
+
+#cmakedefine _PSTL_PAR_BACKEND_SERIAL
+#cmakedefine _PSTL_PAR_BACKEND_TBB
+
+#endif // __PSTL_CONFIG_SITE
diff --git a/pstl/include/pstl/internal/pstl_config.h b/pstl/include/pstl/internal/pstl_config.h
index ba964912e668..ba0bc148484d 100644
--- a/pstl/include/pstl/internal/pstl_config.h
+++ b/pstl/include/pstl/internal/pstl_config.h
@@ -10,6 +10,8 @@
#ifndef _PSTL_CONFIG_H
#define _PSTL_CONFIG_H
+#include <__pstl_config_site>
+
// The version is XYYZ, where X is major, YY is minor, and Z is patch (i.e. X.YY.Z)
#define _PSTL_VERSION 10000
#define _PSTL_VERSION_MAJOR (_PSTL_VERSION / 1000)