Skip to content

Commit

Permalink
Add support for the Rust toolchain
Browse files Browse the repository at this point in the history
To enable Rust build targets in standalone dawn:
- Add `checkout_rust: True` to the gclient `custom_vars` section. As
  it defaults to false:
    "custom_vars": {
      "checkout_rust": True,
    }
- Set `enable_rust = true` in GN args, as it also defaults to false.
- Run gclient sync

Then building `rust_build_tests` will build test targets in
//build/rust/tests, which rely on and verify the functioning of
the Rust toolchain.

Make new rust targets by using the GN templates in //build/rust.

In the chromium build, Rust build targets that use the templates
from //build/rust will just work.

------

Dependent steps that are already done:
1) The //tools/rust repo needs to be created in
   https://bugs.chromium.org/p/chromium/issues/detail?id=1494128
2) Then, we should remove the checkout_tools_rust DEPS var,
3) And update the tools/clang and tools/rust revisions so that they
   are compatible.
4) Roll the chromium //build changes that were required in from
   https://chromium-review.googlesource.com/c/chromium/src/+/4956874
   and
   https://chromium-review.googlesource.com/c/chromium/src/+/4966201
5) The clang roll causes clang-cl to warn on use of offsetof, but it
   does not define __GNUC__, which is used to remove the warning. So
   also remove the warning when __clang__ is defined.

Bug: chromium:1494118
Change-Id: I5e280090ec950a1da9f91e2e4717925ce4b2eaa6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/157120
Reviewed-by: Austin Eng <enga@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: danakj <danakj@chromium.org>
  • Loading branch information
danakj authored and Dawn LUCI CQ committed Oct 24, 2023
1 parent 2d123d0 commit 4090b7d
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 11 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
/third_party/node-api-headers
/third_party/partition_alloc
/third_party/protobuf
/third_party/rust-toolchain
/third_party/swiftshader
/third_party/vulkan-deps
/third_party/vulkan_memory_allocator
Expand All @@ -45,6 +46,7 @@
/tools/cmake*
/tools/golang
/tools/memory
/tools/rust
/out

# Tint test validation cache file
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,6 @@
path = third_party/partition_alloc
url = https://chromium.googlesource.com/chromium/src/base/allocator/partition_allocator.git
gclient-condition = dawn_standalone
[submodule "tools/rust"]
path = tools/rust
url = https://chromium.googlesource.com/chromium/src/tools/rust
8 changes: 8 additions & 0 deletions BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import("build/config/rust.gni")
import("scripts/dawn_overrides_with_defaults.gni")
import("scripts/tint_overrides_with_defaults.gni")

Expand Down Expand Up @@ -77,6 +78,13 @@ group("all") {
]
}

if (enable_rust) {
group("rust_build_tests") {
testonly = true
deps = [ "//build/rust/tests" ]
}
}

# This target is built when no specific target is specified on the command line.
group("default") {
testonly = true
Expand Down
32 changes: 26 additions & 6 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ vars = {
# Fetch clang-tidy into the same bin/ directory as our clang binary.
'checkout_clang_tidy': False,

# Fetch the rust toolchain.
#
# Use a custom_vars section to enable it:
# "custom_vars": {
# "checkout_rust": True,
# }
'checkout_rust': False,

# Fetch configuration files required for the 'use_remoteexec' gn arg
'download_remoteexec_cfg': False,
# RBE instance to use for running remote builds
Expand All @@ -53,11 +61,6 @@ vars = {
}

deps = {
# Dependencies required to use GN/Clang in standalone
'build': {
'url': '{chromium_git}/chromium/src/build@5885d3c24833ad72845a52a1b913a2b8bc651b56',
'condition': 'dawn_standalone',
},
'buildtools': {
'url': '{chromium_git}/chromium/src/buildtools@a9a6f0c49d0e8fa0cda37337430b4736ab3dc944',
'condition': 'dawn_standalone',
Expand Down Expand Up @@ -101,10 +104,21 @@ deps = {
'condition': 'dawn_standalone',
},

# Dependencies required to use GN, Clang, and Rust in standalone.
# The //build, //tools/clang, and //tools/rust deps should all be updated
# in unison, as there are dependencies between them.
'build': {
'url': '{chromium_git}/chromium/src/build@e2f4d00875f7d00fad39d5af2c6869ac7c7413cc',
'condition': 'dawn_standalone',
},
'tools/clang': {
'url': '{chromium_git}/chromium/src/tools/clang@8f75392b4aa947fb55c7c206b36804229595e4da',
'url': '{chromium_git}/chromium/src/tools/clang@86aed39db276fb876a2b98c93cc6ff8940377903',
'condition': 'dawn_standalone',
},
'tools/rust': {
'url': '{chromium_git}/chromium/src/tools/rust@7052bd3aa0eba2d3d701b7a76219e3b04770540e',
'condition': 'dawn_standalone and checkout_rust',
},
'tools/clang/dsymutil': {
'packages': [{
'package': 'chromium/llvm-build-tools/dsymutil',
Expand Down Expand Up @@ -332,6 +346,12 @@ hooks = [
'action': ['python3', 'tools/clang/scripts/update.py',
'--package=clang-tidy'],
},
{
'name': 'rust',
'pattern': '.',
'action': ['python3', 'tools/rust/update_rust.py'],
'condition': 'dawn_standalone and checkout_rust',
},
{
# Pull rc binaries using checked-in hashes.
'name': 'rc_win',
Expand Down
2 changes: 1 addition & 1 deletion build
Submodule build updated from 5885d3 to e2f4d0
2 changes: 1 addition & 1 deletion generator/templates/api_cpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#include "{{api}}/{{api}}_cpp.h"
{% endif %}

#ifdef __GNUC__
#if defined(__GNUC__) || defined(__clang__)
// error: 'offsetof' within non-standard-layout type '{{metadata.namespace}}::XXX' is conditionally-supported
#pragma GCC diagnostic ignored "-Winvalid-offsetof"
#endif
Expand Down
2 changes: 1 addition & 1 deletion generator/templates/dawn/native/api_structs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

#include <tuple>

#ifdef __GNUC__
#if defined(__GNUC__) || defined(__clang__)
// error: 'offsetof' within non-standard-layout type '{{namespace}}::XXX' is conditionally-supported
#pragma GCC diagnostic ignored "-Winvalid-offsetof"
#endif
Expand Down
2 changes: 1 addition & 1 deletion generator/templates/dawn/wire/WireCmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
#include <cstring>
#include <limits>

#ifdef __GNUC__
#if defined(__GNUC__) || defined(__clang__)
// error: 'offsetof' within non-standard-layout type 'wgpu::XXX' is conditionally-supported
#pragma GCC diagnostic ignored "-Winvalid-offsetof"
#endif
Expand Down
2 changes: 1 addition & 1 deletion tools/clang
Submodule clang updated from 8f7539 to 86aed3
1 change: 1 addition & 0 deletions tools/rust
Submodule rust added at 7052bd

0 comments on commit 4090b7d

Please sign in to comment.