tint: make FindExecutable look in explicit CWD-prefixed path first

When FindExecutable tests to see if the input executable file exists, it
first checks the input path as-is. If the input path is a relative one,
the existence check will, by definition, look in the cwd implicitly, and
if it exists, returns true, and we return the relative path as-is. This
seems fine, except when the executable is a shared object (.so/.dylib),
where dlopen'ing by relative path may fail if RPATH wasn't set to look
in relative paths. To mitigate this, we explicitly search in an absolute
path made up of the input path prefixed by the CWD. If found, we return
this absolute path, and are able to load the shared object regardless of
RPATH.

Note that I added the same behaviour to command_windows, although it's
not really necessary there, since DLL loading by relative path always
succeeds (there's no RPATH on Windows). However, adding this to Windows
means the path we get back from FindExecutable will be absolute like on
posix, which is better for consistency between the platforms.

Bug: tint:2234
Change-Id: I53d4f9ec79ee593db8ab4e92415321e6d2e8f0ed
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186563
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2 files changed
tree: 9e83a5dccd0052934648e4cfe89963ee37eeb153
  1. .github/
  2. .vscode/
  3. build_overrides/
  4. docs/
  5. generator/
  6. include/
  7. infra/
  8. scripts/
  9. src/
  10. test/
  11. third_party/
  12. tools/
  13. webgpu-cts/
  14. .bazelrc
  15. .clang-format
  16. .clang-tidy
  17. .gitattributes
  18. .gitignore
  19. .gitmodules
  20. .gn
  21. AUTHORS
  22. BUILD.bazel
  23. BUILD.gn
  24. CMakeLists.txt
  25. CMakeSettings.json
  26. CODE_OF_CONDUCT.md
  27. codereview.settings
  28. CONTRIBUTING.md
  29. CPPLINT.cfg
  30. DEPS
  31. DIR_METADATA
  32. go.mod
  33. go.sum
  34. go_presubmit_support.py
  35. LICENSE
  36. OWNERS
  37. PRESUBMIT.py
  38. README.chromium
  39. README.md
  40. 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.