diff --git a/substrate/utils/wasm-builder/src/prerequisites.rs b/substrate/utils/wasm-builder/src/prerequisites.rs
index f5a985ab92b5d6b4b6b680aa5dad43eabef8cc4e..8e81e6774faa68b0081a5cb0b679175160440042 100644
--- a/substrate/utils/wasm-builder/src/prerequisites.rs
+++ b/substrate/utils/wasm-builder/src/prerequisites.rs
@@ -143,9 +143,10 @@ fn check_wasm_toolchain_installed(
 	run_cmd.current_dir(&temp);
 	run_cmd.args(&["run", "--manifest-path", &manifest_path]);
 
-	// Unset the `CARGO_TARGET_DIR` to prevent a cargo deadlock
-	build_cmd.env_remove("CARGO_TARGET_DIR");
-	run_cmd.env_remove("CARGO_TARGET_DIR");
+	// manually set the `CARGO_TARGET_DIR` to prevent a cargo deadlock
+	let target_dir = temp.path().join("target").display().to_string();
+	build_cmd.env("CARGO_TARGET_DIR", &target_dir);
+	run_cmd.env("CARGO_TARGET_DIR", &target_dir);
 
 	// Make sure the host's flags aren't used here, e.g. if an alternative linker is specified
 	// in the RUSTFLAGS then the check we do here will break unless we clear these.
diff --git a/substrate/utils/wasm-builder/src/wasm_project.rs b/substrate/utils/wasm-builder/src/wasm_project.rs
index 849af853c6da4647df7bd8bdd0135e6e1e8ac381..da6fab863df43cab655819172e7f5ae4a35c80b9 100644
--- a/substrate/utils/wasm-builder/src/wasm_project.rs
+++ b/substrate/utils/wasm-builder/src/wasm_project.rs
@@ -670,10 +670,10 @@ fn build_project(
 		.args(&["rustc", "--target=wasm32-unknown-unknown"])
 		.arg(format!("--manifest-path={}", manifest_path.display()))
 		.env("RUSTFLAGS", rustflags)
-		// Unset the `CARGO_TARGET_DIR` to prevent a cargo deadlock (cargo locks a target dir
+		// Manually set the `CARGO_TARGET_DIR` to prevent a cargo deadlock (cargo locks a target dir
 		// exclusive). The runner project is created in `CARGO_TARGET_DIR` and executing it will
 		// create a sub target directory inside of `CARGO_TARGET_DIR`.
-		.env_remove("CARGO_TARGET_DIR")
+		.env("CARGO_TARGET_DIR", &project.join("target").display().to_string())
 		// As we are being called inside a build-script, this env variable is set. However, we set
 		// our own `RUSTFLAGS` and thus, we need to remove this. Otherwise cargo favors this
 		// env variable.