Add script to run clang-tidy over all code

- Add a DEP on the repo that contains the Tricium script to run
  clang-tidy (because for some reason we don't have the "official"
  run-clang-tidy.py, and it's not practical to invoke directly).
- Add a wrapper script that limits clang-tidy to running only on our
  source files.
- Update the instructions and add a bunch of info on how to do things.
- Switch .clang-tidy to a more maintainable format.
  - Disable readability-use-concise-preprocessor-directives because it
    triggers a lot and isn't important.

Example output:

$ tools/run-tricium-clang-tidy.py
usage: run-tricium-clang-tidy.py [-h] --clean | --no-clean [--stdout-only]
                                 outdir (--default | --all | sources ...)
run-tricium-clang-tidy.py: error: the following arguments are required: --clean/--no-clean, outdir

$ tools/run-tricium-clang-tidy.py --help
usage: run-tricium-clang-tidy.py [-h] --clean | --no-clean [--stdout-only]
                                 outdir (--default | --all | sources ...)

Run clang-tidy on Dawn source files and directories.

positional arguments:
  outdir               The build directory, e.g., out/debug
  sources              Specific source files and/or directories to run clang-tidy on.

options:
  -h, --help           show this help message and exit
  --clean, --no-clean  Pass --clean to clean the build before building and running clang-tidy.
                       Pass --no-clean to skip that, and promise there are no leftover no-
                       longer-used generated files from old Dawn revisions.
  --stdout-only        Print the summary to stdout instead of saving the JSON and summary files
                       to disk. Useful when iterating on a specific small directory of files.
  --default            Use default sources (all of our source files).
  --all                Run across all C/C++ files known to ninja (not recommended).

$ tools/run-tricium-clang-tidy.py --no-clean out/d src/utils
...
Full findings JSON saved to clang-tidy-2026-06-30_222318-findings.json
Readable summary saved to clang-tidy-2026-06-30_222318-summary.txt

$ cat clang-tidy-2026-06-30_222318-summary.txt
Command line:
  tools/run-tricium-clang-tidy.py --no-clean out/d src/utils

Files that failed with no associated diagnostics:

Compiler diagnostics (clang-diagnostic-*):

Clang-Tidy diagnostics:
  src/utils/assert.cc:46: do not use inline assembler in safety-critical code [portability-no-assembler]
  src/utils/chromium_test_compat/chromium_test_compat.cc:62: C-style casts are discouraged; use static_cast [modernize-avoid-c-style-cast]
  src/utils/span.h:170: single-argument constructors must be marked explicit to avoid unintentional implicit conversions [cppcoreguidelines-explicit-constructor]
  src/utils/span.h:175: single-argument constructors must be marked explicit to avoid unintentional implicit conversions [cppcoreguidelines-explicit-constructor]
  src/utils/underlying_type.h:62: redundant 'typename' [readability-redundant-typename]
  src/utils/underlying_type.h:67: redundant 'typename' [readability-redundant-typename]

Bug: 501491694
Change-Id: Ieae94b4bf7f68cf613bcbec6c1116a1dcafc02cf
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/314375
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
8 files changed
tree: 6395912542a7e15a637d766c16637bd488a5d320
  1. .github/
  2. .vscode/
  3. agents/
  4. build_overrides/
  5. docs/
  6. generator/
  7. include/
  8. infra/
  9. scripts/
  10. src/
  11. test/
  12. third_party/
  13. tools/
  14. webgpu-cts/
  15. .bazelrc
  16. .bazelversion
  17. .clang-format
  18. .clang-format-ignore
  19. .clang-tidy
  20. .git-blame-ignore-revs
  21. .gitattributes
  22. .gitignore
  23. .gitmodules
  24. .gn
  25. .style.yapf
  26. .vpython3
  27. AUTHORS
  28. BUILD.bazel
  29. BUILD.gn
  30. CMakeLists.txt
  31. CMakeSettings.json
  32. CODE_OF_CONDUCT.md
  33. codereview.settings
  34. CONTRIBUTING.md
  35. CPPLINT.cfg
  36. DEPS
  37. DIR_METADATA
  38. go.mod
  39. go.sum
  40. go_presubmit_support.py
  41. LICENSE
  42. MODULE.bazel
  43. MODULE.bazel.lock
  44. OWNERS
  45. PRESUBMIT.py
  46. PRESUBMIT_test.py
  47. README.chromium
  48. README.md
  49. unsafe_buffers_paths.txt
  50. WATCHLISTS
  51. WORKSPACE.bazel
README.md

Build Status Matrix Space

Dawn, a WebGPU implementation

Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.

Dawn provides several WebGPU building blocks:

  • WebGPU C/C++ headers that applications and other building blocks use.
    • The webgpu.h version that Dawn implements.
    • A C++ wrapper for the webgpu.h.
  • A “native” implementation of WebGPU using platforms' GPU APIs: D3D12, Metal, Vulkan and OpenGL. See per API support for more details.
  • A client-server implementation of WebGPU for applications that are in a sandbox without access to native drivers
  • Tint is a compiler for the WebGPU Shader Language (WGSL) that can be used in standalone to convert shaders from and to WGSL.

Helpful links:

Documentation table of content

Developer documentation:

User documentation: (TODO, figure out what overlaps with the webgpu.h docs)

License

BSD 3-Clause License, please see LICENSE.

Disclaimer

This is not an officially supported Google product.