summarylogtreecommitdiffstats
path: root/0002-Remove-the-prebuilt-toolchain-from-the-Android-team.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-Remove-the-prebuilt-toolchain-from-the-Android-team.patch')
-rw-r--r--0002-Remove-the-prebuilt-toolchain-from-the-Android-team.patch383
1 files changed, 383 insertions, 0 deletions
diff --git a/0002-Remove-the-prebuilt-toolchain-from-the-Android-team.patch b/0002-Remove-the-prebuilt-toolchain-from-the-Android-team.patch
new file mode 100644
index 000000000000..036be1cc026a
--- /dev/null
+++ b/0002-Remove-the-prebuilt-toolchain-from-the-Android-team.patch
@@ -0,0 +1,383 @@
+From 635f82e7dd5802b338a5a404f92672b1ed878df1 Mon Sep 17 00:00:00 2001
+From: danakj <danakj@chromium.org>
+Date: Thu, 4 May 2023 16:33:48 +0000
+Subject: [PATCH] Remove the prebuilt toolchain from the Android team
+
+We build our own compiler and stdlib for Chrome unconditionally now, so
+this is no longer used.
+
+These paths were broken while fixing the Windows build, so time for
+them to go.
+
+Bug: 1292038
+Change-Id: I9d43875671245e5be08fa63aff06f13c0b2243d9
+Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-rel,linux-rust-x64-dbg,win-rust-x64-rel,win-rust-x64-dbg
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4500460
+Reviewed-by: Adrian Taylor <adetaylor@chromium.org>
+Commit-Queue: danakj <danakj@chromium.org>
+Reviewed-by: Ben Pastene <bpastene@chromium.org>
+Cr-Commit-Position: refs/heads/main@{#1139597}
+---
+ DEPS | 13 ----
+ build/config/rust.gni | 75 +++++++------------
+ build/rust/std/BUILD.gn | 57 ++++----------
+ build/rust/std/find_std_rlibs.py | 32 --------
+ .../ci/android-rust-arm32-rel/properties.json | 3 +-
+ .../ci/android-rust-arm64-dbg/properties.json | 3 +-
+ .../ci/android-rust-arm64-rel/properties.json | 3 +-
+ .../android-rust-arm32-rel/properties.json | 3 +-
+ .../android-rust-arm64-dbg/properties.json | 3 +-
+ .../android-rust-arm64-rel/properties.json | 3 +-
+ .../chromium/ci/chromium.rust.star | 3 -
+ 11 files changed, 47 insertions(+), 151 deletions(-)
+
+diff --git a/DEPS b/DEPS
+index 98d20c55e07a5..9606cafe4c800 100644
+--- a/DEPS
++++ b/DEPS
+@@ -241,9 +241,6 @@ vars = {
+ # Fetch Rust toolchain.
+ 'checkout_rust': 'host_os == "linux"',
+
+- # Fetch the Android team's Rust toolchain.
+- 'fetch_android_chromium_rust_toolchain': False,
+-
+ # See //docs/testing/regression-test-selection.md
+ # for info on RTS
+ 'checkout_rts_model': False,
+@@ -560,16 +557,6 @@ deps = {
+ ],
+ 'dep_type': 'cipd',
+ },
+- 'src/third_party/android_rust_toolchain/toolchain': {
+- 'packages': [
+- {
+- 'package': 'chromium/third_party/android_rust_toolchain/linux-amd64',
+- 'version': 'version:2@1.64.0.cr2',
+- },
+- ],
+- 'dep_type': 'cipd',
+- 'condition': 'fetch_android_chromium_rust_toolchain',
+- },
+
+ # We don't know target_cpu at deps time. At least until there's a universal
+ # binary of httpd-php, pull both intel and arm versions in DEPS and then pick
+diff --git a/build/config/rust.gni b/build/config/rust.gni
+index c0d934ce193f2..544ca33a8e036 100644
+--- a/build/config/rust.gni
++++ b/build/config/rust.gni
+@@ -35,19 +35,18 @@ declare_args() {
+ # all Rust features enabled.
+ enable_all_rust_features = false
+
+- # Use the Rust toolchain built in-tree. See //tools/rust.
+- use_chromium_rust_toolchain = true
+-
+- # Chromium currently has a Rust toolchain for Android and Linux, but
+- # if you wish to experiment on more platforms you can use this
+- # argument to specify an alternative toolchain.
+- # This should be an absolute path to a directory
+- # containing a 'bin' directory and others. Commonly
++ # Chromium provides a Rust toolchain in //third_party/rust-toolchain when
++ # checkout_rust is True (which is being rolled out by default over time).
++ #
++ # To use a custom toolchain instead, specify an absolute path to the root of
++ # a Rust sysroot, which will have a 'bin' directory and others. Commonly
+ # <home dir>/.rustup/toolchains/nightly-<something>-<something>
+ rust_sysroot_absolute = ""
+
+- # If you're using an external Rust toolchain, set this to a Rust
+- # the output of rustc -V.
++ # If you're using a Rust toolchain as specified by rust_sysroot_absolute,
++ # set this to the output of `rustc -V`. Changing this string will cause all
++ # Rust targets to be rebuilt, which allows you to update your toolchain and
++ # not break incremental builds.
+ rustc_version = ""
+
+ # If you're using a Rust toolchain as specified by rust_sysroot_absolute,
+@@ -77,10 +76,9 @@ declare_args() {
+ host_toolchain_no_sanitizers = host_toolchain
+ }
+
++# Use a separate declare_args so these variables' defaults can depend on the
++# ones above.
+ declare_args() {
+- # Use a separate declare_args so these variables' defaults can depend on the
+- # ones above.
+-
+ # Individual Rust components.
+
+ # Conversions between Rust types and C++ types.
+@@ -105,36 +103,33 @@ declare_args() {
+ enable_rust_boringssl = enable_all_rust_features
+ }
+
+-# Platform support for "official" toolchains (Android or Chromium)
+-android_toolchain_supports_platform =
+- (!is_nacl &&
+- (is_android && (current_cpu == "arm" || current_cpu == "arm64" ||
+- current_cpu == "x64" || current_cpu == "x86"))) ||
+- (is_linux && current_cpu == "x64")
++# Use the Rust toolchain built in-tree. When false, we use the prebuilt Rust
++# stdlibs that come with the specified custom toolchain.
++use_chromium_rust_toolchain = rust_sysroot_absolute == ""
++
++# Platform support for the Rust toolchain.
+ chromium_toolchain_supports_platform = !is_nacl
+ custom_toolchain_supports_platform = !is_nacl || rust_toolchain_supports_nacl
+
+-toolchain_has_rust =
+- enable_rust &&
+- ((use_chromium_rust_toolchain && chromium_toolchain_supports_platform) ||
+- (!use_chromium_rust_toolchain && android_toolchain_supports_platform) ||
+- (rust_sysroot_absolute != "" && custom_toolchain_supports_platform))
++# Not all target triples (GN toolchains) are supported by the Rust compiler.
++# Define if we support the current GN toolchain.
++toolchain_has_rust = false
+
+ # The rustc_revision is used to introduce a dependency on the toolchain version
+ # (so e.g. rust targets are rebuilt, and the standard library is re-copied when
+ # the toolchain changes). It is left empty for custom toolchains.
+ rustc_revision = ""
+-if (toolchain_has_rust) {
++
++if (enable_rust) {
+ if (use_chromium_rust_toolchain) {
++ toolchain_has_rust = chromium_toolchain_supports_platform
+ update_rust_args = [ "--print-package-version" ]
+ rustc_revision = exec_script("//tools/rust/update_rust.py",
+ update_rust_args,
+ "trim string")
+- } else if (rust_sysroot_absolute != "") {
+- rustc_revision = rustc_version
+ } else {
+- # Android toolchain version.
+- rustc_revision = "rustc 1.64.0-dev (Android Rust Toolchain version 9099361)"
++ toolchain_has_rust = custom_toolchain_supports_platform
++ rustc_revision = rustc_version
+ }
+ }
+
+@@ -150,21 +145,10 @@ build_rust_crash = toolchain_has_rust && enable_rust_crash
+ # portability. In practice if an external toolchain was specified, it might
+ # be an absolute path, but we'll do our best.
+ if (enable_rust) {
+- if (rust_sysroot_absolute != "") {
+- rust_sysroot = get_path_info(rust_sysroot_absolute, "abspath")
+- use_unverified_rust_toolchain = true
+- } else if (use_chromium_rust_toolchain) {
++ if (use_chromium_rust_toolchain) {
+ rust_sysroot = "//third_party/rust-toolchain"
+- use_unverified_rust_toolchain = false
+ } else {
+- if (host_os != "linux") {
+- assert(false,
+- "Attempt to use Android Rust toolchain on an unsupported platform")
+- }
+-
+- rust_sysroot = "//third_party/android_rust_toolchain/toolchain"
+- use_unverified_rust_toolchain = false
+- extra_sysroot_libs += [ "libunwind.a" ]
++ rust_sysroot = get_path_info(rust_sysroot_absolute, "abspath")
+ }
+ }
+
+@@ -266,13 +250,6 @@ if (current_cpu == "x86") {
+
+ assert(!toolchain_has_rust || rust_target_arch != "")
+
+-# Must use Chromium Rust toolchain to get precisely matching LLVM versions
+-# in order to enable LTO. Some say that LTO probably works if LLVM is "close
+-# enough", but we don't want to take that risk.
+-assert(!use_thin_lto || !enable_rust || use_chromium_rust_toolchain ||
+- use_unverified_rust_toolchain,
+- "Must use Chromium Rust toolchain for LTO")
+-
+ # Arguments for Rust invocation.
+ # This is common between gcc/clang, Mac and Windows toolchains so specify once,
+ # here. This is not the complete command-line: toolchains should add -o
+diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn
+index 03b894327c0d0..60aea480a42a1 100644
+--- a/build/rust/std/BUILD.gn
++++ b/build/rust/std/BUILD.gn
+@@ -70,12 +70,6 @@ if (toolchain_has_rust) {
+ "unwind",
+ ]
+
+- # rlibs explicitly ignored when copying prebuilt sysroot libraries.
+- # find_std_rlibs.py rightfully errors out if an unexpected prebuilt lib is
+- # encountered, since it usually indicates we missed something. This ignore
+- # list is also passed to it. This has no effect on the local std build.
+- ignore_stdlib_files = []
+-
+ # proc_macro is special: we only run proc macros on the host, so we only want
+ # it for our host toolchain.
+ if (current_toolchain == host_toolchain_no_sanitizers) {
+@@ -83,10 +77,6 @@ if (toolchain_has_rust) {
+ # includes proc_macro in the prebuilts copied in find_stdlib. Otherwise it
+ # is not built or copied.
+ stdlib_files += [ "proc_macro" ]
+- } else {
+- # Explicitly ignore it from the prebuilts. Nothing needs to be done for the
+- # local std build.
+- ignore_stdlib_files += [ "proc_macro" ]
+ }
+
+ # Different Rust toolchains may add or remove files relative to the above
+@@ -198,9 +188,11 @@ if (toolchain_has_rust) {
+ }
+
+ group("local_stdlib_libs") {
+- assert(
+- enable_rust,
+- "Some C++ target is including Rust code even though enable_rust=false")
++ assert(toolchain_has_rust,
++ "Some C++ target is depending on Rust code even though " +
++ "toolchain_has_rust=false. Usually this would mean" +
++ "a NaCl target is depending on Rust, as there's no Rust " +
++ "toolchain targetting NaCl.")
+ all_dependent_configs = [ ":stdlib_dependent_libs" ]
+ deps = []
+ foreach(libname, stdlib_files + skip_stdlib_files) {
+@@ -212,9 +204,6 @@ if (toolchain_has_rust) {
+ # Builds the stdlib and points the rustc `--sysroot` to them. Used by
+ # targets for which linking is driven by Rust (bins and dylibs).
+ group("stdlib_for_rustc") {
+- assert(
+- enable_rust,
+- "Some C++ target is including Rust code even though enable_rust=false")
+ all_dependent_configs = [ ":local_stdlib_sysroot" ]
+ public_deps = [ ":local_stdlib_libs" ]
+ }
+@@ -228,27 +217,25 @@ if (toolchain_has_rust) {
+ ":remap_alloc",
+ ]
+ }
+-
+- not_needed([ "ignore_stdlib_files" ])
+ } else {
+ action("find_stdlib") {
+- # Collect prebuilt Rust libraries from toolchain package and copy to a known
+- # location.
++ # Collect prebuilt Rust libraries from toolchain package and copy to a
++ # known location.
+ #
+ # The Rust toolchain contains prebuilt rlibs for the standard library and
+ # its dependencies. However, they have unstable names: an unpredictable
+ # metadata hash is appended to the known crate name.
+ #
+ # We must depend on these rlibs explicitly when rustc is not in charge of
+- # linking. However, it is difficult to construct GN rules to do so when the
+- # names can't be known statically.
++ # linking. However, it is difficult to construct GN rules to do so when
++ # the names can't be known statically.
+ #
+ # This action copies the prebuilt rlibs to a known location, removing the
+ # metadata part of the name. In the process it verifies we have all the
+- # libraries we expect and none that we don't. A depfile is generated so this
+- # step is re-run when any libraries change. The action script additionally
+- # verifies rustc matches the expected version, which is unrelated but this
+- # is a convenient place to do so.
++ # libraries we expect and none that we don't. A depfile is generated so
++ # this step is re-run when any libraries change. The action script
++ # additionally verifies rustc matches the expected version, which is
++ # unrelated but this is a convenient place to do so.
+ #
+ # The action refers to `stdlib_files`, `skip_stdlib_files`, and the
+ # associated //build/config/rust.gni vars `removed_rust_stdlib_libs` and
+@@ -259,8 +246,8 @@ if (toolchain_has_rust) {
+ out_libdir = rebase_path(target_out_dir, root_build_dir)
+ out_depfile = rebase_path(depfile, root_build_dir)
+
+- # For the rustc sysroot we must include even the rlibs we don't pass to the
+- # C++ linker.
++ # For the rustc sysroot we must include even the rlibs we don't pass to
++ # the C++ linker.
+ all_stdlibs_to_copy = stdlib_files + skip_stdlib_files
+ args = [
+ "--rust-bin-dir",
+@@ -282,20 +269,6 @@ if (toolchain_has_rust) {
+ rustc_revision,
+ ]
+
+- if (!use_unverified_rust_toolchain) {
+- args += [
+- "--stdlibs",
+- string_join(",", all_stdlibs_to_copy),
+- ]
+-
+- if (ignore_stdlib_files != []) {
+- args += [
+- "--ignore-stdlibs",
+- string_join(",", ignore_stdlib_files),
+- ]
+- }
+- }
+-
+ if (extra_sysroot_libs != []) {
+ args += [
+ "--extra-libs",
+diff --git a/build/rust/std/find_std_rlibs.py b/build/rust/std/find_std_rlibs.py
+index 85ab477a9450c..386258f890c01 100755
+--- a/build/rust/std/find_std_rlibs.py
++++ b/build/rust/std/find_std_rlibs.py
+@@ -33,10 +33,6 @@ def main():
+ parser.add_argument("--depfile-target",
+ help="Target to key depfile around",
+ required=True)
+- parser.add_argument("--stdlibs",
+- help="Expected list of standard library libraries")
+- parser.add_argument("--ignore-stdlibs",
+- help="List of sysroot libraries to ignore")
+ parser.add_argument("--extra-libs",
+ help="List of extra non-libstd sysroot libraries")
+ parser.add_argument("--rustc-revision",
+@@ -44,24 +40,6 @@ def main():
+ " on the rustc version.")
+ args = parser.parse_args()
+
+- # Expected rlibs by concise name (the crate name, plus a disambiguating suffix
+- # e.g. "-2" when necessary).
+- if args.stdlibs:
+- rlibs_expected = set()
+- for lib in args.stdlibs.split(','):
+- # The version is only included if there's more than one of `name`, and
+- # even then is only included for the 2nd onward.
+- (name, version) = EXPECTED_STDLIB_INPUT_REGEX.match(lib).group(1, 2)
+- if version is None:
+- rlibs_expected.add(name)
+- else:
+- rlibs_expected.add(f"{name}-{version}")
+- ignore_rlibs = set()
+- if args.ignore_stdlibs is not None:
+- ignore_rlibs = set(args.ignore_stdlibs.split(','))
+- else:
+- rlibs_expected = None
+-
+ extra_libs = set()
+ if args.extra_libs:
+ for lib in args.extra_libs.split(','):
+@@ -138,13 +116,6 @@ def copy_file(infile, outfile):
+
+ output_filename = f"lib{concise_name}.rlib"
+
+- if rlibs_expected is not None:
+- if concise_name in ignore_rlibs:
+- continue
+- if concise_name not in rlibs_expected:
+- raise Exception("Found stdlib rlib that wasn't expected: %s" % f)
+- rlibs_expected.remove(concise_name)
+-
+ infile = os.path.join(rustlib_dir, f)
+ outfile = os.path.join(args.output, output_filename)
+ copy_file(infile, outfile)
+@@ -155,9 +126,6 @@ def copy_file(infile, outfile):
+ copy_file(infile, outfile)
+
+ depfile.write("\n")
+- if rlibs_expected:
+- raise Exception("We failed to find all expected stdlib rlibs: %s" %
+- ','.join(rlibs_expected))
+
+
+ if __name__ == '__main__':