Launching a container#

.devcontainer/launch.sh starts a CCCL development container with a chosen CUDA toolkit and host compiler, mounts the repo, and either opens VSCode or drops you into a shell. It is Linux-only (including WSL2). With no toolchain flags, it uses the default devcontainer in .devcontainer/devcontainer.json, which uses the latest CTK + gcc.

Launch in VSCode#

Open the default container. Run the script with no flags.

.devcontainer/launch.sh

The script copies the selected devcontainer.json into a temporary directory and opens VSCode against it.

Select a toolchain. Pass --cuda and --host to open a specific variant.

.devcontainer/launch.sh --cuda <cuda-version> --host <host-compiler>

The temporary-directory copy lets you run multiple variants of the same environment side by side, each in its own VSCode window.

Launch directly in Docker#

Drop into a shell. Add --docker to skip VSCode and run a bash shell inside the container.

.devcontainer/launch.sh --docker --cuda <cuda-version> --host <host-compiler>

The container mounts the repo at /home/coder/cccl and removes itself on exit. Any trailing arguments after the flags run as a command instead of an interactive shell.

Specify the toolchain#

--cuda selects the CUDA toolkit version. --host selects the host compiler. The two flags resolve to .devcontainer/cuda<cuda>-<host>/devcontainer.json; an unknown combination exits with an error.

Valid values come from the devcontainers located under .devcontainer/.

Pass through GPUs#

Add host GPUs. Pass --gpus all to expose every host GPU to the container.

.devcontainer/launch.sh --docker --cuda <cuda-version> --host <host-compiler> --gpus all

--gpus takes any Docker GPU request string. It overrides the hostRequirements.gpu default read from the devcontainer config. Without it, the container starts without GPU access, which is sufficient for building tests.

Launch from a git worktree#

launch.sh handles linked worktrees automatically. A worktree’s .git is a file pointing at the main repository’s git directory, which the container cannot reach through the worktree mount alone. The script bind-mounts the main repo’s git common directory at its host path so git operations resolve inside the container.

The cccl-build and cccl-wheelhouse Docker volumes are shared across all worktrees and the main checkout, so build artifacts collide between them. Do not run multiple worktree containers concurrently unless you are careful to avoid conflicts.

First-time git auth in a worktree needs the main checkout’s .config/gh. If the main checkout has never run its container, launch.sh warns that startup will block on an interactive gh auth login. Launch the main checkout’s container once, complete the login, then re-launch the worktree.

Forward SSH keys#

If SSH_AUTH_SOCK is set in your environment, launch.sh forwards the agent socket into the container automatically. No flag is required. Git operations over SSH inside the container use your host agent’s keys.