diff --git a/CMakeLists.txt b/CMakeLists.txt index 217aa5227..d73518f69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,15 +24,8 @@ if(POLICY CMP0167) endif() ############################################################################## -# - Download and initialize RAPIDS CMake helpers ----------------------------- - -# Fetch rapids-cmake -if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/RAPIDS.cmake) - file(DOWNLOAD https://raw.githubusercontent.com/rapidsai/rapids-cmake/branch-24.02/RAPIDS.cmake - ${CMAKE_CURRENT_BINARY_DIR}/RAPIDS.cmake) -endif() # Initialize rapids-cmake -include(${CMAKE_CURRENT_BINARY_DIR}/RAPIDS.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/RAPIDS.cmake) # utilities for generating export set package metadata include(rapids-export) # utilities for finding packages @@ -41,18 +34,8 @@ include(rapids-find) include(rapids-cmake) # utilities for using CPM include(rapids-cpm) - -############################################################################## # - Project definition ------------------------------------------------------- -# Define the project and set the version and languages -if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/execution.bs) - file(DOWNLOAD "https://raw.githubusercontent.com/cplusplus/sender-receiver/main/execution.bs" - ${CMAKE_CURRENT_BINARY_DIR}/execution.bs) -endif() -file(STRINGS "${CMAKE_CURRENT_BINARY_DIR}/execution.bs" STD_EXECUTION_BS_REVISION_LINE REGEX "Revision: [0-9]+") -string(REGEX REPLACE "Revision: ([0-9]+)" "\\1" STD_EXECUTION_BS_REVISION ${STD_EXECUTION_BS_REVISION_LINE}) - # Determine if STDEXEC is built as a subproject (using add_subdirectory) or if it is the main project. if (NOT DEFINED STDEXEC_MAIN_PROJECT) set(STDEXEC_MAIN_PROJECT OFF) @@ -62,7 +45,7 @@ if (NOT DEFINED STDEXEC_MAIN_PROJECT) endif () endif () -project(STDEXEC VERSION "0.${STD_EXECUTION_BS_REVISION}.0" LANGUAGES CXX) +project(STDEXEC VERSION "0.11.0" LANGUAGES CXX) include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/CompilerHelpers.cmake) diff --git a/cmake/RAPIDS.cmake b/cmake/RAPIDS.cmake new file mode 100644 index 000000000..0e9536d48 --- /dev/null +++ b/cmake/RAPIDS.cmake @@ -0,0 +1,73 @@ +#============================================================================= +# Copyright (c) 2021-2023, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#============================================================================= +# +# This is the preferred entry point for projects using rapids-cmake +# + +# Allow users to control which version is used +if(NOT rapids-cmake-version) + # Define a default version if the user doesn't set one + set(rapids-cmake-version 24.02) +endif() + +# Allow users to control which GitHub repo is fetched +if(NOT rapids-cmake-repo) + # Define a default repo if the user doesn't set one + set(rapids-cmake-repo rapidsai/rapids-cmake) +endif() + +# Allow users to control which branch is fetched +if(NOT rapids-cmake-branch) + # Define a default branch if the user doesn't set one + set(rapids-cmake-branch "branch-${rapids-cmake-version}") +endif() + +# Allow users to control the exact URL passed to FetchContent +if(NOT rapids-cmake-url) + # Construct a default URL if the user doesn't set one + set(rapids-cmake-url "https://github.com/${rapids-cmake-repo}/") + # In order of specificity + if(rapids-cmake-sha) + # An exact git SHA takes precedence over anything + string(APPEND rapids-cmake-url "archive/${rapids-cmake-sha}.zip") + elseif(rapids-cmake-tag) + # Followed by a git tag name + string(APPEND rapids-cmake-url "archive/refs/tags/${rapids-cmake-tag}.zip") + else() + # Or if neither of the above two were defined, use a branch + string(APPEND rapids-cmake-url "archive/refs/heads/${rapids-cmake-branch}.zip") + endif() +endif() + +if(POLICY CMP0135) + cmake_policy(PUSH) + cmake_policy(SET CMP0135 NEW) +endif() +include(FetchContent) +FetchContent_Declare(rapids-cmake URL "${rapids-cmake-url}") +if(POLICY CMP0135) + cmake_policy(POP) +endif() +FetchContent_GetProperties(rapids-cmake) +if(rapids-cmake_POPULATED) + # Something else has already populated rapids-cmake, only thing + # we need to do is setup the CMAKE_MODULE_PATH + if(NOT "${rapids-cmake-dir}" IN_LIST CMAKE_MODULE_PATH) + list(APPEND CMAKE_MODULE_PATH "${rapids-cmake-dir}") + endif() +else() + FetchContent_MakeAvailable(rapids-cmake) +endif() diff --git a/include/stdexec/__detail/__completion_behavior.hpp b/include/stdexec/__detail/__completion_behavior.hpp index c20f6ddd9..6f4bb6b1d 100644 --- a/include/stdexec/__detail/__completion_behavior.hpp +++ b/include/stdexec/__detail/__completion_behavior.hpp @@ -200,7 +200,7 @@ namespace STDEXEC __call_result_t<__get_completion_behavior_t<_Tag>, _Attrs const &, _Env const &...>{}; template - concept __completes_inline = (__completion_behavior_of_v<_Tag, _Attrs, _Env...> + concept __completes_inline = (__completion_behavior_of_v<_Tag, _Attrs, _Env...>.value == __completion_behavior::__inline_completion); template diff --git a/include/stdexec/__detail/__domain.hpp b/include/stdexec/__detail/__domain.hpp index d1f8a056d..40ad74f18 100644 --- a/include/stdexec/__detail/__domain.hpp +++ b/include/stdexec/__detail/__domain.hpp @@ -312,7 +312,7 @@ namespace STDEXEC } template - static constexpr auto __get_domain() noexcept + static constexpr decltype(auto) __get_domain() noexcept { // If __attrs has a completion domain, then return it: if constexpr (__callable<__read_query_t, _Attrs const &, _Env const &...>)