rapids_cpm_init
Added in version v21.06.00.
Establish the CPM and preset package infrastructure for the project.
rapids_cpm_init( [CUSTOM_DEFAULT_VERSION_FILE <json_default_file_path>]
[OVERRIDE <json_override_file_path>]
[GENERATE_PINNED_VERSIONS]
)
The CPM module will be downloaded based on the state of CPM_SOURCE_CACHE
and
ENV{CPM_SOURCE_CACHE}
. This allows multiple nested projects to share the
same download of CPM. If those variables aren’t set the file will be cached
in the build tree of the calling project
Added in version v24.06.00: `
CUSTOM_DEFAULT_VERSION_FILE
`
This is an advanced option that allows projects to specify a custom default versions.json
file that will
be used instead of the one packaged inside rapids-cmake. Since this allows you to specify a new default
versions.json
it must contain information for all the built-in rapids-cmake packages ( cccl, fmt, rmm, etc )
that are used by your project.
Using a built-in rapids-cmake package without an explicit entry in the custom default version file is undefined behavior.
If multiple calls to rapids_cpm_init
occur with different default version files being used,
each version file will be loaded. If a project is listed in multiple default version files, the first
file values will be used, and all later calls for that packaged will be ignored. This “first to record, wins”
approach is used to match FetchContent
, and allows parent projects to override child
projects.
The provided json file must follow the versions.json
format, which is documented here.
If the variable RAPIDS_CMAKE_CPM_DEFAULT_VERSION_FILE
is specified it will be used
in all calls to rapids_cpm_init
instead of any explicit CUSTOM_DEFAULT_VERSION_FILE file, or
usage of the rapids-cmake default version.json file.
Added in version v21.10.00: OVERRIDE
Allows projects to override the default values for any rapids_cpm_find()
,
rapids_cpm_*, CPM,
and FetchContent()
package. By providing a secondary
file with extra`CPM` preset package information for the project.
If multiple calls to rapids_cpm_init
occur with different OVERRIDE
files being used,
each version file will be loaded. If a project is listed in multiple override files, the first
file values will be used, and all later calls for that packaged will be ignored. This “first to record, wins”
approach is used to match FetchContent
, and allows parent projects to override child
projects.
The provided json file must follow the versions.json format, which is documented here.
If the override file doesn’t specify a value or package entry the default version will be used.
Added in version v24.06.00.
If the variable RAPIDS_CMAKE_CPM_OVERRIDE_VERSION_FILE
is specified it will be used
in all calls to rapids_cpm_init
no matter the arguments. Any existing
rapids_cpm_init(OVERRIDE
files will be ignored, and all other calls will be treated as if this file was specified
as the override.
Added in version v24.04.00: `
GENERATE_PINNED_VERSIONS
`
Generates a json file with all CPM dependencies with pinned version values.
This allows for reproducible builds using the exact same state.
The pinning file will be located at <CMAKE_BINARY_DIR>/rapids-cmake/pinned_versions.json
Added in version v24.06.00.
If the variable RAPIDS_CMAKE_CPM_PINNED_VERSIONS_FILE
exists it will be treated
as if all calls to rapids_cpm_init
are requesting generation of a pinned versions file.
In addition to any existing explicit GENERATE_PINNED_VERSIONS files, the file path contained
in RAPIDS_CMAKE_CPM_PINNED_VERSIONS_FILE
will be used as a destination to
write the pinned versions.json content.
Note
Must be called before any invocation of rapids_cpm_find()
.