mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 10:27:59 +00:00
wasm-builder: Fix constant re-running of build.rs scripts. (#11624)
Recently we added the wasm binaries to the `rerun-if-changed` list. The problem with that is that they have a later mtime than the `invoked.timestamp` file and this file's mtime is used to determine if the `build.rs` script needs to be re-run. The solution to this is that we copy the mtime of this `invoked.timestamp` file and add it to the wasm binaries. Then cargo/rustc doesn't constantly wants to rerun the `build.rs` script.
This commit is contained in:
@@ -152,9 +152,41 @@ pub(crate) fn create_and_compile(
|
||||
&bloaty,
|
||||
);
|
||||
|
||||
if let Err(err) = adjust_mtime(&bloaty, final_wasm_binary.as_ref()) {
|
||||
build_helper::warning!("Error while adjusting the mtime of the wasm binaries: {}", err)
|
||||
}
|
||||
|
||||
(final_wasm_binary, bloaty)
|
||||
}
|
||||
|
||||
/// Adjust the mtime of the bloaty and compressed/compact wasm files.
|
||||
///
|
||||
/// We add the bloaty and the compressed/compact wasm file to the `rerun-if-changed` files.
|
||||
/// Cargo/Rustc determines based on the timestamp of the `invoked.timestamp` file that can be found
|
||||
/// in the `OUT_DIR/..`, if it needs to rerun a `build.rs` script. The problem is that this
|
||||
/// `invoked.timestamp` is created when the `build.rs` is executed and the wasm binaries are created
|
||||
/// later. This leads to them having a later mtime than the `invoked.timestamp` file and thus,
|
||||
/// cargo/rustc always re-executes the `build.rs` script. To hack around this, we copy the mtime of
|
||||
/// the `invoked.timestamp` to the wasm binaries.
|
||||
fn adjust_mtime(
|
||||
bloaty_wasm: &WasmBinaryBloaty,
|
||||
compressed_or_compact_wasm: Option<&WasmBinary>,
|
||||
) -> std::io::Result<()> {
|
||||
let out_dir = build_helper::out_dir();
|
||||
let invoked_timestamp = out_dir.join("../invoked.timestamp");
|
||||
|
||||
// Get the mtime of the `invoked.timestamp`
|
||||
let metadata = fs::metadata(invoked_timestamp)?;
|
||||
let mtime = filetime::FileTime::from_last_modification_time(&metadata);
|
||||
|
||||
filetime::set_file_mtime(bloaty_wasm.wasm_binary_bloaty_path(), mtime)?;
|
||||
if let Some(binary) = compressed_or_compact_wasm.as_ref() {
|
||||
filetime::set_file_mtime(binary.wasm_binary_path(), mtime)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Find the `Cargo.lock` relative to the `OUT_DIR` environment variable.
|
||||
///
|
||||
/// If the `Cargo.lock` cannot be found, we emit a warning and return `None`.
|
||||
|
||||
Reference in New Issue
Block a user