Skip to content

Commit e65da68

Browse files
committed
WIP [skip-vdc][skip-docs][skip-tpt]
1 parent 68b3ecb commit e65da68

28 files changed

+628
-382
lines changed

.gersemirc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ definitions: [
55
"cmake/", # CCCL level utilities
66
"lib/cmake/thrust/", # thrust_create_target and friends
77
# helper-function heavy:
8-
"cub/test/"
8+
"cub/test/",
9+
"thrust/testing/",
910
]
1011
disable_formatting: false
1112
extensions: [".gersemi/ext/builtins.py", ".gersemi/ext/cccl.py", ".gersemi/ext/thirdparty.py"]

c2h/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@ else()
4646
target_compile_definitions(cccl.c2h PRIVATE C2H_HAS_CURAND=0)
4747
endif()
4848

49-
add_library(cccl.c2h.main OBJECT catch2_runner.cpp catch2_runner_helper.cu)
49+
add_library(cccl.c2h.main STATIC catch2_runner.cpp catch2_runner_helper.cu)
5050
target_link_libraries(cccl.c2h.main PUBLIC cccl.c2h)

ci/matrix.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ workflows:
2121
# args: '--preset libcudacxx --lit-tests "cuda/utility/basic_any.pass.cpp"' }
2222
#
2323
override:
24+
- {jobs: ['test'], project: ['thrust', 'cub'], std: 20, cxx: ['gcc', 'clang', 'msvc'] }
25+
# TODO add coverage for these:
26+
- {jobs: ['test'], project: 'cub', std: 20, cxx: ['gcc', 'clang', 'msvc'], cmake_options: "-DCUB_FORCE_RDC=ON" }
27+
- {jobs: ['test'], project: 'thrust', std: 20, cxx: ['gcc', 'clang', 'msvc'], cmake_options: "-DTHRUST_FORCE_RDC=ON" }
2428

2529
pull_request:
2630
# Old CTK: Oldest/newest supported host compilers:

cmake/CCCLAddExecutable.cmake

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,34 @@ function(cccl_add_executable target_name)
1111
set(oneValueArgs METATARGET_PATH)
1212
set(multiValueArgs SOURCES)
1313
cmake_parse_arguments(
14-
_cccl
14+
self
1515
"${options}"
1616
"${oneValueArgs}"
1717
"${multiValueArgs}"
1818
${ARGN}
1919
)
20+
cccl_parse_arguments_error_checks(
21+
"cccl_add_executable"
22+
"self"
23+
"${options}"
24+
"${oneValueArgs}"
25+
"${multiValueArgs}"
26+
ERROR_UNPARSED
27+
REQUIRED_VALUES SOURCES
28+
DEFAULT_VALUES METATARGET_PATH "${target_name}"
29+
)
2030

21-
if (_cccl_UNPARSED_ARGUMENTS)
22-
message(FATAL_ERROR "Unrecognized arguments: ${_cccl_UNPARSED_ARGUMENTS}")
23-
endif()
24-
25-
if (NOT DEFINED _cccl_SOURCES)
26-
message(FATAL_ERROR "cccl_add_executable requires SOURCES argument")
27-
endif()
28-
29-
add_executable(${target_name} ${_cccl_SOURCES})
31+
add_executable(${target_name} ${self_SOURCES})
3032
cccl_configure_target(${target_name})
3133

32-
if (_cccl_ADD_CTEST)
34+
if (self_ADD_CTEST)
3335
add_test(NAME ${target_name} COMMAND "$<TARGET_FILE:${target_name}>")
3436
endif()
3537

36-
if (NOT _cccl_NO_METATARGETS)
37-
set(metatarget_path ${target_name})
38-
if (DEFINED _cccl_METATARGET_PATH)
39-
set(metatarget_path ${_cccl_METATARGET_PATH})
40-
endif()
41-
cccl_ensure_metatargets(${target_name} METATARGET_PATH ${metatarget_path})
38+
if (NOT self_NO_METATARGETS)
39+
cccl_ensure_metatargets(
40+
${target_name}
41+
METATARGET_PATH ${self_METATARGET_PATH}
42+
)
4243
endif()
4344
endfunction()

