diff options
author | Aaron O'Mullan <aaron.omullan@gmail.com> | 2022-01-19 13:38:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-19 13:38:51 +0100 |
commit | 2ab21dafa768b3bb89f9a7f6550648263bc065d1 (patch) | |
tree | 584fbe7660d84a1cd85072412d65dd99610a94da /tools/wgpu_sync.js | |
parent | 1259a3f48c00e95a8bb0964e4dabfa769a20bcde (diff) |
experiment: wgpu sync (#13402)
Diffstat (limited to 'tools/wgpu_sync.js')
-rwxr-xr-x | tools/wgpu_sync.js | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tools/wgpu_sync.js b/tools/wgpu_sync.js new file mode 100755 index 000000000..341cffc71 --- /dev/null +++ b/tools/wgpu_sync.js @@ -0,0 +1,90 @@ +#!/usr/bin/env -S deno run --unstable --allow-read --allow-write --allow-run +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. + +import { join, ROOT_PATH } from "./util.js"; + +// const COMMIT = "c00e471274b6c21acda89b4b13d41742c0285d71"; // Release 12 +const COMMIT = "cdd480a89c9e3b681d9d174e65082d2bdbc903ef"; // tip +const REPO = "gfx-rs/wgpu"; +// const V_WGPU = "0.12.0"; +const TARGET_DIR = join(ROOT_PATH, "ext", "webgpu"); + +async function bash(subcmd, opts = {}) { + const p = Deno.run({ ...opts, cmd: ["bash", "-c", subcmd] }); + + // Exit process on failure + const { success, code } = await p.status(); + if (!success) { + Deno.exit(code); + } + // Cleanup + p.close(); +} + +async function clearTargetDir() { + await bash(`rm -r ${TARGET_DIR}/*`); +} + +async function checkoutUpstream() { + // Path of deno_webgpu inside the TAR + const tarPrefix = `gfx-rs-wgpu-${COMMIT.slice(0, 7)}/deno_webgpu/`; + const cmd = + `curl -L https://api.github.com/repos/${REPO}/tarball/${COMMIT} | tar -C '${TARGET_DIR}' -xzvf - --strip=2 '${tarPrefix}'`; + // console.log(cmd); + await bash(cmd); +} + +async function denoCoreVersion() { + const coreCargo = join(ROOT_PATH, "core", "Cargo.toml"); + const contents = await Deno.readTextFile(coreCargo); + return contents.match(/^version = "(\d+\.\d+\.\d+)"$/m)[1]; +} + +async function patchCargo() { + const vDenoCore = await denoCoreVersion(); + + const webgpuCargo = join(ROOT_PATH, "ext", "webgpu", "Cargo.toml"); + const data = await Deno.readTextFile(webgpuCargo); + + // Patch ext/webgpu/Cargo.toml's contents + const patched = data + .replace(`version = "0.17.0"`, `version = "0.33.0"`) + .replace(`edition = "2018"`, `edition = "2021"`) + .replace( + /^deno_core \= .*$/gm, + `deno_core = { version = "${vDenoCore}", path = "../../core" }`, + ) + // .replace(/^wgpu-core \= .*$/gm, `wgpu-core = { version = "${V_WGPU}", features = ["trace", "replay", "serde"] }`) + // .replace(/^wgpu-types \= .*$/gm, `wgpu-types = { version = "${V_WGPU}", features = ["trace", "replay", "serde"] }`) + .replace( + /^wgpu-core \= .*$/gm, + `wgpu-core = { git = "https://github.com/${REPO}", rev = "${COMMIT}", features = ["trace", "replay", "serde"] }`, + ) + .replace( + /^wgpu-types \= .*$/gm, + `wgpu-types = { git = "https://github.com/${REPO}", rev = "${COMMIT}", features = ["trace", "replay", "serde"] }`, + ); + + await Deno.writeTextFile(webgpuCargo, patched); +} + +async function patchSrcLib() { + const srcLib = join(ROOT_PATH, "ext", "webgpu", "src", "lib.rs"); + const data = await Deno.readTextFile(srcLib); + + // Patch ext/webgpu/src/lib.rs's contents + const patched = data + .replace(`prefix "deno:deno_webgpu",`, `prefix "deno:ext/webgpu",`); + + await Deno.writeTextFile(srcLib, patched); +} + +async function main() { + await clearTargetDir(); + await checkoutUpstream(); + await patchCargo(); + await patchSrcLib(); + await bash(join(ROOT_PATH, "tools", "format.js")); +} + +await main(); |