
Bug: 1286289 Change-Id: If466fe205a9ae280e0a25345a77c2f946d08b40c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3543429 Reviewed-by: Nico Weber <thakis@chromium.org> Commit-Queue: Arthur Eubanks <aeubanks@google.com> Cr-Commit-Position: refs/heads/main@{#993851}
107 lines
4.4 KiB
Markdown
107 lines
4.4 KiB
Markdown
# Updating Clang format binaries
|
|
|
|
Instructions on how to update the [clang-format binaries](clang_format.md) that
|
|
come with a checkout of Chromium.
|
|
|
|
## Prerequisites
|
|
|
|
You'll also need permissions to upload to the appropriate google storage
|
|
bucket. Chromium infrastructure team members have this, and others can be
|
|
granted the permission based on need. If you need this permission, mention this
|
|
in the tracking bug.
|
|
|
|
## Fetch and upload prebuilt clang-format binaries from recent clang rolls
|
|
|
|
Recent clang rolls can be found via looking at the history of
|
|
[update.py](https://crsrc.org/c/tools/clang/scripts/update.py). You can also
|
|
use clang-format packages built in recent successful dry run attempts at
|
|
updating clang as mentioned [here](clang_sheriffing.md).
|
|
|
|
The following will, for each supported host architecture,
|
|
|
|
* Fetch the corresponding clang-format package from the specified clang roll
|
|
* Extract and copy the clang-format binary to the proper directory
|
|
* Upload the binary into a publicly accessible google storage bucket, also
|
|
updating the corresponding `.sha1` files in the local checkout of Chrome
|
|
|
|
```shell
|
|
cd $SRC/chromium/src
|
|
|
|
GS_PATH=gs://chromium-browser-clang-staging
|
|
CLANG_REV=llvmorg-15-init-234-g567890abc-2
|
|
|
|
echo Linux
|
|
gsutil cp $GS_PATH/Linux_x64/clang-format-$CLANG_REV.tgz /tmp
|
|
tar xf /tmp/clang-format-$CLANG_REV.tgz -C buildtools/linux64 --strip-component=1 bin/clang-format
|
|
|
|
echo Win
|
|
gsutil cp $GS_PATH/Win/clang-format-$CLANG_REV.tgz /tmp
|
|
tar xf /tmp/clang-format-$CLANG_REV.tgz -C buildtools/win --strip-component=1 bin/clang-format.exe
|
|
|
|
echo 'Mac x64'
|
|
gsutil cp $GS_PATH/Mac/clang-format-$CLANG_REV.tgz /tmp
|
|
tar xf /tmp/clang-format-$CLANG_REV.tgz -C buildtools/mac --strip-component=1 bin/clang-format
|
|
mv buildtools/mac/clang-format buildtools/mac/clang-format.x64
|
|
|
|
echo 'Mac arm64'
|
|
gsutil cp $GS_PATH/Mac_arm64/clang-format-$CLANG_REV.tgz /tmp
|
|
tar xf /tmp/clang-format-$CLANG_REV.tgz -C buildtools/mac --strip-component=1 bin/clang-format
|
|
mv buildtools/mac/clang-format buildtools/mac/clang-format.arm64
|
|
|
|
echo 'Uploading to GCS and creating sha1 files'
|
|
upload_to_google_storage.py --bucket=chromium-clang-format buildtools/linux64/clang-format
|
|
upload_to_google_storage.py --bucket=chromium-clang-format buildtools/win/clang-format.exe
|
|
upload_to_google_storage.py --bucket=chromium-clang-format buildtools/mac/clang-format.x64
|
|
upload_to_google_storage.py --bucket=chromium-clang-format buildtools/mac/clang-format.arm64
|
|
|
|
# Clean up
|
|
rm /tmp/clang-format-$CLANG_REV.tgz
|
|
# These aren't in .gitignore because these mac per-arch paths only exist when updating clang-format.
|
|
# gclient runhooks puts these binaries at buildtools/mac/clang-format.
|
|
rm buildtools/mac/clang-format.x64 buildtools/mac/clang-format.arm64
|
|
```
|
|
|
|
## Check that the new clang-format works as expected
|
|
|
|
Compare the diffs created by running the old and new clang-format versions to
|
|
see if the new version does anything unexpected. Running them on some
|
|
substantial directory like `third_party/blink` or `base` should be sufficient.
|
|
Upload the diffs as two patchsets in a CL for easy inspection of the
|
|
clang-format differences by choosing patchset 1 as the base for the gerrit diff.
|
|
|
|
```shell
|
|
## New gerrit CL with results of old clang-format.
|
|
# use old clang-format
|
|
find base -name '*.cc' -o -name '*.c' -o -name '*.h' -o -name '*.mm' | xargs ./buildtools/linux64/clang-format -i
|
|
git commit -a
|
|
git cl upload
|
|
## New patchset on gerrit CL with results of new clang-format.
|
|
# update to new clang-format
|
|
find base -name '*.cc' -o -name '*.c' -o -name '*.h' -o -name '*.mm' | xargs ./buildtools/linux64/clang-format -i
|
|
git commit -a --amend --no-edit
|
|
git cl upload
|
|
```
|
|
|
|
If there are any unexpected diffs, file a bug upstream (and fix it if you can :)).
|
|
|
|
## Upload a CL according to the following template
|
|
|
|
Update clang-format binaries and scripts for all platforms.
|
|
|
|
I followed these instructions:
|
|
https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang_format_binaries.md
|
|
|
|
The binaries were built at clang revision ####### on ##CRREV##.
|
|
|
|
Diff on base/ from previous revision of clang-format to this version:
|
|
https://crrev.com/c/123123123/1..2
|
|
|
|
Bug: #######
|
|
|
|
The change should **always** include new `.sha1` files for each platform (we
|
|
want to keep these in lockstep), should **never** include `clang-format`
|
|
binaries directly. The change should **always** update `README.chromium`
|
|
|
|
clang-format binaries should weigh in at 1.5MB or less. Watch out for size
|
|
regressions.
|