diff --git a/build/build-rust/cargo-vendor-std.patch b/build/build-rust/cargo-vendor-std.patch index 1a79846d6182..aa439d094b97 100644 --- a/build/build-rust/cargo-vendor-std.patch +++ b/build/build-rust/cargo-vendor-std.patch @@ -9,18 +9,18 @@ Most of these changes just add/edit tests for the functionality. Only the change to src/cargo/core/compiler/standard_lib.rs is important. diff --git a/src/cargo/core/compiler/standard_lib.rs b/src/cargo/core/compiler/standard_lib.rs -index c456c58d5..333389bc8 100644 +index 9f96ca27d..80723c06b 100644 --- a/src/cargo/core/compiler/standard_lib.rs +++ b/src/cargo/core/compiler/standard_lib.rs @@ -11,6 +11,7 @@ use crate::ops::{self, Packages}; use crate::util::errors::CargoResult; - use crate::Config; + use crate::GlobalContext; use std::collections::{HashMap, HashSet}; +use std::fs; use std::path::PathBuf; use super::BuildConfig; -@@ -73,27 +74,45 @@ pub fn resolve_std<'cfg>( +@@ -73,27 +74,45 @@ pub fn resolve_std<'gctx>( } let src_path = detect_sysroot_src_path(target_data)?; diff --git a/build/build-rust/rust-vendor-std.patch b/build/build-rust/rust-vendor-std.patch index e3ad25d1b012..f72e64d8911f 100644 --- a/build/build-rust/rust-vendor-std.patch +++ b/build/build-rust/rust-vendor-std.patch @@ -11,12 +11,12 @@ their contents are ignored in favour of the actual stdlib. For firefox's purposes, these patches still work fine, and are necessary to make -Zbuild-std work in a vendored environment. -diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs -index 3cb0eccd324..a3b8154c024 100644 +diff --git a/src/bootstrap/src/core/build_steps/dist.rs b/src/bootstrap/src/core/build_steps/dist.rs +index 012d64e5344..aedb53358ef 100644 --- a/src/bootstrap/src/core/build_steps/dist.rs +++ b/src/bootstrap/src/core/build_steps/dist.rs -@@ -905,6 +905,31 @@ fn run(self, builder: &Builder<'_>) -> GeneratedTarball { - builder.copy(&builder.src.join(file), &dst_src.join(file)); +@@ -927,6 +927,31 @@ fn run(self, builder: &Builder<'_>) -> GeneratedTarball { + builder.copy_link(&builder.src.join(file), &dst_src.join(file)); } + // libsysroot includes std and everything else, so vendoring it @@ -47,11 +47,11 @@ index 3cb0eccd324..a3b8154c024 100644 tarball.generate() } } -diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs -index 3ed53452309..1fc0d887748 100644 +diff --git a/src/bootstrap/src/lib.rs b/src/bootstrap/src/lib.rs +index 5ed6b357e20..ad617948c4b 100644 --- a/src/bootstrap/src/lib.rs +++ b/src/bootstrap/src/lib.rs -@@ -1437,6 +1437,27 @@ fn read_stamp_file(&self, stamp: &Path) -> Vec<(PathBuf, DependencyType)> { +@@ -1649,6 +1649,27 @@ fn read_stamp_file(&self, stamp: &Path) -> Vec<(PathBuf, DependencyType)> { paths } @@ -61,7 +61,7 @@ index 3ed53452309..1fc0d887748 100644 + if self.config.dry_run() { + return; + } -+ self.verbose_than(1, &format!("Copy {:?} to {:?}", src, dst)); ++ self.verbose_than(1, || println!("Copy {:?} to {:?}", src, dst)); + if src == dst { + return; + } @@ -76,6 +76,6 @@ index 3ed53452309..1fc0d887748 100644 + t!(filetime::set_file_times(dst, atime, mtime)); + } + - /// Copies a file from `src` to `dst` - pub fn copy(&self, src: &Path, dst: &Path) { - self.copy_internal(src, dst, false); + /// Links a file from `src` to `dst`. + /// Attempts to use hard links if possible, falling back to copying. + /// You can neither rely on this being a copy nor it being a link, diff --git a/build/valgrind/x86_64-pc-linux-gnu.sup b/build/valgrind/x86_64-pc-linux-gnu.sup index 0887290e5d7d..014cb645da25 100644 --- a/build/valgrind/x86_64-pc-linux-gnu.sup +++ b/build/valgrind/x86_64-pc-linux-gnu.sup @@ -1066,3 +1066,10 @@ ... fun:upload_to_texture_cache } + +{ + False positive from new optimizations in rustc 1.78 + Memcheck:Cond + fun:drop_in_place> + fun:_ZN5style6values9specified5color5Color14parse_internal* +} diff --git a/docs/writing-rust-code/update-policy.md b/docs/writing-rust-code/update-policy.md index 60eed74e944e..028be40a764b 100644 --- a/docs/writing-rust-code/update-policy.md +++ b/docs/writing-rust-code/update-policy.md @@ -153,8 +153,8 @@ Here are the Rust versions for each Firefox version. | Firefox 124 | Rust 1.76.0 | 1.70.0 | 2024 February 8 | 2024 February 15 | 2024 March 19 | Firefox 125 | Rust 1.76.0 | 1.74.0 | 2024 February 8 | 2024 March 14 | 2024 April 16 | Firefox 126 | Rust 1.77.2 | 1.74.0 | 2024 March 28 | 2024 April 11 | 2024 May 14 +| Firefox 127 | Rust 1.77.2 | 1.76.0 | 2024 May 2 | 2024 May 9 | 2024 June 11 | **Estimated** | -| Firefox 127 | Rust 1.78.0 | 1.76.0 | 2024 May 2 | 2024 May 9 | 2024 June 11 | Firefox 128 | Rust 1.78.0 | ? | 2024 May 2 | 2024 June 6 | 2024 July 9 | Firefox 129 | Rust 1.79.0 | ? | 2024 June 13 | 2024 July 4 | 2024 August 6 | Firefox 130 | Rust 1.80.0 | ? | 2024 July 25 | 2024 August 1 | 2024 September 3 diff --git a/mozglue/static/rust/build.rs b/mozglue/static/rust/build.rs index e5786168f1ef..e431b4d4725a 100644 --- a/mozglue/static/rust/build.rs +++ b/mozglue/static/rust/build.rs @@ -16,10 +16,10 @@ fn main() { println!("cargo:rerun-if-changed=wrappers.cpp"); let ver = version().unwrap(); - let max_oom_hook_version = Version::parse("1.78.0-alpha").unwrap(); + let max_oom_hook_version = Version::parse("1.79.0-alpha").unwrap(); // The new alloc error panic feature was temporarily reverted. We kept the // code in tree, but the version here is such that it's effectively never used. - let max_alloc_error_panic_version = Version::parse("1.78.0-alpha").unwrap(); + let max_alloc_error_panic_version = Version::parse("1.79.0-alpha").unwrap(); if ver >= Version::parse("1.80.0-alpha").unwrap() { println!("cargo::rustc-check-cfg=cfg(oom_with, values(\"hook\", \"alloc_error_panic\"))"); diff --git a/taskcluster/kinds/fetch/toolchains.yml b/taskcluster/kinds/fetch/toolchains.yml index 4b8b231f6f9a..466c05035b85 100644 --- a/taskcluster/kinds/fetch/toolchains.yml +++ b/taskcluster/kinds/fetch/toolchains.yml @@ -380,13 +380,13 @@ clang-trunk: # We build stable rust from source so the resulting compiler acts as a nightly # rust compiler, allowing to use unstable features like -Zbuild-std and # sanitizers. -rust-1.77.2: - description: Rust 1.77.2 source code +rust-1.78.0: + description: Rust 1.78.0 source code fetch: type: git include-dot-git: true repo: https://github.com/rust-lang/rust/ - revision: 25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04 + revision: 9b00956e56009bab2aa15d7bff10916599e3d6d6 wasi-sdk-11: description: wasi-sdk-11 source code diff --git a/taskcluster/kinds/toolchain/rust.yml b/taskcluster/kinds/toolchain/rust.yml index e1e2778f68a4..0e748d6eb0b1 100644 --- a/taskcluster/kinds/toolchain/rust.yml +++ b/taskcluster/kinds/toolchain/rust.yml @@ -26,12 +26,12 @@ linux64-rust-1.76: - linux64-rust-base - linux64-rust-toolchain -linux64-rust-1.77: +linux64-rust-1.78: treeherder: symbol: TL(rust) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-unknown-linux-gnu', '--target', 'i686-unknown-linux-gnu', @@ -62,18 +62,18 @@ linux64-rust-dev: ] fetches: fetch: - - rust-1.77.2 + - rust-1.78.0 toolchain: - linux64-clang-toolchain - linux64-toolchain-sysroot -linux64-rust-cross-1.77: +linux64-rust-cross-1.78: description: "rust repack with macos and windows cross support" treeherder: symbol: TL(rust-cross) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-unknown-linux-gnu', '--target', 'i686-unknown-linux-gnu', @@ -90,13 +90,13 @@ linux64-rust-cross-1.77: ] toolchain-alias: linux64-rust-cross -linux64-rust-static-1.77: +linux64-rust-static-1.78: description: "rust repack with static linking support" treeherder: symbol: TL(rust-static) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'aarch64-unknown-linux-musl', '--target', 'x86_64-unknown-linux-gnu', @@ -120,13 +120,13 @@ linux64-rust-macos-1.70: ] toolchain-alias: linux64-rust-macos-toolchain -linux64-rust-macos-1.77: +linux64-rust-macos-1.78: description: "rust repack with macos-cross support" treeherder: symbol: TL(rust-macos) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-apple-darwin', @@ -134,13 +134,13 @@ linux64-rust-macos-1.77: ] toolchain-alias: linux64-rust-macos -linux64-rust-ios-1.77: +linux64-rust-ios-1.78: description: "rust repack with ios-cross support" treeherder: symbol: TL(rust-ios) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-unknown-linux-gnu', '--target', 'aarch64-apple-ios', @@ -148,13 +148,13 @@ linux64-rust-ios-1.77: ] toolchain-alias: linux64-rust-ios -linux64-rust-android-1.77: +linux64-rust-android-1.78: description: "rust repack with android-cross support" treeherder: symbol: TL(rust-android) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-unknown-linux-gnu', '--target', 'armv7-linux-androideabi', @@ -179,13 +179,13 @@ linux64-rust-windows-1.70: ] toolchain-alias: linux64-rust-windows-toolchain -linux64-rust-windows-1.77: +linux64-rust-windows-1.78: description: "rust repack with windows-cross support" treeherder: symbol: TL(rust-win) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-unknown-linux-gnu', '--target', 'x86_64-pc-windows-msvc', @@ -194,12 +194,12 @@ linux64-rust-windows-1.77: ] toolchain-alias: linux64-rust-windows -win64-rust-1.77: +win64-rust-1.78: treeherder: symbol: TW64(rust) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-pc-windows-msvc', '--target', 'x86_64-pc-windows-msvc', '--target', 'i686-pc-windows-msvc', @@ -207,23 +207,23 @@ win64-rust-1.77: ] toolchain-alias: win64-rust -macosx64-rust-1.77: +macosx64-rust-1.78: treeherder: symbol: TM(rust) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-apple-darwin', '--target', 'x86_64-apple-darwin', ] toolchain-alias: macosx64-rust -mingw32-rust-1.77: +mingw32-rust-1.78: treeherder: symbol: TMW(rust) run: arguments: [ - '--channel', '1.77.2', + '--channel', '1.78.0', '--host', 'x86_64-unknown-linux-gnu', '--target', 'i686-unknown-linux-gnu', '--target', 'i686-pc-windows-gnu',