From c5c520a71d94d0517e361da36ea2340dc6e5bdf2 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Mon, 13 Jul 2020 20:43:44 +0100 Subject: [PATCH 1/6] Consolidate Rust builds This consolidates Rust build process for various codecs into a single top-level image that is built once and reused. This ensures that we use same version of tools across codecs (now controlled from a single place), simplifies build configs and commands, speeds up common builds and reduces disk space taken by Docker images by reusing same one. Additionally, this PR renames all codecs to squoosh-* to work around the https://github.com/rustwasm/wasm-pack/issues/829 (which has been already fixed on master of wasm-pack but not released in a while), as well as adds `publish = false` to Cargo.toml to avoid accidental publishing for now. I'm planning to do similar for Emscripten in a separate PR, although abilities to share configs there are much more limited due to lack of package manager in C++. --- codecs/build-rust.sh | 4 ++ codecs/hqx/Cargo.toml | 3 +- codecs/hqx/build.sh | 25 ------- codecs/hqx/package.json | 3 +- codecs/hqx/pkg/package.json | 14 ++-- codecs/hqx/pkg/squoosh_hqx.d.ts | 10 +++ codecs/hqx/pkg/squoosh_hqx.js | 2 + ...squooshhqx_bg.d.ts => squoosh_hqx_bg.d.ts} | 3 +- codecs/hqx/pkg/squoosh_hqx_bg.js | 48 ++++++++++++++ codecs/hqx/pkg/squoosh_hqx_bg.wasm | Bin 0 -> 389871 bytes codecs/hqx/pkg/squooshhqx.d.ts | 9 --- codecs/hqx/pkg/squooshhqx.js | 46 ------------- codecs/hqx/pkg/squooshhqx_bg.wasm | Bin 224266 -> 0 bytes codecs/oxipng/Cargo.lock | 62 ++---------------- codecs/oxipng/Cargo.toml | 3 - codecs/oxipng/build.sh | 22 ------- codecs/oxipng/package.json | 3 +- codecs/oxipng/pkg/squoosh_oxipng_bg.wasm | Bin 344673 -> 333261 bytes codecs/resize/Cargo.toml | 3 +- codecs/resize/Dockerfile | 9 --- codecs/resize/build.sh | 22 ------- codecs/resize/package.json | 3 +- codecs/resize/pkg/package.json | 14 ++-- codecs/resize/pkg/resize.d.ts | 13 ---- codecs/resize/pkg/resize.js | 50 -------------- codecs/resize/pkg/resize_bg.wasm | Bin 19893 -> 0 bytes codecs/resize/pkg/squoosh_resize.d.ts | 14 ++++ codecs/resize/pkg/squoosh_resize.js | 2 + ...{resize_bg.d.ts => squoosh_resize_bg.d.ts} | 3 +- codecs/resize/pkg/squoosh_resize_bg.js | 52 +++++++++++++++ codecs/resize/pkg/squoosh_resize_bg.wasm | Bin 0 -> 17138 bytes codecs/rotate/Cargo.toml | 3 +- codecs/rotate/build.sh | 26 ++------ codecs/rotate/package.json | 3 +- codecs/rotate/rotate.wasm | Bin 1435 -> 1377 bytes codecs/rust.Dockerfile | 15 +++++ 36 files changed, 187 insertions(+), 302 deletions(-) create mode 100644 codecs/build-rust.sh delete mode 100755 codecs/hqx/build.sh create mode 100644 codecs/hqx/pkg/squoosh_hqx.d.ts create mode 100644 codecs/hqx/pkg/squoosh_hqx.js rename codecs/hqx/pkg/{squooshhqx_bg.d.ts => squoosh_hqx_bg.d.ts} (92%) create mode 100644 codecs/hqx/pkg/squoosh_hqx_bg.js create mode 100644 codecs/hqx/pkg/squoosh_hqx_bg.wasm delete mode 100644 codecs/hqx/pkg/squooshhqx.d.ts delete mode 100644 codecs/hqx/pkg/squooshhqx.js delete mode 100644 codecs/hqx/pkg/squooshhqx_bg.wasm delete mode 100755 codecs/oxipng/build.sh delete mode 100644 codecs/resize/Dockerfile delete mode 100755 codecs/resize/build.sh delete mode 100644 codecs/resize/pkg/resize.d.ts delete mode 100644 codecs/resize/pkg/resize.js delete mode 100644 codecs/resize/pkg/resize_bg.wasm create mode 100644 codecs/resize/pkg/squoosh_resize.d.ts create mode 100644 codecs/resize/pkg/squoosh_resize.js rename codecs/resize/pkg/{resize_bg.d.ts => squoosh_resize_bg.d.ts} (93%) create mode 100644 codecs/resize/pkg/squoosh_resize_bg.js create mode 100644 codecs/resize/pkg/squoosh_resize_bg.wasm create mode 100644 codecs/rust.Dockerfile diff --git a/codecs/build-rust.sh b/codecs/build-rust.sh new file mode 100644 index 00000000..0cbe3ffa --- /dev/null +++ b/codecs/build-rust.sh @@ -0,0 +1,4 @@ +set -e + +docker build -t squoosh-rust - < ../rust.Dockerfile +docker run --rm -v $PWD:/src squoosh-rust "$@" diff --git a/codecs/hqx/Cargo.toml b/codecs/hqx/Cargo.toml index 742d0751..889d3bbc 100644 --- a/codecs/hqx/Cargo.toml +++ b/codecs/hqx/Cargo.toml @@ -1,7 +1,8 @@ [package] -name = "squooshhqx" +name = "squoosh-hqx" version = "0.1.0" authors = ["Surma "] +publish = false [lib] crate-type = ["cdylib"] diff --git a/codecs/hqx/build.sh b/codecs/hqx/build.sh deleted file mode 100755 index 6f62fc8a..00000000 --- a/codecs/hqx/build.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -echo "=============================================" -echo "Compiling wasm" -echo "=============================================" -( - wasm-pack build - wasm-strip pkg/squooshhqx_bg.wasm - echo "Optimising Wasm so it doesn't break Chrome (this takes like 10-15mins. get a cup of tea)" - echo "Once https://crbug.com/974804 is fixed, we can remove this step" - wasm-opt -Os --no-validation -o pkg/squooshhqx_bg.wasm pkg/squooshhqx_bg.wasm - rm pkg/.gitignore -) -echo "=============================================" -echo "Compiling wasm done" -echo "=============================================" - -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "Did you update your docker image?" -echo "Run \`docker pull ubuntu\`" -echo "Run \`docker pull rust\`" -echo "Run \`docker build -t squoosh-hqx .\`" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" diff --git a/codecs/hqx/package.json b/codecs/hqx/package.json index 9c50eb01..fd51d432 100644 --- a/codecs/hqx/package.json +++ b/codecs/hqx/package.json @@ -1,7 +1,6 @@ { "name": "hqx", "scripts": { - "build:image": "docker build -t squoosh-hqx .", - "build": "docker run --rm -v $(pwd):/src squoosh-hqx ./build.sh" + "build": "../build-rust.sh" } } diff --git a/codecs/hqx/pkg/package.json b/codecs/hqx/pkg/package.json index 03ff78cb..c7b878ba 100644 --- a/codecs/hqx/pkg/package.json +++ b/codecs/hqx/pkg/package.json @@ -1,15 +1,15 @@ { - "name": "squooshhqx", + "name": "squoosh-hqx", "collaborators": [ "Surma " ], "version": "0.1.0", "files": [ - "squooshhqx_bg.wasm", - "squooshhqx.js", - "squooshhqx.d.ts" + "squoosh_hqx_bg.wasm", + "squoosh_hqx.js", + "squoosh_hqx.d.ts" ], - "module": "squooshhqx.js", - "types": "squooshhqx.d.ts", - "sideEffects": "false" + "module": "squoosh_hqx.js", + "types": "squoosh_hqx.d.ts", + "sideEffects": false } \ No newline at end of file diff --git a/codecs/hqx/pkg/squoosh_hqx.d.ts b/codecs/hqx/pkg/squoosh_hqx.d.ts new file mode 100644 index 00000000..8d8f5f2e --- /dev/null +++ b/codecs/hqx/pkg/squoosh_hqx.d.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +* @param {Uint32Array} input_image +* @param {number} input_width +* @param {number} input_height +* @param {number} factor +* @returns {Uint32Array} +*/ +export function resize(input_image: Uint32Array, input_width: number, input_height: number, factor: number): Uint32Array; diff --git a/codecs/hqx/pkg/squoosh_hqx.js b/codecs/hqx/pkg/squoosh_hqx.js new file mode 100644 index 00000000..7e20704e --- /dev/null +++ b/codecs/hqx/pkg/squoosh_hqx.js @@ -0,0 +1,2 @@ +import * as wasm from "./squoosh_hqx_bg.wasm"; +export * from "./squoosh_hqx_bg.js"; \ No newline at end of file diff --git a/codecs/hqx/pkg/squooshhqx_bg.d.ts b/codecs/hqx/pkg/squoosh_hqx_bg.d.ts similarity index 92% rename from codecs/hqx/pkg/squooshhqx_bg.d.ts rename to codecs/hqx/pkg/squoosh_hqx_bg.d.ts index 808e05a7..9cb7574d 100644 --- a/codecs/hqx/pkg/squooshhqx_bg.d.ts +++ b/codecs/hqx/pkg/squoosh_hqx_bg.d.ts @@ -1,5 +1,6 @@ /* tslint:disable */ +/* eslint-disable */ export const memory: WebAssembly.Memory; +export function resize(a: number, b: number, c: number, d: number, e: number, f: number): void; export function __wbindgen_malloc(a: number): number; export function __wbindgen_free(a: number, b: number): void; -export function resize(a: number, b: number, c: number, d: number, e: number, f: number): void; diff --git a/codecs/hqx/pkg/squoosh_hqx_bg.js b/codecs/hqx/pkg/squoosh_hqx_bg.js new file mode 100644 index 00000000..c2201da3 --- /dev/null +++ b/codecs/hqx/pkg/squoosh_hqx_bg.js @@ -0,0 +1,48 @@ +import * as wasm from './squoosh_hqx_bg.wasm'; + +let cachegetUint32Memory0 = null; +function getUint32Memory0() { + if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) { + cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory0; +} + +let WASM_VECTOR_LEN = 0; + +function passArray32ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 4); + getUint32Memory0().set(arg, ptr / 4); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +function getArrayU32FromWasm0(ptr, len) { + return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len); +} +/** +* @param {Uint32Array} input_image +* @param {number} input_width +* @param {number} input_height +* @param {number} factor +* @returns {Uint32Array} +*/ +export function resize(input_image, input_width, input_height, factor) { + var ptr0 = passArray32ToWasm0(input_image, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + wasm.resize(8, ptr0, len0, input_width, input_height, factor); + var r0 = getInt32Memory0()[8 / 4 + 0]; + var r1 = getInt32Memory0()[8 / 4 + 1]; + var v1 = getArrayU32FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 4); + return v1; +} + diff --git a/codecs/hqx/pkg/squoosh_hqx_bg.wasm b/codecs/hqx/pkg/squoosh_hqx_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..86d0d9c874974f6508d5bb83457b16c8f848e281 GIT binary patch literal 389871 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