Fix nightly Rust pinning; rebuild Oxi

This commit is contained in:
Ingvar Stepanyan
2020-11-19 19:01:27 +00:00
committed by Ingvar Stepanyan
parent 750872aca6
commit f450373e3f
12 changed files with 230 additions and 269 deletions

View File

@@ -1,4 +0,0 @@
set -e
docker build -t squoosh-rust-nightly --build-arg RUST_IMG=rustlang/rust:nightly - < ../rust.Dockerfile
docker run --rm -v $PWD:/src squoosh-rust-nightly "$@"

View File

@@ -247,18 +247,18 @@ checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614"
[[package]] [[package]]
name = "libdeflate-sys" name = "libdeflate-sys"
version = "0.5.0" version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21e39efa87b84db3e13ff4e2dfac1e57220abcbd7fe8ec44d238f7f4f787cc1f" checksum = "2f5b1582a0ebf8c55a46166c04d7c66f6bb17add3a6cbf69a082ac2219f31671"
dependencies = [ dependencies = [
"cc", "cc",
] ]
[[package]] [[package]]
name = "libdeflater" name = "libdeflater"
version = "0.5.0" version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4810980d791f26d470e2d7d91a3d4d22aa3a4b709fb7e9c5e43ee54f83a01f2" checksum = "93edd93a53970951da84ef733a8b6e30189a8f8a9e19610f69e4cc5bb1f4d654"
dependencies = [ dependencies = [
"libdeflate-sys", "libdeflate-sys",
] ]
@@ -359,9 +359,9 @@ checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0"
[[package]] [[package]]
name = "oxipng" name = "oxipng"
version = "4.0.0" version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea40b366cecfce76ee3b082e7e6567b82cdef75644a22442ca8584bc666ff4eb" checksum = "9fefb26bde273c3db896a313151301a69e698a7495ee577fe2168ed7065c29c4"
dependencies = [ dependencies = [
"bit-vec", "bit-vec",
"byteorder", "byteorder",

View File

@@ -3,6 +3,8 @@
set -e set -e
rm -rf pkg,{-parallel} rm -rf pkg,{-parallel}
wasm-pack build --target web wasm-pack build -t web
RUSTFLAGS='-C target-feature=+atomics,+bulk-memory' wasm-pack build -t web -d pkg-parallel -- -Z build-std=panic_abort,std --features=parallel RUSTFLAGS='-C target-feature=+atomics,+bulk-memory' wasm-pack build -t web -d pkg-parallel -- -Z build-std=panic_abort,std --features=parallel
# Workaround https://github.com/rustwasm/wasm-bindgen/issues/2133:
sed -i "s|maybe_memory:|maybe_memory?:|" pkg-parallel/squoosh_oxipng.d.ts
rm pkg{,-parallel}/.gitignore rm pkg{,-parallel}/.gitignore

View File

@@ -1,6 +1,6 @@
{ {
"name": "oxipng", "name": "oxipng",
"scripts": { "scripts": {
"build": "RUST_IMG=rustlang/rust:8bb115b1090d ../build-rust.sh ./build.sh" "build": "RUST_IMG=rustlang/rust@sha256:744aeea5a38f95aa7a96ec37269a65f0c6197a1cdd87d6534e12bb869141d807 ../build-rust.sh ./build.sh"
} }
} }

View File

@@ -1,29 +1,24 @@
/* tslint:disable */ /* tslint:disable */
/* eslint-disable */ /* eslint-disable */
/** /**
* @param {Uint8Array} data * @param {Uint8Array} data
* @param {number} level * @param {number} level
* @returns {Uint8Array} * @returns {Uint8Array}
*/ */
export function optimise(data: Uint8Array, level: number): Uint8Array; export function optimise(data: Uint8Array, level: number): Uint8Array;
/** /**
* @param {number} num * @param {number} num
* @returns {any} * @returns {any}
*/ */
export function worker_initializer(num: number): any; export function worker_initializer(num: number): any;
/** /**
*/ */
export function start_main_thread(): void; export function start_main_thread(): void;
/** /**
*/ */
export function start_worker_thread(): void; export function start_worker_thread(): void;
export type InitInput = export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
| RequestInfo
| URL
| Response
| BufferSource
| WebAssembly.Module;
export interface InitOutput { export interface InitOutput {
readonly optimise: (a: number, b: number, c: number, d: number) => void; readonly optimise: (a: number, b: number, c: number, d: number) => void;
@@ -39,15 +34,13 @@ export interface InitOutput {
} }
/** /**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly. * for everything else, calls `WebAssembly.instantiate` directly.
* *
* @param {InitInput | Promise<InitInput>} module_or_path * @param {InitInput | Promise<InitInput>} module_or_path
* @param {WebAssembly.Memory} maybe_memory * @param {WebAssembly.Memory} maybe_memory
* *
* @returns {Promise<InitOutput>} * @returns {Promise<InitOutput>}
*/ */
export default function init( export default function init (module_or_path?: InitInput | Promise<InitInput>, maybe_memory?: WebAssembly.Memory): Promise<InitOutput>;
module_or_path?: InitInput | Promise<InitInput>,
maybe_memory?: WebAssembly.Memory,
): Promise<InitOutput>;

View File

@@ -1,3 +1,4 @@
let wasm; let wasm;
let memory; let memory;
@@ -16,19 +17,13 @@ function addHeapObject(obj) {
return idx; return idx;
} }
let cachedTextDecoder = new TextDecoder('utf-8', { let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
ignoreBOM: true,
fatal: true,
});
cachedTextDecoder.decode(); cachedTextDecoder.decode();
let cachegetUint8Memory0 = null; let cachegetUint8Memory0 = null;
function getUint8Memory0() { function getUint8Memory0() {
if ( if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.__wbindgen_export_0.buffer) {
cachegetUint8Memory0 === null ||
cachegetUint8Memory0.buffer !== wasm.__wbindgen_export_0.buffer
) {
cachegetUint8Memory0 = new Uint8Array(wasm.__wbindgen_export_0.buffer); cachegetUint8Memory0 = new Uint8Array(wasm.__wbindgen_export_0.buffer);
} }
return cachegetUint8Memory0; return cachegetUint8Memory0;
@@ -49,10 +44,7 @@ function passArray8ToWasm0(arg, malloc) {
let cachegetInt32Memory0 = null; let cachegetInt32Memory0 = null;
function getInt32Memory0() { function getInt32Memory0() {
if ( if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.__wbindgen_export_0.buffer) {
cachegetInt32Memory0 === null ||
cachegetInt32Memory0.buffer !== wasm.__wbindgen_export_0.buffer
) {
cachegetInt32Memory0 = new Int32Array(wasm.__wbindgen_export_0.buffer); cachegetInt32Memory0 = new Int32Array(wasm.__wbindgen_export_0.buffer);
} }
return cachegetInt32Memory0; return cachegetInt32Memory0;
@@ -62,10 +54,10 @@ function getArrayU8FromWasm0(ptr, len) {
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
} }
/** /**
* @param {Uint8Array} data * @param {Uint8Array} data
* @param {number} level * @param {number} level
* @returns {Uint8Array} * @returns {Uint8Array}
*/ */
export function optimise(data, level) { export function optimise(data, level) {
try { try {
const retptr = wasm.__wbindgen_export_1.value - 16; const retptr = wasm.__wbindgen_export_1.value - 16;
@@ -83,9 +75,7 @@ export function optimise(data, level) {
} }
} }
function getObject(idx) { function getObject(idx) { return heap[idx]; }
return heap[idx];
}
function dropObject(idx) { function dropObject(idx) {
if (idx < 36) return; if (idx < 36) return;
@@ -99,42 +89,37 @@ function takeObject(idx) {
return ret; return ret;
} }
/** /**
* @param {number} num * @param {number} num
* @returns {any} * @returns {any}
*/ */
export function worker_initializer(num) { export function worker_initializer(num) {
var ret = wasm.worker_initializer(num); var ret = wasm.worker_initializer(num);
return takeObject(ret); return takeObject(ret);
} }
/** /**
*/ */
export function start_main_thread() { export function start_main_thread() {
wasm.start_main_thread(); wasm.start_main_thread();
} }
/** /**
*/ */
export function start_worker_thread() { export function start_worker_thread() {
wasm.start_worker_thread(); wasm.start_worker_thread();
} }
async function load(module, imports, maybe_memory) { async function load(module, imports, maybe_memory) {
if (typeof Response === 'function' && module instanceof Response) { if (typeof Response === 'function' && module instanceof Response) {
memory = imports.wbg.memory = new WebAssembly.Memory({ memory = imports.wbg.memory = new WebAssembly.Memory({initial:17,maximum:16384,shared:true});
initial: 17,
maximum: 16384,
shared: true,
});
if (typeof WebAssembly.instantiateStreaming === 'function') { if (typeof WebAssembly.instantiateStreaming === 'function') {
try { try {
return await WebAssembly.instantiateStreaming(module, imports); return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) { } catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') { if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn( console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
'`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n',
e,
);
} else { } else {
throw e; throw e;
} }
@@ -143,12 +128,14 @@ async function load(module, imports, maybe_memory) {
const bytes = await module.arrayBuffer(); const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports); return await WebAssembly.instantiate(bytes, imports);
} else { } else {
memory = imports.wbg.memory = maybe_memory; memory = imports.wbg.memory = maybe_memory;
const instance = await WebAssembly.instantiate(module, imports); const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) { if (instance instanceof WebAssembly.Instance) {
return { instance, module }; return { instance, module };
} else { } else {
return instance; return instance;
} }
@@ -161,27 +148,23 @@ async function init(input, maybe_memory) {
} }
const imports = {}; const imports = {};
imports.wbg = {}; imports.wbg = {};
imports.wbg.__wbindgen_module = function () { imports.wbg.__wbindgen_module = function() {
var ret = init.__wbindgen_wasm_module; var ret = init.__wbindgen_wasm_module;
return addHeapObject(ret); return addHeapObject(ret);
}; };
imports.wbg.__wbindgen_memory = function () { imports.wbg.__wbindgen_memory = function() {
var ret = wasm.__wbindgen_export_0; var ret = wasm.__wbindgen_export_0;
return addHeapObject(ret); return addHeapObject(ret);
}; };
imports.wbg.__wbg_of_6510501edc06d65e = function (arg0, arg1) { imports.wbg.__wbg_of_6510501edc06d65e = function(arg0, arg1) {
var ret = Array.of(takeObject(arg0), takeObject(arg1)); var ret = Array.of(takeObject(arg0), takeObject(arg1));
return addHeapObject(ret); return addHeapObject(ret);
}; };
imports.wbg.__wbindgen_throw = function (arg0, arg1) { imports.wbg.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1)); throw new Error(getStringFromWasm0(arg0, arg1));
}; };
if ( if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
typeof input === 'string' ||
(typeof Request === 'function' && input instanceof Request) ||
(typeof URL === 'function' && input instanceof URL)
) {
input = fetch(input); input = fetch(input);
} }
@@ -194,3 +177,4 @@ async function init(input, maybe_memory) {
} }
export default init; export default init;

View File

@@ -1,18 +1,13 @@
/* tslint:disable */ /* tslint:disable */
/* eslint-disable */ /* eslint-disable */
/** /**
* @param {Uint8Array} data * @param {Uint8Array} data
* @param {number} level * @param {number} level
* @returns {Uint8Array} * @returns {Uint8Array}
*/ */
export function optimise(data: Uint8Array, level: number): Uint8Array; export function optimise(data: Uint8Array, level: number): Uint8Array;
export type InitInput = export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
| RequestInfo
| URL
| Response
| BufferSource
| WebAssembly.Module;
export interface InitOutput { export interface InitOutput {
readonly memory: WebAssembly.Memory; readonly memory: WebAssembly.Memory;
@@ -24,13 +19,12 @@ export interface InitOutput {
} }
/** /**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly. * for everything else, calls `WebAssembly.instantiate` directly.
* *
* @param {InitInput | Promise<InitInput>} module_or_path * @param {InitInput | Promise<InitInput>} module_or_path
* *
* @returns {Promise<InitOutput>} * @returns {Promise<InitOutput>}
*/ */
export default function init( export default function init (module_or_path?: InitInput | Promise<InitInput>): Promise<InitOutput>;
module_or_path?: InitInput | Promise<InitInput>,
): Promise<InitOutput>;

View File

@@ -1,18 +1,13 @@
let wasm; let wasm;
let cachedTextDecoder = new TextDecoder('utf-8', { let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
ignoreBOM: true,
fatal: true,
});
cachedTextDecoder.decode(); cachedTextDecoder.decode();
let cachegetUint8Memory0 = null; let cachegetUint8Memory0 = null;
function getUint8Memory0() { function getUint8Memory0() {
if ( if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
cachegetUint8Memory0 === null ||
cachegetUint8Memory0.buffer !== wasm.memory.buffer
) {
cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
} }
return cachegetUint8Memory0; return cachegetUint8Memory0;
@@ -33,10 +28,7 @@ function passArray8ToWasm0(arg, malloc) {
let cachegetInt32Memory0 = null; let cachegetInt32Memory0 = null;
function getInt32Memory0() { function getInt32Memory0() {
if ( if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
cachegetInt32Memory0 === null ||
cachegetInt32Memory0.buffer !== wasm.memory.buffer
) {
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
} }
return cachegetInt32Memory0; return cachegetInt32Memory0;
@@ -46,10 +38,10 @@ function getArrayU8FromWasm0(ptr, len) {
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
} }
/** /**
* @param {Uint8Array} data * @param {Uint8Array} data
* @param {number} level * @param {number} level
* @returns {Uint8Array} * @returns {Uint8Array}
*/ */
export function optimise(data, level) { export function optimise(data, level) {
try { try {
const retptr = wasm.__wbindgen_export_0.value - 16; const retptr = wasm.__wbindgen_export_0.value - 16;
@@ -69,15 +61,15 @@ export function optimise(data, level) {
async function load(module, imports) { async function load(module, imports) {
if (typeof Response === 'function' && module instanceof Response) { if (typeof Response === 'function' && module instanceof Response) {
if (typeof WebAssembly.instantiateStreaming === 'function') { if (typeof WebAssembly.instantiateStreaming === 'function') {
try { try {
return await WebAssembly.instantiateStreaming(module, imports); return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) { } catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') { if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn( console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
'`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n',
e,
);
} else { } else {
throw e; throw e;
} }
@@ -86,11 +78,14 @@ async function load(module, imports) {
const bytes = await module.arrayBuffer(); const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports); return await WebAssembly.instantiate(bytes, imports);
} else { } else {
const instance = await WebAssembly.instantiate(module, imports); const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) { if (instance instanceof WebAssembly.Instance) {
return { instance, module }; return { instance, module };
} else { } else {
return instance; return instance;
} }
@@ -103,15 +98,11 @@ async function init(input) {
} }
const imports = {}; const imports = {};
imports.wbg = {}; imports.wbg = {};
imports.wbg.__wbindgen_throw = function (arg0, arg1) { imports.wbg.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1)); throw new Error(getStringFromWasm0(arg0, arg1));
}; };
if ( if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
typeof input === 'string' ||
(typeof Request === 'function' && input instanceof Request) ||
(typeof URL === 'function' && input instanceof URL)
) {
input = fetch(input); input = fetch(input);
} }
@@ -124,3 +115,4 @@ async function init(input) {
} }
export default init; export default init;

View File

@@ -7,7 +7,7 @@ RUN wget -qO- https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1/was
FROM $RUST_IMG AS rust FROM $RUST_IMG AS rust
ARG RUST_IMG ARG RUST_IMG
RUN rustup target add wasm32-unknown-unknown RUN rustup target add wasm32-unknown-unknown
RUN if [[ $RUST_IMG = rustlang/rust:* ]] ; then rustup component add rust-src ; fi RUN case $RUST_IMG in rustlang/rust@*) rustup component add rust-src; esac
COPY --from=wasm-tools /emsdk/upstream/bin/wasm-opt /emsdk/upstream/bin/clang /usr/local/bin/ COPY --from=wasm-tools /emsdk/upstream/bin/wasm-opt /emsdk/upstream/bin/clang /usr/local/bin/
COPY --from=wasm-tools /emsdk/upstream/lib/ /usr/local/lib/ COPY --from=wasm-tools /emsdk/upstream/lib/ /usr/local/lib/
COPY --from=wasm-tools /emsdk/upstream/emscripten/system/include/libc/ /wasm32/include/ COPY --from=wasm-tools /emsdk/upstream/emscripten/system/include/libc/ /wasm32/include/