Sparse-checkout from NVIDIA/cccl main branch to complete cccl_upstream: Added: - python/cuda_cccl/ (226 files) — Python bindings for device-level algorithms Critical for muh toolchain: cuda.compute.reduce_into, scan, radix_sort, etc. Includes 204 .py files with full test coverage for all 27 algorithms - ci/ (163 files) — Build/test infrastructure build_cub.sh, test_cub.sh, build_and_test_targets.sh, matrix.yaml Directly maps to our [INFRA-CI] and [INFRA-BUILD] items - .agent/skills/ (7 files) — NVIDIA's own agent skills for CCCL cccl-style/SKILL.md, cccl-test/SKILL.md, sass-diff/SKILL.md - docs/ (491 files) — Official CCCL documentation CI references, CMake guides, Python compute docs, libcudacxx PTX docs - test/ (12 files) — Top-level integration tests (cuda_smoke, stdpar) - Root configs: .clang-format, .clang-tidy, CONTRIBUTING.md, pyproject.toml - CLAUDE.md symlink → AGENTS.md (NVIDIA's standard) cccl_upstream now mirrors full NVIDIA/cccl structure: Before: 42M (cub + thrust + libcudacxx + cudax + c + examples + benchmarks) After: 53M (+python +ci +docs +.agent +test +configs) This completes the CCCL base needed for: - [muh-bench] items: ci/util/build_and_test_targets.sh for targeted builds - [CCCL-verify] items: python/cuda_cccl/tests/ as reference implementations - [CCCL-test] items: ci/test_cub.sh, ci/test_thrust.sh - Agent workflow: .agent/skills/ for consistent style and test patterns
122 lines
5.3 KiB
Bash
Executable File
122 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Usage: ./update_version.sh [--dry-run] <major> <minor> <patch>
|
|
# Example: ./update_version.sh --dry-run 2 2 1
|
|
|
|
# Run in root cccl/
|
|
cd "$(dirname "${BASH_SOURCE[0]}")/.." || exit
|
|
|
|
DRY_RUN=false
|
|
|
|
while [[ "$#" -gt 0 ]]; do
|
|
case "$1" in
|
|
--dry-run) DRY_RUN=true; ;;
|
|
*) break ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
major="$1"
|
|
minor="$2"
|
|
patch="$3"
|
|
|
|
if [[ -z "$major" ]] || [[ -z "$minor" ]] || [[ -z "$patch" ]]; then
|
|
echo "Usage: $0 [--dry-run] <major> <minor> <patch>"
|
|
exit 1
|
|
fi
|
|
|
|
# Version file paths
|
|
REPO_VERSION_FILE="cccl-version.json"
|
|
DOCS_VERSION_MD_FILE="docs/VERSION.md"
|
|
CCCL_VERSION_FILE="libcudacxx/include/cuda/std/__cccl/version.h"
|
|
THRUST_VERSION_FILE="thrust/thrust/version.h"
|
|
CUB_VERSION_FILE="cub/cub/version.cuh"
|
|
CCCL_CMAKE_VERSION_FILE="lib/cmake/cccl/cccl-config-version.cmake"
|
|
CUB_CMAKE_VERSION_FILE="lib/cmake/cub/cub-config-version.cmake"
|
|
LIBCUDACXX_CMAKE_VERSION_FILE="lib/cmake/libcudacxx/libcudacxx-config-version.cmake"
|
|
THRUST_CMAKE_VERSION_FILE="lib/cmake/thrust/thrust-config-version.cmake"
|
|
CUDAX_CMAKE_VERSION_FILE="lib/cmake/cudax/cudax-config-version.cmake"
|
|
CUDA_CCCL_VERSION_FILE="python/cuda_cccl/cuda/cccl/_version.py"
|
|
|
|
# Calculated version codes
|
|
new_cccl_version=$((major * 1000000 + minor * 1000 + patch)) # MMMmmmppp
|
|
new_thrust_cub_version=$((major * 100000 + minor * 100 + patch)) # MMMmmmpp
|
|
|
|
# Fetch current version from file
|
|
current_cccl_version=$(grep -oP "define CCCL_VERSION \K[0-9]+" "$CCCL_VERSION_FILE")
|
|
|
|
# Fetch the latest tag from git and strip the 'v' prefix if present
|
|
latest_tag=$(git tag --sort=-v:refname | head -n 1 | sed 's/^v//')
|
|
|
|
# Since the tags and versions are numerically comparable, we cast them to integers
|
|
latest_tag_version=$(echo "$latest_tag" | awk -F. '{ printf("%d%03d%03d", $1,$2,$3) }')
|
|
|
|
echo "Running in $(pwd)"
|
|
echo "New MMMmmmppp version: $new_cccl_version"
|
|
echo "New MMMmmmpp version: $new_thrust_cub_version"
|
|
echo "Current CCCL version: $current_cccl_version"
|
|
echo "Latest git tag: $latest_tag"
|
|
|
|
# Check if new version is less than or equal to current or the latest tag
|
|
if (( new_cccl_version < current_cccl_version )) || (( new_cccl_version < latest_tag_version )); then
|
|
echo "Error: New version $new_cccl_version is less than current version $current_cccl_version or latest git tag version $latest_tag_version."
|
|
exit 1
|
|
fi
|
|
|
|
update_file () {
|
|
local file=$1
|
|
local pattern=$2
|
|
local new_value=$3
|
|
if [[ "$DRY_RUN" = true ]]; then
|
|
local temp_file
|
|
temp_file=$(mktemp)
|
|
sed "s/$pattern/$new_value/g" "$file" > "$temp_file"
|
|
diff --color=auto -U 0 "$file" "$temp_file" || true
|
|
rm "$temp_file"
|
|
else
|
|
sed -i "s/$pattern/$new_value/" "$file"
|
|
fi
|
|
}
|
|
|
|
# Update version information in files:
|
|
|
|
update_file "$REPO_VERSION_FILE" " \"full\":.*," " \"full\": \"$major.$minor.$patch\","
|
|
update_file "$REPO_VERSION_FILE" " \"major\":.*" " \"major\": $major,"
|
|
update_file "$REPO_VERSION_FILE" " \"minor\":.*" " \"minor\": $minor,"
|
|
update_file "$REPO_VERSION_FILE" " \"patch\":.*" " \"patch\": $patch"
|
|
|
|
update_file "$DOCS_VERSION_MD_FILE" ".*" "$major.$minor"
|
|
|
|
update_file "$CCCL_VERSION_FILE" "^#define CCCL_VERSION \([0-9]\+\)" "#define CCCL_VERSION $new_cccl_version"
|
|
update_file "$THRUST_VERSION_FILE" "^#define THRUST_VERSION \([0-9]\+\)" "#define THRUST_VERSION $new_thrust_cub_version"
|
|
update_file "$CUB_VERSION_FILE" "^#define CUB_VERSION \([0-9]\+\)" "#define CUB_VERSION $new_thrust_cub_version"
|
|
|
|
update_file "$CUB_CMAKE_VERSION_FILE" "set(CUB_VERSION_MAJOR \([0-9]\+\))" "set(CUB_VERSION_MAJOR $major)"
|
|
update_file "$CUB_CMAKE_VERSION_FILE" "set(CUB_VERSION_MINOR \([0-9]\+\))" "set(CUB_VERSION_MINOR $minor)"
|
|
update_file "$CUB_CMAKE_VERSION_FILE" "set(CUB_VERSION_PATCH \([0-9]\+\))" "set(CUB_VERSION_PATCH $patch)"
|
|
|
|
update_file "$LIBCUDACXX_CMAKE_VERSION_FILE" "set(libcudacxx_VERSION_MAJOR \([0-9]\+\))" "set(libcudacxx_VERSION_MAJOR $major)"
|
|
update_file "$LIBCUDACXX_CMAKE_VERSION_FILE" "set(libcudacxx_VERSION_MINOR \([0-9]\+\))" "set(libcudacxx_VERSION_MINOR $minor)"
|
|
update_file "$LIBCUDACXX_CMAKE_VERSION_FILE" "set(libcudacxx_VERSION_PATCH \([0-9]\+\))" "set(libcudacxx_VERSION_PATCH $patch)"
|
|
|
|
update_file "$THRUST_CMAKE_VERSION_FILE" "set(THRUST_VERSION_MAJOR \([0-9]\+\))" "set(THRUST_VERSION_MAJOR $major)"
|
|
update_file "$THRUST_CMAKE_VERSION_FILE" "set(THRUST_VERSION_MINOR \([0-9]\+\))" "set(THRUST_VERSION_MINOR $minor)"
|
|
update_file "$THRUST_CMAKE_VERSION_FILE" "set(THRUST_VERSION_PATCH \([0-9]\+\))" "set(THRUST_VERSION_PATCH $patch)"
|
|
|
|
update_file "$CCCL_CMAKE_VERSION_FILE" "set(CCCL_VERSION_MAJOR \([0-9]\+\))" "set(CCCL_VERSION_MAJOR $major)"
|
|
update_file "$CCCL_CMAKE_VERSION_FILE" "set(CCCL_VERSION_MINOR \([0-9]\+\))" "set(CCCL_VERSION_MINOR $minor)"
|
|
update_file "$CCCL_CMAKE_VERSION_FILE" "set(CCCL_VERSION_PATCH \([0-9]\+\))" "set(CCCL_VERSION_PATCH $patch)"
|
|
|
|
update_file "$CUDAX_CMAKE_VERSION_FILE" "set(cudax_VERSION_MAJOR \([0-9]\+\))" "set(cudax_VERSION_MAJOR $major)"
|
|
update_file "$CUDAX_CMAKE_VERSION_FILE" "set(cudax_VERSION_MINOR \([0-9]\+\))" "set(cudax_VERSION_MINOR $minor)"
|
|
update_file "$CUDAX_CMAKE_VERSION_FILE" "set(cudax_VERSION_PATCH \([0-9]\+\))" "set(cudax_VERSION_PATCH $patch)"
|
|
|
|
update_file "$CUDA_CCCL_VERSION_FILE" "^__version__ = \"\([0-9.]\+\)\"" "__version__ = \"$major.$minor.$patch\""
|
|
|
|
|
|
if [[ "$DRY_RUN" = true ]]; then
|
|
echo "Dry run completed. No changes made."
|
|
else
|
|
echo "Version updated to $major.$minor.$patch"
|
|
fi
|