cmake/CCCLAddSubdirHelper.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ function(cccl_add_subdir_helper project_name)
1818
"${multiValueArgs}"
1919
${ARGN}
2020
)
21+
cccl_parse_arguments_error_checks(
22+
"cccl_add_subdir_helper"
23+
"CCCL_SUBDIR"
24+
"${options}"
25+
"${oneValueArgs}"
26+
"${multiValueArgs}"
27+
ERROR_UNPARSED
28+
)
2129

2230
if (DEFINED CCCL_SUBDIR_PACKAGE_FILEBASE)
2331
set(package_filebase "${CCCL_SUBDIR_PACKAGE_FILEBASE}")

cmake/CCCLConfigureTarget.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ function(cccl_configure_target target_name)
1313
"${multiValueArgs}"
1414
${ARGN}
1515
)
16+
cccl_parse_arguments_error_checks(
17+
"cccl_configure_target"
18+
"CCT"
19+
"${options}"
20+
"${oneValueArgs}"
21+
"${multiValueArgs}"
22+
ERROR_UNPARSED
23+
)
1624

1725
get_target_property(type ${target_name} TYPE)
1826

cmake/CCCLEnsureMetaTargets.cmake

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ function(cccl_ensure_metatargets target_name)
1616
"${multiValueArgs}"
1717
${ARGN}
1818
)
19-
20-
if (_cccl_UNPARSED_ARGUMENTS)
21-
message(FATAL_ERROR "Unrecognized arguments: ${_cccl_UNPARSED_ARGUMENTS}")
22-
endif()
23-
24-
if (NOT DEFINED _cccl_METATARGET_PATH)
25-
set(_cccl_METATARGET_PATH ${target_name})
26-
endif()
19+
cccl_parse_arguments_error_checks(
20+
"cccl_ensure_metatargets"
21+
"_cccl"
22+
"${options}"
23+
"${oneValueArgs}"
24+
"${multiValueArgs}"
25+
ERROR_UNPARSED
26+
DEFAULT_VALUES METATARGET_PATH "${target_name}"
27+
)
2728

2829
set(parent_path "")
2930
set(current_path "")

cmake/CCCLGenerateHeaderTests.cmake

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
# [PER_HEADER_DEFINES
1010
# DEFINE <definition> <regex> [<regex> ...]
1111
# [DEFINE <definition> <regex> [<regex> ...]] ...]
12+
# [NO_METATARGETS]
13+
# [NO_LINK_CHECK]
1214
# )
1315
#
1416
# Options:
@@ -22,14 +24,15 @@
2224
# HEADERS: An explicit list of headers to include in the header tests.
2325
# PER_HEADER_DEFINES: A list of definitions to add to specific headers. Each definition is followed by one or more regexes that match the headers it should be applied to.
2426
# NO_METATARGETS: If specified, metatargets will not be created for the header test targets.
27+
# NO_LINK_CHECK: If specified, the link check target will not be created.
2528
#
2629
# Notes:
2730
# - The header globs are applied relative to <project_include_path>.
2831
# - If no HEADER_TEMPLATE is provided, a default template will be used.
2932
# - The HEADER_TEMPLATE will be configured for each header, with the following variables:
3033
# - @header@: The path to the target header, relative to <project_include_path>.
3134
function(cccl_generate_header_tests target_name project_include_path)
32-
set(options NO_METATARGETS)
35+
set(options NO_METATARGETS NO_LINK_CHECK)
3336
set(oneValueArgs LANGUAGE HEADER_TEMPLATE)
3437
set(multiValueArgs GLOBS EXCLUDES HEADERS PER_HEADER_DEFINES)
3538
cmake_parse_arguments(
@@ -39,19 +42,16 @@ function(cccl_generate_header_tests target_name project_include_path)
3942
"${multiValueArgs}"
4043
${ARGN}
4144
)
42-
43-
if (CGHT_UNPARSED_ARGUMENTS)
44-
message(FATAL_ERROR "Unrecognized arguments: ${CGHT_UNPARSED_ARGUMENTS}")
45-
endif()
46-
47-
# Setup defaults
48-
if (NOT DEFINED CGHT_LANGUAGE)
49-
set(CGHT_LANGUAGE CUDA)
50-
endif()
51-
52-
if (NOT DEFINED CGHT_HEADER_TEMPLATE)
53-
set(CGHT_HEADER_TEMPLATE "${CCCL_SOURCE_DIR}/cmake/header_test.cu.in")
54-
endif()
45+
cccl_parse_arguments_error_checks(
46+
"cccl_generate_header_tests"
47+
"CGHT"
48+
"${options}"
49+
"${oneValueArgs}"
50+
"${multiValueArgs}"
51+
DEFAULT_VALUES #
52+
LANGUAGE "CUDA"
53+
HEADER_TEMPLATE "${CCCL_SOURCE_DIR}/cmake/header_test.cu.in"
54+
)
5555

