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
291 lines
8.8 KiB
Markdown
291 lines
8.8 KiB
Markdown
# Git Maintenance Chores
|
|
|
|
This is a running log of various chores that may need to be carried out to
|
|
manage the project sources and upstream connections.
|
|
|
|
## Rebase Sub-Projects (happy path)
|
|
|
|
If there are no problematic local patches that conflict with upstream projects,
|
|
then this command is sufficient to fast-forward all submodules to upstream
|
|
heads:
|
|
|
|
```
|
|
./build_tools/fetch_sources.py --remote --no-apply-patches
|
|
# Capture new submodule heads, inspect and ensure things look sound.
|
|
git commit -a -m "Rebase submodules (for conflict prep)"
|
|
```
|
|
|
|
In the above, it is important to capture the submodule heads in a pristine
|
|
state, prior to any patches being applied. We'll squash all of the commits to
|
|
land.
|
|
|
|
Apply patches and validate:
|
|
|
|
```
|
|
./build_tools/fetch_sources.py
|
|
```
|
|
|
|
If that succeeds, create a PR and make sure that the CI passes.
|
|
For the above, the script `build_tools/bump_submodules.py` can be used,
|
|
which is however still under development.
|
|
|
|
### Resolving Conflicts
|
|
|
|
If the above fails, it will most likely be when applying patches and you will
|
|
get a message indicating that the `git am` command failed and left some state
|
|
in a submodule. When this happens, you should clean up by going into the
|
|
submodule, looking around and aborting the command. Then proceed to the
|
|
next section for rebasing with conflicts:
|
|
|
|
```
|
|
git am --abort
|
|
```
|
|
|
|
You can return the source tree to a consistent state by running (without
|
|
arguments):
|
|
|
|
```
|
|
./build_tools/fetch_sources.py --no-apply-patches
|
|
```
|
|
|
|
You will then want to iterate on any failing `git am` command, most likely
|
|
simply deleting patch files that are no longer needed (have been subsumed by
|
|
an upstream patch). Once your `patches/` directory is clean for the new heads,
|
|
do a final `./build_tools/fetch_sources.py`, add all files in a commit and
|
|
create a PR.
|
|
|
|
If modifying patches for a sub-project, you will need to resave its patch
|
|
stream. This can be done with a command like:
|
|
|
|
```
|
|
./build_tools/save_patches.sh origin/master Tensile amd-mainline
|
|
```
|
|
|
|
The first argument is the sub-project ToT commit, prior to any local patches.
|
|
The second is the submodule name (not path). The third is the sub-directory
|
|
within `patches/` that contains the project patches. The first argument is
|
|
project specific, unfortunately and can be found by looking at `git log` for
|
|
the base branch/tag (for using a symbolic tag).
|
|
|
|
The base ref can also be obtained by looking at `git submodule status`, assuming
|
|
that a commit has been made for the submodule in a pristine state. Example:
|
|
|
|
```
|
|
b91661c88a0fd7f5848a60212839bfc2496ff932 math-libs/BLAS/Tensile (v2.2.3-4910-gb91661c8)
|
|
```
|
|
|
|
In this case, the commit `b91661c88a0fd7f5848a60212839bfc2496ff932` should be
|
|
the base ref. It is best to look at `git log` to verify, as it is quite
|
|
easy to get into an inconsistent state, and it is hard to spot errors in
|
|
commit hashes.
|
|
|
|
## Switching a submodule branch
|
|
|
|
### For submodules with no patches
|
|
|
|
Using the HIP submodule as an example:
|
|
|
|
1. Edit [`.gitmodules`](/.gitmodules) to switch the branch:
|
|
|
|
```diff
|
|
[submodule "HIP"]
|
|
path = core/HIP
|
|
url = https://github.com/ROCm/HIP.git
|
|
- branch = amd-mainline
|
|
+ branch = amd-staging
|
|
```
|
|
|
|
1. Change the submodule commit:
|
|
|
|
```bash
|
|
pushd core/HIP
|
|
git fetch origin amd-staging
|
|
git checkout amd-staging
|
|
git pull
|
|
popd
|
|
```
|
|
|
|
1. Commit those changes:
|
|
|
|
```bash
|
|
git add .gitmodules
|
|
git add core/HIP
|
|
# ...
|
|
```
|
|
|
|
1. Check that `fetch_sources.py` runs successfully:
|
|
|
|
```bash
|
|
python ./build_tools/fetch_sources.py
|
|
```
|
|
|
|
### For submodules with patches
|
|
|
|
These steps are similar to
|
|
[Rebase Sub-Projects](#rebase-sub-projects-happy-path).
|
|
|
|
Using the CLR submodule as an example:
|
|
|
|
1. Edit [`.gitmodules`](/.gitmodules) to switch the branch:
|
|
|
|
```diff
|
|
[submodule "clr"]
|
|
path = core/clr
|
|
url = https://github.com/ROCm/clr.git
|
|
- branch = amd-mainline
|
|
+ branch = amd-staging
|
|
```
|
|
|
|
1. Fetch just that project from the remote with no patches:
|
|
|
|
```bash
|
|
python ./build_tools/fetch_sources.py \
|
|
--remote \
|
|
--no-apply-patches \
|
|
--system-projects clr \
|
|
--no-include-math-libs \
|
|
--no-include-ml-frameworks
|
|
```
|
|
|
|
1. Commit the new submodule head
|
|
|
|
```bash
|
|
git commit -a -m "Rebase submodules (for conflict prep)"
|
|
```
|
|
|
|
1. Apply patches and validate:
|
|
|
|
```bash
|
|
python ./build_tools/fetch_sources.py
|
|
```
|
|
|
|
## Updating a third-party mirror
|
|
|
|
Projects in [`third-party/`](../../third-party/) use sources mirrored to AWS.
|
|
This serves several purposes:
|
|
|
|
- **Supply chain integrity**: pinned, checksummed copies prevent sources
|
|
from changing outside of our control.
|
|
- **Network performance**: dependencies are served over the same network
|
|
optimized for build machine access, so we're not at the mercy of third party
|
|
web servers.
|
|
- **Hermetic builds**: by using a shared code path for all source fetching, we
|
|
can configure the build system to support zero-network-access source builds.
|
|
|
|
Source fetches are declared like so:
|
|
|
|
```cmake
|
|
therock_subproject_fetch(therock-msgpack-cxx-sources
|
|
CMAKE_PROJECT
|
|
# Originally mirrored from: https://github.com/msgpack/msgpack-c/releases/download/cpp-7.0.0/msgpack-cxx-7.0.0.tar.gz
|
|
URL https://rocm-third-party-deps.s3.us-east-2.amazonaws.com/msgpack-cxx-7.0.0.tar.gz
|
|
URL_HASH SHA256=7504b7af7e7b9002ce529d4f941e1b7fb1fb435768780ce7da4abaac79bb156f
|
|
)
|
|
```
|
|
|
|
To update one of these dependencies:
|
|
|
|
1. Find the version you want to update to, e.g. by choosing the latest release
|
|
from a page like https://github.com/msgpack/msgpack-c/releases
|
|
|
|
1. Download the source archive, either uploaded as an asset to the release (like
|
|
`https://github.com/msgpack/msgpack-c/releases/download/cpp-7.0.0/msgpack-cxx-7.0.0.tar.gz`)
|
|
or generated from the repository at a tagged commit (like
|
|
`https://github.com/Dobiasd/frugally-deep/archive/refs/tags/v0.15.31.tar.gz`).
|
|
|
|
1. Compute the SHA256 checksum of the file.
|
|
|
|
- On Linux, you can run `sha256sum [NAME NAME]`
|
|
- On Windows, you can run `Get-FileHash [FILE NAME]` from powershell
|
|
|
|
1. Sign in to AWS and upload the file to
|
|
https://us-east-2.console.aws.amazon.com/s3/buckets/rocm-third-party-deps
|
|
|
|
1. Update the comment, URL, and URL_HASH in the CMakeLists.txt file
|
|
|
|
1. Test the build and make any necessary changes to CMake project configuration
|
|
|
|
## Adding a new submodule
|
|
|
|
Submodules are tracked in `.gitmodules` and are managed by
|
|
[`fetch_sources.py`](../../build_tools/fetch_sources.py). See
|
|
https://git-scm.com/docs/git-submodule for general instructions.
|
|
|
|
To add a new submodule, using https://github.com/ROCm/rocRoller as an example:
|
|
|
|
1. Add the submodule using git, specifying options for the name, branch, and
|
|
path:
|
|
|
|
```bash
|
|
git submodule add \
|
|
--name rocRoller \
|
|
-b main \
|
|
https://github.com/ROCm/rocRoller.git \
|
|
math-libs/BLAS/rocRoller
|
|
```
|
|
|
|
This should add a few lines to [`.gitmodules`](../../.gitmodules). Check that
|
|
the new lines there are similar to the existing lines in the file:
|
|
|
|
```diff
|
|
$ git diff --staged
|
|
diff --git a/.gitmodules b/.gitmodules
|
|
index 9b4d996..e5a5ec9 100644
|
|
--- a/.gitmodules
|
|
+++ b/.gitmodules
|
|
@@ -140,3 +140,6 @@
|
|
path = ml-libs/composable_kernel
|
|
url = https://github.com/ROCm/composable_kernel.git
|
|
branch = develop
|
|
+[submodule "rocRoller"]
|
|
+ path = math-libs/BLAS/rocRoller
|
|
+ url = https://github.com/ROCm/rocRoller.git
|
|
+ branch = main
|
|
```
|
|
|
|
1. Edit [`fetch_sources.py`](../../build_tools/fetch_sources.py), adding the
|
|
submodule name to one of the project lists and adding any special handling
|
|
(e.g. disabling on Windows) as needed:
|
|
|
|
```diff
|
|
diff --git a/build_tools/fetch_sources.py b/build_tools/fetch_sources.py
|
|
index 18746f1..ebf534e 100755
|
|
--- a/build_tools/fetch_sources.py
|
|
+++ b/build_tools/fetch_sources.py
|
|
@@ -263,6 +271,7 @@ def main(argv):
|
|
"rocPRIM",
|
|
"rocRAND",
|
|
+ "rocRoller",
|
|
"rocSOLVER",
|
|
"rocSPARSE",
|
|
"rocThrust",
|
|
```
|
|
|
|
1. Run [`fetch_sources.py`](../../build_tools/fetch_sources.py) to initialize
|
|
the submodule:
|
|
|
|
```bash
|
|
python build_tools/fetch_sources.py
|
|
```
|
|
|
|
You should see a `git submodule update --init` call and more in the logs.
|
|
|
|
1. Check that the submodule was checked out:
|
|
|
|
```console
|
|
$ ls math-libs/BLAS/rocRoller
|
|
|
|
client/ docker/ LICENSE.md requirements.txt
|
|
cmake/ docs/ next-cmake/ scripts/
|
|
CMakeLists.txt extern/ patches/ test/
|
|
codeql/ GPUArchitectureGenerator/ pytest.ini valgrind.supp
|
|
CppCheckSuppressions.txt lib/ README.md
|
|
```
|
|
|
|
The submodule should be fully configured now!
|
|
|
|
> [!TIP]
|
|
> Now that the source directory is populated, see
|
|
> [TheRock Build System Manual: Adding Sub-Projects](./build_system.md#adding-sub-projects)
|
|
> to use it from the CMake build system.
|