[rust] Introduce Rust Android toolchain.

This provides the ability to add Rust components to Chromium.  This is
experimental and won't affect production Chromium.  This is the most
minimal possible addition: future CLs will handle more tooling, ability
to add third party crates, C++ interop etc.

Specifically, this CL contains:
* Global gn flags to enable Rust compilation (off by default) and to
  enable contribution of Rust code into Chrome binaries (off by
  default; currently unused anyway)
* Modifications to three gn toolchains (clang, Windows and Mac) to
  trigger gn's built-in support for Rust tool invocations
* Reasonable default Rust compiler flags for various cases where we
  set up C++ compiler flags (e.g. optimization, debug info)
* Some test binaries, built by default.
* Support for our existing C++ linker invocations to link Rust code into
  their output binaries (more discussion below).

More on this last point. The Rust compiler (rustc) knows how to make
several different products - executables, shared objects, 'complete'
static libraries, and 'rlibs'. 'Complete' static libraries contain
everything required to link Rust code into non-Rust binaries, including
(for instance) the required parts of the Rust standard library. That
would be fine if we only ever expected a single Rust subsystem in
Chrome. But as we expect (eventually) several, we instead choose to
generate 'rlibs' and pass them into our C++ linker commands.  (To link
multiple staticlibs would give us ODR violations on the Rust stdlib.)
'rlibs' are 'incomplete' and thus we have to take extra steps to include
the Rust standard library - that's in //build/rust std.

Change-Id: Ie0342bde51852ddc049e8d6a7950897b779904d2
Bug: 1069271
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2162136
Reviewed-by: Alex Gough <[email protected]>
Reviewed-by: Nico Weber <[email protected]>
Commit-Queue: Adrian Taylor <[email protected]>
Cr-Commit-Position: refs/heads/main@{#917242}
23 files changed
tree: 366fa45b3ed32cbeef462c8cf0a218600de8a525
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. cloud_print/
  13. codelabs/
  14. components/
  15. content/
  16. courgette/
  17. crypto/
  18. dbus/
  19. device/
  20. docs/
  21. extensions/
  22. fuchsia/
  23. gin/
  24. google_apis/
  25. google_update/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. jingle/
  32. media/
  33. mojo/
  34. native_client_sdk/
  35. net/
  36. pdf/
  37. ppapi/
  38. printing/
  39. remoting/
  40. rlz/
  41. sandbox/
  42. services/
  43. skia/
  44. sql/
  45. storage/
  46. styleguide/
  47. testing/
  48. third_party/
  49. tools/
  50. ui/
  51. url/
  52. weblayer/
  53. .clang-format
  54. .clang-tidy
  55. .eslintrc.js
  56. .git-blame-ignore-revs
  57. .gitattributes
  58. .gitignore
  59. .gn
  60. .mailmap
  61. .vpython
  62. .vpython3
  63. .yapfignore
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. DEPS
  69. DIR_METADATA
  70. ENG_REVIEW_OWNERS
  71. LICENSE
  72. LICENSE.chromium_os
  73. OWNERS
  74. PRESUBMIT.py
  75. PRESUBMIT_test.py
  76. PRESUBMIT_test_mocks.py
  77. README.md
  78. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.