From 6d061d8fa25418dda35d453233ae48a135a6959d Mon Sep 17 00:00:00 2001 From: Surma Date: Wed, 14 Aug 2024 14:07:21 +0100 Subject: [PATCH] WIP --- codecs/resize/flake.lock | 74 +++++++---- codecs/resize/flake.nix | 92 +++++++------- codecs/resize/wasm_build/squoosh_resize.d.ts | 34 +++++ codecs/resize/wasm_build/squoosh_resize.js | 120 ++++++++++++++++++ .../resize/wasm_build/squoosh_resize_bg.wasm | Bin 0 -> 36810 bytes .../wasm_build/squoosh_resize_bg.wasm.d.ts | 7 + nix/rust-helpers/flake.nix | 74 +++++++++++ nix/squoosh-codec-builders/flake.nix | 66 ++++++++++ nix/wasm-bindgen/flake.nix | 40 +++--- 9 files changed, 415 insertions(+), 92 deletions(-) create mode 100644 codecs/resize/wasm_build/squoosh_resize.d.ts create mode 100644 codecs/resize/wasm_build/squoosh_resize.js create mode 100644 codecs/resize/wasm_build/squoosh_resize_bg.wasm create mode 100644 codecs/resize/wasm_build/squoosh_resize_bg.wasm.d.ts create mode 100644 nix/rust-helpers/flake.nix create mode 100644 nix/squoosh-codec-builders/flake.nix diff --git a/codecs/resize/flake.lock b/codecs/resize/flake.lock index 4cee021d..1d9374a4 100644 --- a/codecs/resize/flake.lock +++ b/codecs/resize/flake.lock @@ -2,15 +2,15 @@ "nodes": { "fenix": { "inputs": { - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1723012113, - "narHash": "sha256-AJGsmwDnheWMjZWUqgiGtBjbxMmvLvMp5WJhmTRhJ4w=", + "lastModified": 1723616992, + "narHash": "sha256-jDHYfEECzFwZm4huz7AbPjlH3jJ4/2ns9PddtFA5XMY=", "owner": "nix-community", "repo": "fenix", - "rev": "3dab4ada5b0c5a22d56dbfd7e140c16f3df2e69a", + "rev": "7bad6c7ff73b784a9c7de9147626c8d5d5072809", "type": "github" }, "original": { @@ -38,22 +38,6 @@ } }, "nixpkgs": { - "locked": { - "lastModified": 1722813957, - "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { "locked": { "lastModified": 1717179513, "narHash": "sha256-vboIEwIQojofItm2xGCdZCzW96U85l9nDW3ifMuAIdM=", @@ -69,22 +53,38 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1723362943, + "narHash": "sha256-dFZRVSgmJkyM0bkPpaYRtG/kRMRTorUIDj8BxoOt1T4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a58bc8ad779655e790115244571758e8de055e3d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { - "fenix": "fenix", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", + "rust-helpers": "rust-helpers", "wasm-bindgen": "wasm-bindgen" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1722925734, - "narHash": "sha256-5maDP51jkTUCHDU7tKdbsMQTk0QMNZjNGZw2z++YaaI=", + "lastModified": 1723561310, + "narHash": "sha256-a3KMMsIDvdo+ClLabh5wfJoa17YTSvy2wDLb8yZCXvc=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "b23142209ef632475915e858f5f20901ef7c12da", + "rev": "78c2bdce860dbd996a8083224d01a96660dd6a15", "type": "github" }, "original": { @@ -94,6 +94,24 @@ "type": "github" } }, + "rust-helpers": { + "inputs": { + "fenix": "fenix", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-AP5n4QOJS+7V9O0hnZPavnvctfsgfwybu5XOT1HdRcw=", + "path": "/nix/store/azy8v63kkb5d39z0zmpixx3hhq2l4h6i-source/nix/rust-helpers", + "type": "path" + }, + "original": { + "path": "/nix/store/azy8v63kkb5d39z0zmpixx3hhq2l4h6i-source/nix/rust-helpers", + "type": "path" + } + }, "systems": { "locked": { "lastModified": 1681028828, @@ -117,12 +135,12 @@ }, "locked": { "lastModified": 1, - "narHash": "sha256-ZBQyty6638OHI5UZBk79+VY3LOAO51OexUMn4AQWS3Y=", - "path": "/nix/store/qmv8wrsh9s2i7z7b5a5iak6nark83267-source/nix/wasm-bindgen", + "narHash": "sha256-gb2y+PtDL1uqCVebD4ViN5ruWOmHLburm1gp6xWxx9Y=", + "path": "/nix/store/azy8v63kkb5d39z0zmpixx3hhq2l4h6i-source/nix/wasm-bindgen", "type": "path" }, "original": { - "path": "/nix/store/qmv8wrsh9s2i7z7b5a5iak6nark83267-source/nix/wasm-bindgen", + "path": "/nix/store/azy8v63kkb5d39z0zmpixx3hhq2l4h6i-source/nix/wasm-bindgen", "type": "path" } } diff --git a/codecs/resize/flake.nix b/codecs/resize/flake.nix index 3a501ea6..6a863b05 100644 --- a/codecs/resize/flake.nix +++ b/codecs/resize/flake.nix @@ -2,76 +2,70 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/24.05"; flake-utils.url = "github:numtide/flake-utils"; - fenix.url = "github:nix-community/fenix"; wasm-bindgen = { url = "../../nix/wasm-bindgen"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; }; + rust-helpers = { + url = "../../nix/rust-helpers"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + squoosh-codec-builders = { + url = "../../nix/squoosh-codec-builders"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.rust-helpers.follows = "rust-helpers"; + inputs.wasm-bindgen.follows = "wasm-bindgen"; + }; }; outputs = { self, nixpkgs, flake-utils, - fenix, - wasm-bindgen, + squoosh-codec-builders, }: flake-utils.lib.eachDefaultSystem ( system: + with nixpkgs.legacyPackages.${system}; let - target = "wasm32-unknown-unknown"; - pkgs = nixpkgs.legacyPackages.${system}; - toolchain = - with fenix.packages.${system}; - combine [ - stable.rustc - stable.cargo - targets.${target}.stable.rust-std - ]; src = ./.; - - rustPlatform = pkgs.makeRustPlatform { - cargo = toolchain; - rustc = toolchain; - }; - - cargoLockFile = "${src}/Cargo.lock"; - - vendor = rustPlatform.importCargoLock { - lockFile = cargoLockFile; - }; - - wasm-bindgen-bin = wasm-bindgen.lib.buildFromCargoLock { - inherit system cargoLockFile; - sha256 = "sha256-HTElSB76gqCpDu8S0ZJlfd/S4ftMrbwxFgJM9OXBRz8="; - }; in - with pkgs; + # wasm-bindgen-bin = wasm-bindgen.lib.buildFromCargoLock { + # inherit system cargoLock; + # sha256 = "sha256-HTElSB76gqCpDu8S0ZJlfd/S4ftMrbwxFgJM9OXBRz8="; + # }; { packages = rec { default = resize-squoosh; - resize-squoosh = stdenv.mkDerivation { - name = "squoosh-resize"; - inherit src; - nativeBuildInputs = [ - toolchain - wasm-bindgen-bin - ]; - dontConfigure = true; - buildPhase = '' - runHook preBuild - export CARGO_HOME=$TMPDIR/.cargo - cargo build \ - --config 'source.crates-io.replace-with="vendored-sources"' \ - --config 'source.vendored-sources.directory="${vendor}"' \ - --offline \ - --target ${target} -r - wasm-bindgen --target web --out-dir $out ./target/wasm32-unknown-unknown/release/*.wasm - runHook postBuild - ''; - dontInstall = true; + resize-squoosh = squoosh-codec-builders.lib.buildSquooshCodecRust { + name = "resize-squoosh"; + inherit system src; + cargoLock = { + lockFile = "${src}/Cargo.lock"; + }; }; + # resize-squoosh = stdenv.mkDerivation { + # name = "squoosh-resize"; + # inherit src; + # nativeBuildInputs = [ + # toolchain + # wasm-bindgen-bin + # ]; + # dontConfigure = true; + # buildPhase = '' + # runHook preBuild + # export CARGO_HOME=$TMPDIR/.cargo + # cargo build \ + # --config 'source.crates-io.replace-with="vendored-sources"' \ + # --config 'source.vendored-sources.directory="${vendoredDependencies}"' \ + # --offline \ + # --target ${target} -r + # wasm-bindgen --target web --out-dir $out ./target/wasm32-unknown-unknown/release/*.wasm + # runHook postBuild + # ''; + # dontInstall = true; + # }; installScript = writeShellScriptBin "install.sh" '' ${pkgs.coreutils}/bin/mkdir -p wasm_build diff --git a/codecs/resize/wasm_build/squoosh_resize.d.ts b/codecs/resize/wasm_build/squoosh_resize.d.ts new file mode 100644 index 00000000..56114c7f --- /dev/null +++ b/codecs/resize/wasm_build/squoosh_resize.d.ts @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +* @param {Uint8Array} input_image +* @param {number} input_width +* @param {number} input_height +* @param {number} output_width +* @param {number} output_height +* @param {number} typ_idx +* @param {boolean} premultiply +* @param {boolean} color_space_conversion +* @returns {Uint8ClampedArray} +*/ +export function resize(input_image: Uint8Array, input_width: number, input_height: number, output_width: number, output_height: number, typ_idx: number, premultiply: boolean, color_space_conversion: boolean): Uint8ClampedArray; + +export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; + +export interface InitOutput { + readonly memory: WebAssembly.Memory; + readonly resize: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => void; + readonly __wbindgen_add_to_stack_pointer: (a: number) => number; + readonly __wbindgen_malloc: (a: number) => number; + readonly __wbindgen_free: (a: number, b: number) => void; +} + +/** +* If `module_or_path` is {RequestInfo} or {URL}, makes a request and +* for everything else, calls `WebAssembly.instantiate` directly. +* +* @param {InitInput | Promise} module_or_path +* +* @returns {Promise} +*/ +export default function init (module_or_path?: InitInput | Promise): Promise; diff --git a/codecs/resize/wasm_build/squoosh_resize.js b/codecs/resize/wasm_build/squoosh_resize.js new file mode 100644 index 00000000..2e6a0dd4 --- /dev/null +++ b/codecs/resize/wasm_build/squoosh_resize.js @@ -0,0 +1,120 @@ + +let wasm; + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +let WASM_VECTOR_LEN = 0; + +function passArray8ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 1); + getUint8Memory0().set(arg, ptr / 1); + 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; +} + +let cachegetUint8ClampedMemory0 = null; +function getUint8ClampedMemory0() { + if (cachegetUint8ClampedMemory0 === null || cachegetUint8ClampedMemory0.buffer !== wasm.memory.buffer) { + cachegetUint8ClampedMemory0 = new Uint8ClampedArray(wasm.memory.buffer); + } + return cachegetUint8ClampedMemory0; +} + +function getClampedArrayU8FromWasm0(ptr, len) { + return getUint8ClampedMemory0().subarray(ptr / 1, ptr / 1 + len); +} +/** +* @param {Uint8Array} input_image +* @param {number} input_width +* @param {number} input_height +* @param {number} output_width +* @param {number} output_height +* @param {number} typ_idx +* @param {boolean} premultiply +* @param {boolean} color_space_conversion +* @returns {Uint8ClampedArray} +*/ +export function resize(input_image, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + var ptr0 = passArray8ToWasm0(input_image, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + wasm.resize(retptr, ptr0, len0, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var v1 = getClampedArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v1; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +async function load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + 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); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +async function init(input) { + if (typeof input === 'undefined') { + input = new URL('squoosh_resize_bg.wasm', import.meta.url); + } + const imports = {}; + + + if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { + input = fetch(input); + } + + + + const { instance, module } = await load(await input, imports); + + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; +} + +export default init; + diff --git a/codecs/resize/wasm_build/squoosh_resize_bg.wasm b/codecs/resize/wasm_build/squoosh_resize_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5499b52964a977fca57321289c176a3f7127b300 GIT binary patch literal 36810 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
0rpk$j)ZMp3{uQoAFiM#$q+V zB7|YF$dqu1>4P+jU@;{ur{AElcsR5azAbV0*aST}E9fjJGU25RCjM8OK&8&+j>8iG z>9W>eiZ@G)#h14Du?P-}TyUz6In4w1{pnR+IQOd@Zh4&hl~vBTj8jBupFKYsbA#QvL3DWg zq~RJD?MnZZzjuF8X#UA+{}sP?|0N=8OW-1I%Bv&GRi%EQZLT*G9 zVX*Z%xmm@H3*mqMcIQS%Pd;0{!OmFUuHL{n>xq)sr zsX!fDGcrPi5t^*;aI11$B$Jb_Ewpo`h+LX1th@C84vWNA>a@C&1-2yVDv6>dRX>mv zh+O_qF0WCSN96J{>b|ITNj^w$L#}NF|Cx z{=Aea@`wfTV2b#>geh85Z;A}0?08eO2~3mtvXY5`f+;hbTpqBp{kx+;pjDgO|RKDsH*2`76|2J>p3hCm?{gjL{NBH z3*=}8F+?WT+g|4$u|OVWfy5a26lc((!X;&aSRk9k;d%)R)OIopgpqeFklVIEF8m6y zGA8=@G-HMh3!R~qp;mZ$YvyY8?V(=^~eKOvv}m~tUn)C zcoDIMc;(8WV;uyIMQm6ZOHHp>ilxRfdyf(qy+ip4ZHA9%!S>?e%(5#!3~9h4j{s0T}*9Mi$ir*w==m#S`yV?^cdBnErV<_3+90h~9GK!vi;qM*O2L-6v+a`739#BW=K-$rI)362Yv zPH%2h%$aB1Q?)pYWP_|FjN7D0?E{UW`3EGjg z!6<9o{uF_F6X7>8xkSB~Jxph{oN3mZrwmPWkV^_Jx1!3Yw9oMuhQ_Jn3_kp!J)jjBA|+|d5Ip}Dq)CdYn~p`BD> z10(}FWCs+4Ve!f`m(5jm=O)5tWUEK*47x)$YYeSJ_yMiCa0`t*-~+kal&{G}JEU)I z5RP)=QM*?dD?t~Ng2r-_J{~h0*qRzJ1Ee!U9)=SQCD<@1lXh+zt=+gUa>K{#?oq>f z$!`f-PflGx{t9~4-MH#++_f8~<`uWstL&uBeiCEVjyx7Pq$+LlODma|h*Se^>F%+) zA<-coJ5@&B<7~JsXsAlH)2Aw3PNho8>{PKGr#A@0+4@Jj6TySdEU`9!ByBA;Xl5MJ zH*);K&)A?V1j7}#o@*GBJ#p#{Pe>CYh-f!hQxjIhPE?(5=eV`^=3D$@^1%O64?HjR zfWs&!0p%ayhY>X~KIFx1iS!x)301*Lq}6XpV7&LmhA|OwDF>{*)1DzBXu~Hok-bKa zl`yjxkwV#pmHh#cWQDpmhdLZUcZi9h#Y>AXFJl31v>c>!j%ysFN3=$qcKxuT1|$JWS?=e4V5?UYE}I_qDnD`UlUoD}+Do8G577wKb?p|My@rNR30ATh=8S(Fc&gd6K!#|y zS(Slb1YE6C?mc8}jX~4BQpQm0fknys1}A6gfEP*fVfcB_V7Yf9FbzZ8`dMn1gJw*Rr&J!%v2` z>6{jXml#&LG$1w*yqx0|S}1@HB{EwEX+e*p4N0YYo06^|Py9*zNz#6T_D-3x*J@b~!`}DwRx@LX?3Qb51is)8qkdjs;=1T_&r7-kkF?bcBK>XtdpMKUgwFbHSk1 zHZ%}yzTaFp#-_#^O{+)1T%?ACSYidByyzwwi;>ugGg!MP>7zyzOm>G(Q3EfshrRl@E9TE zNT%UCnUK}Qnmvb_bkVX-x&kjHT?{oyj-z340@y+qyk|x={me}4E2|TcYZ4J#2tg4! zA0nsjMc~w8ZotFCVNxAAAW9`d6FdeAs(^!)z!X5}6DdS0#2rHSVtU9&>GmkC&L~a= zlI@6f%W>k|QZLRebBq*~0@B`N!5MPT=7mz9Y<9t`AT#%gw2F4;6fE+NFYLAqf&ttJ zPBG38Xn|l{3mk5CHLy`fFgKl(gJ?>Qw8zQg)9OXH%wB)obSstJFlLI|R&8{L+4MNe zQrfA*J)XHsmmHvF`v8sSk*?2pF2KIo4cxLrC!T@FI)%^Tor7irYu{*?G(6|ExGXFh z+x>$fb<~d0_sTv4l${AP4$-Y zB6{OeE7)#<^1Pb3x|{|no*LQ=U0o6IV4J?vnm)ot>KMHjO%4eCZgvekVY0twG|nJe*7TOKC(Oo~1N3R3*8!>z%m52& z&6v#$($ljaTF`v|41b&CnKmQTv41!A{^E-4%*LytL)rZ^8@=zlLyCtUd{Bx#-Rq)no$qN(O2@!^bYPc-Gew3 z#MUfoHyEko-@DsNWe==dt?Tc+q2#*v!UxKmEr~BDhz5{HteNjr%5YYI>GB68};MG2`#ZDUY zGL2=A9s2Xo3brf>c8KBZ6D7;;44rD2kC>-DuHO4-!K}9&cCb2;Fpt;APc&yjysUK>OpnxRA|dv0)#QuLzuc;d4O;u>*r1y!ZdpL6MYs2A>N%YNsJJEwqY>x{Y}(4~HUBN3z=u$=EJ2+=q>o z_ZjB<9x(!~LG7`FJe`p2w!wRs+-5H6J*w@S zbDsB*dN&@&)0K_$P#flLkvOi*i8CzXrm|17^j5PSr?v7}?ci4cbrp_`S)`6iB@*Fs}<4dw7si@Ujj?c#ULYSvk5?OM0&=lTeL zg3C}5YHhBj&?TPoTJNVN@s#0}En~y(@i29=V|)ylFTNEpzv7Pqv#@tBSOrs1ZXvUU zgKBZMiEydtLJr!`iPy5=8;nzfuQ%F6%#2mk`sh{}R7&c(p>W4T+6enq4Kq96%EBpbMIJ!zk6yv;$AI(aZv){4{aD)4PH+D;an z&}glup&tP69x#^NZynXf%=zNeQz0QjE4e-*HdSRGDv}cyW8%cae&#|tk6rU-_VFRX zoDecFG4djbSalYOvCzH(6e~>Xh;PYfhJ^oh(gBh2{0$S+hVw?0f%>ui*s9=L3)kQT-tc8u-b-@F_lV}y@*2rmuJc? z#v{lZ0vHeNF=u~4#UDuWQ6dhv^~`(U|6g)&RtfLd@Bi0*lD${w-L&tEU)mn-`(f^oqtVhE4_2=}d(iYb*K>N_cbuO0 zJ!l_eL3+{i;z-#3ilJPI>0P4d1xiiNlP4>Po4`3F0e;yFq2D}t=pZ-6!qWUFg0Fev z&_R{=f-jQ7$NTu{9x>93CkLN+%syBOhajfKzP+Ud)n*N&DJkQ0FmW|DT*-nsBUHRc zB|J#Y&U3rm9%bLP16X>F&R|jxnchu%-_-nDUQv6pN`&XIdg_sHQ*WpDdskfbfgC7; z@gc*zY1?K0cBJ>fZ?cCropIXyXWue=^^*q=9em_Y0OI`9OF;S#nX<>?J9LPN-GAqhCUG;f^b?^~jNv`ith8*xv zxi)5o_dTzO+)JTmc<)olDJR`+9eL)-TSekFwXfZDq8mm-mJeF$6rQuVodRel)6wwTy%_=o$jchifeuE$Prz4x18B}v%=l+zig(Yft zRAnEYQf~|>%t;yi5mIa~F*Jd0hmCFtTs3X_#{KXIMMkn+4oT>E>`Q5cArXZfc(}pc zIOW=-%SrC1HT5pNrL)ufBF;d_4**R&_AIq%cWs`}tC6vP9cpiaM2t>}>!pe);qA-H~~tC>Xkuhe7Z{)p#t&wV{OKfSJAP3|7JuLt+l z($=^S-q+)t3%5wWQIDGDg66$?DA?4p6K}?3ytTv%!dagJ72|;^n#ZEz^ z%Xu4$DbSpJsq7#~2Af95_BDg{PKR6MLiu{i;lguLuf3Y=CkY`X7cWTDeRpU+gW(oQ z2+$l{%iCy1a35oMgiLJcOH!D$@X59g+`>JXjiI&<-1Zp}SyPr5v!j+mFe;MEaY}Wt zL&dZgi9f|^_3Hj9TjIa~Y7g2$vMxtA+*D9_c*2PRb;<(20qyT09FUz&F31kD%h^B^ zpCBUrByN_Jy^Xx#$9EN1Rptw|NX&p16Ot2DK29A-XaNWrMUFU_Y!0fkzvM2@$EW0$ z*J`ZxF^)N~ojb-CGjLc4hgs%JE%M4-)qq~v?PWK|a8KIqDF?oHjth;QH)lx+Fg7y~ za>yIjl4Bya0Ur1|-Nmszu@8xPds$Wq;gNNwfriExE#P#jlP-qhh8E&9j7@^N*%Q>_ zjKf1#lAz&`!0nKL7ZxD_M38`j%&ScVUOf>sxvdewXA?osVMX4y~I)#+1)ly@!3Ny&D%a@094 z!K|3ANSdZJgB&p6&XiL-lEX68Zk@!RyvYGP*zzbiBnc%baEPgjfnW9n6e3KSQ!I!~6&clY4jCkA4jGoMiYGXp zDtkvF`{wK`Qo3;~fZ4B@?g z4|G(o_mdLP*=PVR29LdPQSj_F+k_L9A-{@3$3PQEY_bMyNE9F;keVDwoS7FJAu*zJY+2S<1^#Zt#*Ms;;gy;T2;_f0Dk^-z7a!1;SV=*{h|xI!$NG z7+$i*=_`;0SJ=z(I`p5KF{l3w%m@nuYN;HCeA|ve6ff_~DKuG+xCmpY8+nanH%MXB z1Wj_cRlbP-i9icESWObf%XM{39yka<4@EUaW99d-Q{zxgS5y=BGhdNgoq2jyr9&@a z6k{u}rf4)nA2((0KyP%|p%4?(05PnaR0okvXr;a%gLX2GAnG5$pJYnv4%+Er5-ct7 z9g!>1Cd=3$)3J^6zP(y4V$0#V$RQ&r`nl}vx4OkhqhygBB{iZv)K>?wZ+$k>qYlQ& z9yWS}ohDJWG-aCXqXIu*orP2XIrLFS$frQd=>wnxM38C2ZJ}sq7eejf2g58NN$hxp zN%jFl$UqYhES7A_@7a@8p=1jPa$tr10Z|$_=mz>lAtBDVQnM$;g+T|^++01Zt0tKr z3X<%abhX~^{qXKze)DJl@c7Tb`G1{LG`jlqw;**e-eLQiTj|d4DI^!VR&)33bF291(nl=fq9)m-9}bPr@I4;Ypw# z*!@}KPRrKP8n+<<2zvr73b*YCLn6ZC-t?PqF}=5%zTV*N-1~Q%zFW|kX$119tY}7Z&e@2sRh=Bw-dPlDr zK8X>)U?8R;li1V`z1e8E1=@Q>|Ji0>u2JOJMiTQ8GlwA(j@_h{9{Ui?X+RFa4pbyT zt6HFlV6!1i*)5x*ve(ljb4O7Tn(a25ZZ!kD&1NGYR1i62Z9@eSKUqn_N@1wtSCe9} zUkNfH1yI#8u>7*GEcxt^t2SvCy+pUtR0L~7u?Xd`Oma?4OH>5Srg9Pj76BZTE#LW|-6eVxRh0NHQ zsS_6-J5w$2br(B2E-^JkF)Fw zIVg?;DhHKSy3K9fa_1~9+J%$wU3h76h~kYDht-p7a1q=oSBZ+25A_;vCYj+Tp8U`) zDfjsRlRLk<>)~piw4iKPHR4vdNzTbjz;5f?ycYbkX?xF?TVnty%po`+TY=(DX87_5Y@DO)Fkos8-DRz=ihSX)pAO(undEb>ncizBT|^e_^EnE+mmMwjCmBq{RJ}7M z2OnRlsZt*JNQ)V;9MCwdT$s=aLFlb7rNl#?O@FOz!c8xMZtWhT`;^xr|=#f>E7p0gq-N^EKtXSeTDg0fnA z+Qwz;F5YmhIz2s|+oSsLg!k zjrwBj>Qa%TFZNP%^?;;&^OdtwSR%4gWMGi6>Flf&vGvv67Oqq})Y4=UQ0;3sn(d(xI*RtQJ$L_Kh(S*s4X(OsQI!S#)A)IKg*$sRmctbJItwd- zl&hB`P^EMu?WUBm^q-#Q4d>c=6gwmGE9+5?GY1B%-n|_$F$ls;6MNBug)9Jvs5(Hmgy&>mY?r7olD)=ov1#G`Mu(&&VoKwnKe!6(ZhWH35Yw1-E^wfXDK=xFeiB)Ixt20U1v+BjrMgBg>A6Xk2kZm8&Cx6~ZCL7O_x=01zLyz5DNy-GBN18RZIM$AGhoNu%1+>cu$dGr4f)r({40A5z;-2F{ zZh5Afy+QEU_{{vxJu{{|_$I@Bx9x|?)1IEY%@bScw9@Yu?~6q+Bc<#Ar%@}83k9nG zo&L@nv6L3z8(~j90=wL61vp6P_fK+-PfaXes;S%<&IWT((M)s&inwvB6&qq z^(`O4qMRc+U(G>eT*DQalK1SmmQ=H@cuL+x1RWMTVlGaneXN{>BD_POHIe2`wmm0C z)Db!o9io%)W2CPx$Hiq&{49xpbn6ziNZVxyQVg~{sWar~0z}4d7U{8n6*}`=nl6l1 zU#cN~Jx&)1Dh61qwFb`?xvanI1&q_15SPs{re%qED{X7<*$4=?dOeXy!Ak&)DBGTz z?9>D{)TSc|1BkvsU&iWWI_(rpPBimJ)I3D>QZKrj*A+5apbMHRiiUKUB;+&|eU%bm zeYNW9i+t1rr;ckhzR)pK8(3ptI3^>4y$ql^2k>#YgrelfC0;lz$LvwXFW>Vi$E?)% zoOX`xuT}IC<%3_RzOF+pX$Zn{-`o+rVyR6z@H0GtWOaHNO}#d~W)ADm%~v^x&`G8x zC!5%Ik7z;+>qR;1ZTp!TT=B>&pVe7=Plm&7_ zaH!U*1(w@0knu$ETGQ`@Cib^FYQf92KpP@%j3Z~8`A|fqP z_0mrkXs#aH!G|WKo{$8=nPn*$B0>VeYfq%UQr?j`p=D4i=hIzKbH4U9pj>-M9*oJl zCqmMC|Lc}}_kHY}ADp>D?XdLz>Vpq_=VSYRa`RiJ$m0cq_AC_oFs3oEz}Dd?b$P)| z(}J&ml~n=8S|MlHR%n4nu9@B?wW~|zN)n^8jGd?JwLp_<2Xp;%my6~u=LZ^8gBhp1 zTb03eTEK4);Hh4`wtBIldeK$A=nVL19Q4^mw_Ut3;Gq(5%yBw*Lh07D0B0Vi`A1vK zBM^A&yQil$oeE;A!1R)dksag3vN2R1-a6TDY~L|4X%x84k8drH8l+3<(s=A_b=*t=$z$UmuJ^>{q7yHt|eBs>opf|?)u9|uI&24 zo-JJ;`M^-u!nN0TJ>0af>*2q;z3bPv-qrQk+uqgnt-t+?uJhu5*|qEMKh)Lqm!Is4 zJ^bmeH9z`%*WXyEw<>i*a}&*(mU$=dGgSH!x{T$Jhl@rqpcS1vuL`}B8T*!}#` z*L3f^<(lrtPw(qK`lE998$LhO?fILD?#Msh&|M7d?Y`&HTe_1Iw{>5Xy|eq*?RRxw z;GXHe__y!sUfghR_oK$a?(;5qfA=@`JE5ySNcYoS|J>bi?N7U}{onsqia$Fg8+`kc>__fdmW@8N zJo|w!nAygES(P1VUz2_MlC!hcpRLb+{+rS4metAZvVEDX=f_>yC0F)j^IzVW{lVt* zvLF8X1=-osCD}8y%djJG-qvYo0fhoxg50`Xz)$CXIKAn9k{rB0HUwA%H97pckVZR-kk3jzTDs4 z;?G^((Ukl1PXuxYFKfwd{rSAyb9V)E*~Eg}YreBEch;L1<-QtSoXdQ_JvTD5G&i<+ zS*}MvE%)8Wmgg?HK9qZVW<~D47gy%q{5PlPdhS@A`});q=DJs%otyfPwYmTC<@LFD z-51FX-5AR)zb29UL@JeAwKS94eY7+8$d9{nfB*Gt?tjhpgMs>hyQvq_u*gf%zY|$ zeeMgBH|CBUz9}bq>`rt>6FT5_(F1&{_qTGrrtbdD$K8)|AF6vk#P#WQ_uIKXweEh9 zYtcQIjEt76V_d}jJU-~6@%;Gp>+|v-0N0Cl8qZ(Xx3gSCLoM?LwPmzf!pF;}`XhQS z$mhhq6W0$*N1k0nU+FhN<0xg30m>y~%cY~DPCGky3|}{%A6>m>i-B^@8(S_J87^-z zcIJn6lxc1M$T+Qh_&2&bRr_4#^xfk0srD7PGB5eLlV>i<7LHy%J#|i!#lP^$?z_o zAEaFergggrnhDI37-fli^f29nM6;kw_#OiACa(L?jtWMbeQ>G#rgYqtRG2 z9!*4((Nr`Y&BVg7NGuwQ#p1CfD9FN4K@mM?_PsEe)R6HHeB*KYEBASRL z;)z5enMftliA*w_j3lGUSTdeWB$LThGM&t%!l_6qnu?|3sYEK7N~O}NOgfy7q@(Fr zI-X9Xlj&4Coz7%HF~jf~KxgQdp=vxoytQobe<{Z&9oAKuY(J@tj5~H0zB|_Yo(7wr z4^oQVwOf{lOAdtZP%pAseQw)rTQJl}6Gk51i^R}L-Doe;=M?%Z@CR|lH0}KSM87ea zFASB9VtzDV+%|c=F|xBfUKtv>E=(I)6YIxuBi5J7qZ8}T@Y z>$i`T)MB`jK4;SBYCfy^oB))%yJ#b_-qsk@HdB6*#VNSR55BGXnWatrPjyXQUY^)7 zG6dqa7A zL|cYGC}XW3-nMJ~#H6gwZCeLpgA+GQ3{CX!Oz-R;+jT=KGFmKLm)?F|F&(aqtu5kJ zj;!5@Y>kYsEo~cLZ~sSDL?huy29!i9s(xVt#0|!%-f!k!banOqg5&Nl=AIKywddX3 zpT&KZKNFKBC4Zy&;cdmiZNpm`>xaxkXmtn5M(BgPT%&=H>wUjDq;0xnSbK5JBJFFh zJwyA)_^-9XGqYOPyYJSlyEbaY*ZfX zY5#KS@3b`^U8X&oyqc3-XC_~Nc2v@a*6Jt9@Mkf0EY~fgUo&5Xb z_ei6Pc3E*``zRJ^ysxlh+Ys@`L}%yr{A7P;CoJCH**RX`-Z#2!B-*FqmlN;%V~I+o zj5R1H;>C129MzqF3hat@oqnZ}pD@JCbarB6Iy*OQn;0F+U!Qeu`wOW;x?Bv0Gifve z0`2apDK|#SU)R}rdH%X9MKg9?dA3D2CQu&VS!N>Au(Pwj5RN5^@o2FaFU6yoa?;cF z3iBBqxvtXLY5(nyr=#U)Iu*-Q!pTgflJ~B)Db(3{1@NchLjkTPHD zlmGF&bv!>rw{j&C%a_Bcbi9;FS1&SFIv>_aPpRs|596wsid4eULIe|E zDHcl6mdm@)EOrx-1k@W7-c+vSu{?JFInlB~+qK9@b-w9%3>#BOrK6Q_F&YogyQ-^h z!mlltE%8C;z&MoHIy6#{nVhFe)drxYvh%npqie@UQ;{3?V@TWL>J(H;5 z&qPxBWT{XrMoYy+@RB-G;&^p-ZreWE+1bV4p_42ZLmZPGv1o1CU_6t>L@||#6r$;3 zB-xs>;nkEd{8Zj&pY3eIpJ7GtRI*fxr(=;yrBp5yE2#zHldRElVaL|mP|-{}lFTO~ z`E)p+FC-HSFLCJLxb13%UR^F8yFQ`Uh$tJiR$*QrNsp4Or~XtjA5A6WW!6tVT*zeF z{z!O*Og>UfC6cjdDpE+4FHoOhd+=`P$ z`*b{#D#Y`JQYKnRW(tYLSNsujRF$GavQ$h(^O-~;jtmvj?HQYeBcmvq%8ucp9k!f1 zeCcozx{2$>QjyF4LNXOCMT*fxxe|}Wl9eUBClkOr6+S`lf>K1)i~dBh94Tfh`FJ4_ zuQ0Erll5~F_oS~lBr*gxS8%scZY)_ZmyM8_x?WaI-D0YHg5;pb`if-`MsEA$|GM`L zZJQ9v7c!M%rWDDD zsv&B19;qYsw2$V+sjOs(6e^WMEPU$uua3$$-ndiwkjDN= zE)xcF(>F3+!qpJ91W{v|L@`qcrxW=~sgwy9SL9y0J07kBg2=22fYn<}Cn~9AhQKo! z$*ibNC=a-YpIMXvsl5#d)FF-=uU#Y{OBM~O$)#vEcv zT-n)ajaN;W;@t$Hw@|oP3Rhy43c_8ER!Y%zYfdg4G)<(!@l*zfGLcEM>LTkm9*DA}Pmej7pI#M?4=XC2^@MiEwzMJ)Ux&U()AN4o}~x$OWqn`xY+bi#TAB zbh=VbRw8Rpj&z@b+K=F%PUEp+rC7$7h($+VNsyH&b$0fS?CL6AKkPUxCm61-)s^0f5F5NLXO8TSQ;9d!OK9MAo6seSpscO^)D{5w-nz87sra_oiq+BeLNg@*z zEyk0u#1g+xB|@B7;atFMD{LDgeR1 z4_*Z+n3hT=%A~2tj*-)9?d!X)fXds7vf8eIr}0dbf~ZEy$2n;tLxpHOO)Qm674xMu zy0KMZXA2G)OyG5%)W1>2zOr3K8~ufNfgdz}Ih@B-MmB_B(m$wd&x^zqONl}$AC4Ex zNsMYf*7b6OX&`ISc)eLiD;>SvciSPT|($3)N~|=ppq0&XJ=h1XwI>>L(gN}+DxH@C9NcqWx_1H zz@FFqY2mF)C9L^%A|PH+?<+dnMN*y#n1PGI;!hPeUS72wbxZDC0^zy2ow)3*@vRfG z%*17c=+Q7q+hVF%j%T8=a5=W=b-zE%i+4Fetr!sD)r$I;13lC`$k73b|1fZ-OE@jXjvjN8%vfkfh^#7 zI&#To)qdjo39=((A#l#IIfIkq_&c4Qj#d?yZK8iw(lj73euu6**USKl?mrU}U*Tu_o6u|)W4C$t$kW&>+3v?)~z<#?3sj&ih| zC{@z0eQ7Q4B)jkl;&_+IShy02my6MBJo4am9x(#1_sZYO8z?X$Z+vN3PA)5xFS58& zg-9Yv99c|V>$A1|n>^B>@6}H`9Sx(|!^L?&kJO;5r!!zob2sueFnN6KDA+ Nwrw3=Ti!MKe*mm$WhDRr literal 0 HcmV?d00001 diff --git a/codecs/resize/wasm_build/squoosh_resize_bg.wasm.d.ts b/codecs/resize/wasm_build/squoosh_resize_bg.wasm.d.ts new file mode 100644 index 00000000..05cc6841 --- /dev/null +++ b/codecs/resize/wasm_build/squoosh_resize_bg.wasm.d.ts @@ -0,0 +1,7 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export function resize(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number): void; +export function __wbindgen_add_to_stack_pointer(a: number): number; +export function __wbindgen_malloc(a: number): number; +export function __wbindgen_free(a: number, b: number): void; diff --git a/nix/rust-helpers/flake.nix b/nix/rust-helpers/flake.nix new file mode 100644 index 00000000..11e44cba --- /dev/null +++ b/nix/rust-helpers/flake.nix @@ -0,0 +1,74 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/24.05"; + fenix.url = "github:nix-community/fenix"; + }; + outputs = + { + self, + nixpkgs, + fenix, + }: + { + lib = { + buildRustPackage = + { + system, + target, + src, + cargoLock ? { + lockFile = "${src}/Cargo.lock"; + }, + release ? true, + ... + }@args: + with nixpkgs.legacyPackages.${system}; + let + # Setup a toolchain for the the host system targeting `target`. + toolchain = + with fenix.packages.${system}; + combine [ + stable.rustc + stable.cargo + targets.${target}.stable.rust-std + ]; + + # Create `vendor` folder with all dependencies. + vendoredDependencies = rustPlatform.importCargoLock cargoLock; + + rustcTargetDir = "target/${target}/${if release then "release" else "debug"}"; + in + stdenv.mkDerivation ( + (removeAttrs args [ "cargoLock" ]) + // { + nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ + toolchain + jq + rsync + ]; + dontConfigure = true; + buildPhase = '' + runHook preBuild + export CARGO_HOME=$TMPDIR/.cargo + cargo build \ + --config 'source.crates-io.replace-with="vendored-sources"' \ + --config 'source.vendored-sources.directory="${vendoredDependencies}"' \ + --offline \ + --target ${target} ${if release then "-r" else ""} + + runHook postBuild + ''; + installPhase = '' + runHook preInstall; + mkdir -p $out + + find ${rustcTargetDir} -type f -maxdepth 1 | \ + xargs -I ___X -n1 cp ___X $out + + runHook postInstall; + ''; + } + ); + }; + }; +} diff --git a/nix/squoosh-codec-builders/flake.nix b/nix/squoosh-codec-builders/flake.nix new file mode 100644 index 00000000..0e348933 --- /dev/null +++ b/nix/squoosh-codec-builders/flake.nix @@ -0,0 +1,66 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/24.05"; + fenix.url = "github:nix-community/fenix"; + wasm-bindgen = { + url = "../wasm-bindgen"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + rust-helpers = { + url = "../rust-helpers"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + outputs = + { + self, + nixpkgs, + fenix, + wasm-bindgen, + rust-helpers, + }: + { + lib = { + buildSquooshCodecRust = + { + name, + system, + src, + cargoLock ? { + lockFile = "${src}/Cargo.lock"; + }, + wasmBindgenSha, + ... + }@args: + with nixpkgs.legacyPackages.${system}; + let + wasm-bindgen-bin = wasm-bindgen.lib.buildFromCargoLock { + inherit system cargoLock; + sha256 = wasmBindgenSha; + }; + + codecBuild = rust-helpers.lib.buildRustPackage { + inherit system src cargoLock; + name = "${name}-codec"; + target = "wasm32-unknown-unknown"; + }; + in + stdenv.mkDerivation ( + (removeAttrs args [ "cargoLock" ]) + // { + inherit codecBuild; + dontConfigure = true; + nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ wasm-bindgen-bin ]; + buildPhase = '' + runHook preBuild + + wasm-bindgen --target web --out-dir $out $codecBuild/*.wasm + + runHook postBuild + ''; + dontInstall = true; + } + ); + }; + }; +} diff --git a/nix/wasm-bindgen/flake.nix b/nix/wasm-bindgen/flake.nix index af6a3fd9..bc7bf613 100644 --- a/nix/wasm-bindgen/flake.nix +++ b/nix/wasm-bindgen/flake.nix @@ -9,38 +9,48 @@ version, sha256, }: + with nixpkgs.legacyPackages.${system}; let - pkgs = nixpkgs.legacyPackages.${system}; - wasm-bindgen-src = pkgs.fetchCrate { + src = pkgs.fetchCrate { pname = "wasm-bindgen-cli"; inherit version sha256; }; - in - pkgs.rustPlatform.buildRustPackage { - name = "wasm-bindgen-cli"; - buildInputs = [ - pkgs.curl - pkgs.darwin.apple_sdk.frameworks.Security - ]; - src = wasm-bindgen-src; + cargoLock = { - lockFile = "${wasm-bindgen-src}/Cargo.lock"; + lockFile = "${src}/Cargo.lock"; }; + in + rustPlatform.buildRustPackage { + name = "wasm-bindgen-cli"; + inherit src cargoLock; + buildInputs = [ + curl + darwin.apple_sdk.frameworks.Security + ]; doCheck = false; }; buildFromCargoLock = { system, - cargoLockFile, + cargoLock, sha256, }: + with nixpkgs.legacyPackages.${system}; + assert (cargoLock.lockFile or null == null) != (cargoLock.lockFileContents or null == null); let - pkgs = nixpkgs.legacyPackages.${system}; - cargoLock = pkgs.lib.importTOML cargoLockFile; + lockFileContents = + if cargoLock.lockFile != null then + builtins.readFile cargoLock.lockFile + else + cargoLock.lockFileContents; + + parsedLockFile = builtins.fromTOML lockFileContents; + wasm-bindgen-version = - (pkgs.lib.lists.findFirst (x: x.name == "wasm-bindgen") null cargoLock.package).version; + (lib.lists.findFirst (x: x.name == "wasm-bindgen") null parsedLockFile.package).version; in + assert wasm-bindgen-version != null; self.lib.build { inherit system sha256; version = wasm-bindgen-version;