mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-14 15:26:35 +00:00

Update the folder titles for targets in the monorepository that have not seen taken care of for some time. These are the folders that targets are organized in Visual Studio and XCode (`set_property(TARGET <target> PROPERTY FOLDER "<title>")`) when using the respective CMake's IDE generator. * Ensure that every target is in a folder * Use a folder hierarchy with each LLVM subproject as a top-level folder * Use consistent folder names between subprojects * When using target-creating functions from AddLLVM.cmake, automatically deduce the folder. This reduces the number of `set_property`/`set_target_property`, but are still necessary when `add_custom_target`, `add_executable`, `add_library`, etc. are used. A LLVM_SUBPROJECT_TITLE definition is used for that in each subproject's root CMakeLists.txt.
104 lines
4.8 KiB
CMake
104 lines
4.8 KiB
CMake
#===-- CMakeLists.txt ----------------------------------------------------===##
|
|
#
|
|
# 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
|
|
#
|
|
#===----------------------------------------------------------------------===##
|
|
cmake_minimum_required(VERSION 3.20.0)
|
|
set(LLVM_SUBPROJECT_TITLE "Parallel STL")
|
|
|
|
set(PARALLELSTL_VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/include/pstl/internal/pstl_config.h")
|
|
file(STRINGS "${PARALLELSTL_VERSION_FILE}" PARALLELSTL_VERSION_SOURCE REGEX "#define _PSTL_VERSION .*$")
|
|
string(REGEX REPLACE "#define _PSTL_VERSION (.*)$" "\\1" PARALLELSTL_VERSION_SOURCE "${PARALLELSTL_VERSION_SOURCE}")
|
|
math(EXPR VERSION_MAJOR "(${PARALLELSTL_VERSION_SOURCE} / 1000)")
|
|
math(EXPR VERSION_MINOR "((${PARALLELSTL_VERSION_SOURCE} % 1000) / 10)")
|
|
math(EXPR VERSION_PATCH "(${PARALLELSTL_VERSION_SOURCE} % 10)")
|
|
|
|
project(ParallelSTL VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} LANGUAGES CXX)
|
|
|
|
# Must go below project(..)
|
|
include(GNUInstallDirs)
|
|
|
|
set(PSTL_PARALLEL_BACKEND "serial" CACHE STRING "Threading backend to use. Valid choices are 'serial', 'omp', and 'tbb'. The default is 'serial'.")
|
|
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).")
|
|
set(_PSTL_HIDE_FROM_ABI_PER_TU ${PSTL_HIDE_FROM_ABI_PER_TU}) # For __pstl_config_site
|
|
|
|
if (NOT TBB_DIR)
|
|
get_filename_component(PSTL_DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
|
string(REPLACE pstl tbb TBB_DIR_NAME ${PSTL_DIR_NAME})
|
|
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../${TBB_DIR_NAME}/cmake")
|
|
get_filename_component(TBB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${TBB_DIR_NAME}/cmake" ABSOLUTE)
|
|
endif()
|
|
endif()
|
|
|
|
###############################################################################
|
|
# Setup the ParallelSTL library target
|
|
###############################################################################
|
|
add_library(ParallelSTL INTERFACE)
|
|
add_library(pstl::ParallelSTL ALIAS ParallelSTL)
|
|
target_compile_features(ParallelSTL INTERFACE cxx_std_17)
|
|
|
|
if (PSTL_PARALLEL_BACKEND STREQUAL "serial")
|
|
message(STATUS "Parallel STL uses the serial backend")
|
|
set(_PSTL_PAR_BACKEND_SERIAL ON)
|
|
elseif (PSTL_PARALLEL_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)
|
|
set(_PSTL_PAR_BACKEND_TBB ON)
|
|
elseif (PSTL_PARALLEL_BACKEND STREQUAL "omp")
|
|
message(STATUS "Parallel STL uses the omp backend")
|
|
target_compile_options(ParallelSTL INTERFACE "-fopenmp=libomp")
|
|
set(_PSTL_PAR_BACKEND_OPENMP ON)
|
|
else()
|
|
message(FATAL_ERROR "Requested unknown Parallel STL backend '${PSTL_PARALLEL_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>)
|
|
|
|
###############################################################################
|
|
# Setup tests
|
|
###############################################################################
|
|
enable_testing()
|
|
add_subdirectory(test)
|
|
|
|
###############################################################################
|
|
# Install the target and the associated CMake files
|
|
###############################################################################
|
|
include(CMakePackageConfigHelpers)
|
|
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfigVersion.cmake"
|
|
COMPATIBILITY ExactVersion)
|
|
|
|
configure_file(cmake/ParallelSTLConfig.cmake.in
|
|
"${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake"
|
|
@ONLY)
|
|
|
|
install(TARGETS ParallelSTL
|
|
EXPORT ParallelSTLTargets)
|
|
install(EXPORT ParallelSTLTargets
|
|
FILE ParallelSTLTargets.cmake
|
|
NAMESPACE pstl::
|
|
DESTINATION lib/cmake/ParallelSTL)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfigVersion.cmake"
|
|
DESTINATION lib/cmake/ParallelSTL)
|
|
install(DIRECTORY include/
|
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
PATTERN "*.in" EXCLUDE)
|
|
install(FILES "${PSTL_CONFIG_SITE_PATH}"
|
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
|
|
add_custom_target(install-pstl
|
|
COMMAND "${CMAKE_COMMAND}" -P "${PROJECT_BINARY_DIR}/cmake_install.cmake" -DCOMPONENT=ParallelSTL)
|