CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
227 lines
7.4 KiB
Markdown
227 lines
7.4 KiB
Markdown
# TheRock
|
|
|
|
TheRock is a CMake super-project for building HIP and ROCm from source.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Clone and setup
|
|
git clone https://github.com/ROCm/TheRock.git
|
|
cd TheRock
|
|
python3 -m venv .venv && source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
python3 ./build_tools/fetch_sources.py
|
|
|
|
# Configure (adjust AMDGPU_FAMILIES for your GPU)
|
|
cmake -B build -GNinja -DTHEROCK_AMDGPU_FAMILIES=gfx1100
|
|
|
|
# Build
|
|
ninja -C build
|
|
```
|
|
|
|
See [README.md](README.md) for full setup and [docs/development/development_guide.md](docs/development/development_guide.md) for details.
|
|
|
|
## Development Workflows
|
|
|
|
### Build Directory Layout
|
|
|
|
Each component produces:
|
|
|
|
```
|
|
build/component/
|
|
├── build/ # CMake build tree
|
|
├── stage/ # Install tree (this component only)
|
|
├── dist/ # stage/ + runtime dependencies merged
|
|
└── stamp/ # Incremental build tracking
|
|
```
|
|
|
|
Final unified output: `build/dist/rocm/` - combined ROCm installation.
|
|
|
|
### Component Build Targets
|
|
|
|
Every component exposes these targets (replace `component` with actual name like `hipify`, `clr`, `rocblas`):
|
|
|
|
| Target | Purpose |
|
|
| ------------------------- | --------------------------------------------- |
|
|
| `ninja component` | Full build (configure + build + stage + dist) |
|
|
| `ninja component+build` | Rebuild after source changes |
|
|
| `ninja component+dist` | Update artifacts without full rebuild |
|
|
| `ninja component+expunge` | Clean slate - remove all intermediate files |
|
|
|
|
### Common Development Patterns
|
|
|
|
**Iterate on a single component:**
|
|
|
|
```bash
|
|
# After making changes to component source
|
|
ninja -C build clr+build
|
|
|
|
# Force complete rebuild of one component
|
|
ninja -C build clr+expunge && ninja -C build clr
|
|
```
|
|
|
|
**Build subset of ROCm:**
|
|
|
|
```bash
|
|
cmake -B build -GNinja \
|
|
-DTHEROCK_ENABLE_ALL=OFF \
|
|
-DTHEROCK_ENABLE_HIPIFY=ON \
|
|
-DTHEROCK_AMDGPU_FAMILIES=gfx1100
|
|
|
|
ninja -C build
|
|
```
|
|
|
|
**Test a built component:**
|
|
|
|
```bash
|
|
# Run tests from unified distribution
|
|
LD_LIBRARY_PATH=build/dist/rocm/lib build/dist/rocm/bin/test_rocrand_basic
|
|
|
|
# Or use ctest
|
|
ctest --test-dir build
|
|
```
|
|
|
|
**Faster rebuilds with ccache:**
|
|
|
|
On Linux:
|
|
|
|
```bash
|
|
# Any shell used to build must eval setup_ccache.py to set environment variables.
|
|
eval "$(./build_tools/setup_ccache.py)"
|
|
cmake -B build -GNinja \
|
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
|
-DTHEROCK_AMDGPU_FAMILIES=gfx1100 .
|
|
```
|
|
|
|
On Windows (Command Prompt):
|
|
|
|
```bat
|
|
for /f "delims=" %i in ('python build_tools/setup_ccache.py') do @%i
|
|
cmake -B build -GNinja -DTHEROCK_AMDGPU_FAMILIES=gfx1100 ^
|
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache ^
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache .
|
|
```
|
|
|
|
See [README.md](README.md#ccache-usage-on-windows) for full ccache setup details.
|
|
|
|
**Debug build for specific component:**
|
|
|
|
```bash
|
|
cmake -B build -GNinja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-Drocblas_BUILD_TYPE=RelWithDebInfo \
|
|
-DTHEROCK_AMDGPU_FAMILIES=gfx1100
|
|
```
|
|
|
|
### Top-Level Targets
|
|
|
|
| Target | Purpose |
|
|
| ---------------------- | --------------------------------------------- |
|
|
| `ninja` / `ninja dist` | Build everything, populate `build/dist/rocm/` |
|
|
| `ninja artifacts` | Generate artifact directories and manifests |
|
|
| `ninja archives` | Create `.tar.xz` distribution archives |
|
|
| `ninja expunge` | Remove all build artifacts |
|
|
|
|
### Submodule Management
|
|
|
|
- Components are git submodules - use normal git within each
|
|
- `./build_tools/fetch_sources.py` resets all submodules and reapplies patches (**destructive** - commit first!)
|
|
- Recover lost work: check `git reflog` in affected submodule
|
|
|
|
### IDE Support
|
|
|
|
Generate combined compile_commands.json for IDE support:
|
|
|
|
```bash
|
|
cmake --build build --target therock_merged_compile_commands
|
|
```
|
|
|
|
## Code Quality
|
|
|
|
```bash
|
|
pip install pre-commit
|
|
pre-commit run # staged files
|
|
pre-commit run --all-files # all files
|
|
pre-commit install # auto-run on commit
|
|
```
|
|
|
|
Hooks: Black (Python), clang-format (C++), mdformat (Markdown), actionlint (GitHub Actions).
|
|
|
|
## Style Guidelines
|
|
|
|
See the [docs/development/style_guides/](docs/development/style_guides/)
|
|
directory for each style guide:
|
|
|
|
- [README.md - General principles](docs/development/style_guides/README.md#general-principles)
|
|
- [bash_style_guide.md](docs/development/style_guides/bash_style_guide.md)
|
|
- [cmake_style_guide.md](docs/development/style_guides/cmake_style_guide.md)
|
|
- [github_actions_style_guide.md](docs/development/style_guides/github_actions_style_guide.md)
|
|
- [python_style_guide.md](docs/development/style_guides/python_style_guide.md)
|
|
|
|
**Python:**
|
|
|
|
- Use `pathlib.Path` for filesystem operations
|
|
- Add type hints to function signatures
|
|
- Use `argparse` for CLI with help text
|
|
- Don't assume cwd - use script-relative paths
|
|
|
|
**CMake:**
|
|
|
|
- Dependencies at super-project level ([docs/development/dependencies.md](docs/development/dependencies.md))
|
|
- Build phases: configure → build → stage → dist
|
|
|
|
## Git Workflow
|
|
|
|
**Branches:** `users/<username>/<description>` or `shared/<description>`
|
|
|
|
**PRs:** Target `main`, ensure workflows pass.
|
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
|
|
## PR Quality Skill
|
|
|
|
Composable, ROCm-wide PR-quality agent skills live under [skills/](skills/). When authoring,
|
|
reviewing, or pre-merge-gating a pull request, read and apply the base skill, plus the TheRock
|
|
overlay when the change touches the build:
|
|
|
|
- **Base — [skills/rocm-pr-quality/SKILL.md](skills/rocm-pr-quality/SKILL.md)** (and its
|
|
`reference.md`): the library-agnostic floor. Always read this first.
|
|
- **TheRock overlay — [skills/therock-pr-quality/SKILL.md](skills/therock-pr-quality/SKILL.md)**:
|
|
add this for PRs touching the superbuild, submodules/patches, `artifact-*.toml` /
|
|
`BUILD_TOPOLOGY.toml`, or reusable CI workflows. It extends the base and defers to the canonical
|
|
`docs/development/style_guides/`.
|
|
|
|
Component repositories add their own thin overlays on top (e.g. `hipblaslt-pr-quality` in
|
|
`rocm-libraries`). Overlays may tighten but never weaken the base MUST rules. The skills are
|
|
advisory and never post to GitHub/Jira without explicit human approval.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
base/ # rocm-systems (driver, runtime foundations)
|
|
compiler/ # LLVM/Clang/LLD, device libraries
|
|
core/ # HIP, CLR, ROCr
|
|
math-libs/ # rocBLAS, rocFFT, etc.
|
|
media-libs/ # rocDecode, rocJPEG
|
|
ml-libs/ # MIOpen, composable_kernel
|
|
comm-libs/ # RCCL, rocSHMEM
|
|
storage-libs/ # hipFile
|
|
profiler/ # rocprofiler, roctracer
|
|
build_tools/ # Python build scripts
|
|
cmake/ # CMake infrastructure
|
|
docs/ # Documentation
|
|
```
|
|
|
|
## Key Documentation
|
|
|
|
Reference the below for specialty tasks and deeper analysis, asking questions with subagents in order to avoid polluting context:
|
|
|
|
- [README.md](README.md) - Build setup, feature flags
|
|
- [CONTRIBUTING.md](CONTRIBUTING.md) - Contribution guidelines
|
|
- [docs/development/build_system.md](docs/development/build_system.md) - Build architecture
|
|
- [docs/development/development_guide.md](docs/development/development_guide.md) - Component development
|
|
- [docs/development/dependencies.md](docs/development/dependencies.md) - Dependency management
|
|
|
|
If development patterns become useful for certain development styles, prefer to document the salient details locally in this CLAUDE.md in addition to exhaustive documentation elsewhere.
|