Generate native Bazel platforms instead of requiring tint_build_is flags

Currently, people who use the Bazel rules for tint and dawn need to
specify os flags like --//src/tint:os=win when running *every*
bazel command. This is not very idiomatic (unlike GN where build flags
are the standard) and Skia has found this cumbersome.

This change replaces those hand-specified flags with the built-in
"platforms" attributes. These automatically get set based on the
target OS (which defaults to the host os). These will be easier
for clients (such as Skia) to use.

This also cleans up bazel labels - for labels defined in the same
file (such as the tint_build_wgsl_writer aliases) they are
prefixed with a colon which is better stylistically.

Turns out the mac rules were broken - you can't put a .mm file
in a cc_library. I've temporarily removed those and plan to
have a follow-on CL that creates objc_library targets that work
with Bazel.

Suggested review order:
 - src/tint/utils/command/BUILD.bazel to see examples where conditions
   involving one platform (windows) are a direct swap and also cases
   where it's a "platforms *except* for these" are handled with a
   more idiomatic structure.
 - All the rest of the BUILD.bazel files to see the changes are
   equivalent
 - build.go and expr.go (probably start with the tests) to see
   the new helper functions
 - tools/src/cmd/gen/build/BUILD.bazel.tmpl which uses the new
   helper functions
 - Anything else

Change-Id: I61ae06a3f56f0f4ade65c43d6813a3448e0ccdcd
Bug: b/256859233
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/324475
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
19 files changed
tree: 4e010aecc3e10796099c9ae453f2580c1ceb23e4
  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.