5656
# Derived vars:
5757
if (${CGHT_LANGUAGE} STREQUAL "C")
@@ -162,20 +162,22 @@ function(cccl_generate_header_tests target_name project_include_path)
162162
cccl_ensure_metatargets(${target_name})
163163
endif()
164164

165-
# Check that all functions in headers are either template functions or inline:
166-
set(link_target ${target_name}.link_check)
167-
cccl_add_executable(
168-
${link_target}
169-
SOURCES "${CCCL_SOURCE_DIR}/cmake/link_check_main.cpp"
170-
NO_METATARGETS
171-
)
172-
# Linking both ${target_name} and $<TARGET_OBJECTS:${target_name}> forces CMake to
173-
# link the same objects twice. The compiler will complain about duplicate symbols if
174-
# any functions are missing inline markup.
175-
target_link_libraries(
176-
${link_target}
177-
PRIVATE #
178-
${target_name}
179-
$<TARGET_OBJECTS:${target_name}>
180-
)
165+
if (NOT CGHT_NO_LINK_CHECK)
166+
# Check that all functions in headers are either template functions or inline:
167+
set(link_target ${target_name}.link_check)
168+
cccl_add_executable(
169+
${link_target}
170+
SOURCES "${CCCL_SOURCE_DIR}/cmake/link_check_main.${extension}"
171+
NO_METATARGETS
172+
)
173+
# Linking both ${target_name} and $<TARGET_OBJECTS:${target_name}> forces CMake to
174+
# link the same objects twice. The compiler will complain about duplicate symbols if
175+
# any functions are missing inline markup.
176+
target_link_libraries(
177+
${link_target}
178+
PRIVATE #
179+
${target_name}
180+
$<TARGET_OBJECTS:${target_name}>
181+
)
182+
endif()
181183
endfunction()

cmake/CCCLInstallRules.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
include(${CMAKE_CURRENT_LIST_DIR}/CCCLParseArguments.cmake)
2+
13
# Bring in CMAKE_INSTALL_* vars
24
include(GNUInstallDirs)
35

@@ -41,6 +43,14 @@ function(cccl_generate_install_rules project_name enable_rules_by_default)
4143
"${multiValueArgs}"
4244
${ARGN}
4345
)
46+
cccl_parse_arguments_error_checks(
47+
"cccl_generate_install_rules"
48+
"CGIR"
49+
"${options}"
50+
"${oneValueArgs}"
51+
"${multiValueArgs}"
52+
ERROR_UNPARSED
53+
)
4454

4555
string(TOLOWER ${project_name} project_name_lower)
4656
set(project_source_dir "${CCCL_SOURCE_DIR}/${project_name_lower}")

0 commit comments

Comments
 (0)