///|
/// The view contains only current-version files. No global toolchain or cache is rewritten.
async fn runtime_view(env : Environment) -> String? {
if env.runtime_mode != "sync" {
return None
}
guard sync_eligible(env) else {
fail(
"sync runtime unavailable; run ZIG_CROSS_RUNTIME=sync zig-cross doctor --json",
)
return None
}
let source = env.toolchain_root.unwrap()
let view = @fs.realpath(@fs.tmpdir(prefix="zig-cross-sync-"))
errdefer @fs.rmdir(view, recursive=true)
for name in ["bin", "include", "share"] {
if @fs.exists(source + "/" + name) {
@fs.symlink(target=source + "/" + name, view + "/" + name)
}
}
@fs.mkdir(view + "/lib/runtime", recursive=true)
for name in @fs.readdir(source + "/lib", include_hidden=true) {
if name != "runtime" {
@fs.symlink(target=source + "/lib/" + name, view + "/lib/" + name)
}
}
for
name in [
"runtime.c", "env.c", "sync_io.c", "utf.c", "backtrace.c", "c_buffer.c",
] {
@fs.write_file(
view + "/lib/runtime/" + name,
@fs.read_file(source + "/lib/runtime/" + name),
)
}
Some(view)
}