duckdb-wasm icon indicating copy to clipboard operation
duckdb-wasm copied to clipboard

Can't build duckdb-wasm from source

Open Tishj opened this issue 6 months ago • 7 comments

What happens?

The instructions on the README.md are not working.

-- Build files have been written to: duckdb-wasm/build/relsize/eh
+ emmake make -Cduckdb-wasm/build/relsize/eh -j12 duckdb_wasm
make: make -Cduckdb-wasm/build/relsize/eh -j12 duckdb_wasm
make[1]: *** No rule to make target `duckdb_wasm'.  Stop.

The build_loadable: recipe has GEN=ninja, this results in creating a build.ninja file in these folders, not a Makefile

I've fixed this by commenting out export GEN=ninja from my ~/.zshrc and also removing the GEN=ninja from the build_loadable recipe

That results in reaching the next error:

duckdb-wasm/lib/src/config.cc:66:37: error: no matching member function for call to 'Parse'
   66 |     rapidjson::ParseResult ok = doc.Parse(args_json.begin(), args_json.size());
      |                                 ~~~~^~~~~
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2744:22: note: candidate function not viable: no known conversion from 'const_iterator' (aka '__wrap_iter<const char *>') to 'const Ch *' (aka 'const char *') for 1st argument
 2744 |     GenericDocument& Parse(const Ch* str, size_t length) {
      |                      ^     ~~~~~~~~~~~~~
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2731:22: note: candidate template ignored: couldn't infer template argument 'parseFlags'
 2731 |     GenericDocument& Parse(const typename SourceEncoding::Ch* str, size_t length) {
      |                      ^
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2740:22: note: candidate template ignored: couldn't infer template argument 'parseFlags'
 2740 |     GenericDocument& Parse(const Ch* str, size_t length) {
      |                      ^
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2708:22: note: candidate function template not viable: requires single argument 'str', but 2 arguments were provided
 2708 |     GenericDocument& Parse(const typename SourceEncoding::Ch* str) {
      |                      ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2719:22: note: candidate function template not viable: requires single argument 'str', but 2 arguments were provided
 2719 |     GenericDocument& Parse(const Ch* str) {
      |                      ^     ~~~~~~~~~~~~~
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2726:22: note: candidate function not viable: requires single argument 'str', but 2 arguments were provided
 2726 |     GenericDocument& Parse(const Ch* str) {
      |                      ^     ~~~~~~~~~~~~~
1 error generated.
make[4]: *** [CMakeFiles/duckdb_web.dir/src/config.cc.o] Error 1
make[4]: *** Waiting for unfinished jobs....
duckdb-wasm/lib/src/json_parser.cc:901:18: error: no matching member function for call to 'Parse'
  901 |         json_doc.Parse<rapidjson::kParseNanAndInfFlag>(json.begin(), json.size());
      |         ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2740:22: note: candidate function template not viable: no known conversion from 'const_iterator' (aka '__wrap_iter<const char *>') to 'const Ch *' (aka 'const char *') for 1st argument
 2740 |     GenericDocument& Parse(const Ch* str, size_t length) {
      |                      ^     ~~~~~~~~~~~~~
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2731:22: note: candidate template ignored: couldn't infer template argument 'SourceEncoding'
 2731 |     GenericDocument& Parse(const typename SourceEncoding::Ch* str, size_t length) {
      |                      ^
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2708:22: note: candidate function template not viable: requires single argument 'str', but 2 arguments were provided
 2708 |     GenericDocument& Parse(const typename SourceEncoding::Ch* str) {
      |                      ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
duckdb-wasm/build/relsize/eh/third_party/rapidjson/install/include/rapidjson/document.h:2719:22: note: candidate function template not viable: requires single argument 'str', but 2 arguments were provided
 2719 |     GenericDocument& Parse(const Ch* str) {
      |                      ^     ~~~~~~~~~~~~~
1 error generated.
make[4]: *** [CMakeFiles/duckdb_web.dir/src/json_parser.cc.o] Error 1
make[3]: *** [CMakeFiles/duckdb_web.dir/all] Error 2
make[2]: *** [CMakeFiles/duckdb_wasm.dir/rule] Error 2
make[1]: *** [duckdb_wasm] Error 2
emmake: error: 'make -Cduckdb-wasm/build/relsize/eh -j12 duckdb_wasm' failed (returned 2)
make: *** [build_loadable] Error 1

These two issues (GEN=ninja breaking and the Parse method not accepting the iterator returned from .begin()) are fixed by #2024

Summary of remaining issues:

  • make apply_patches + make serve are not sufficient to build successfully
  • emsdk version should be locked to 3.1.69-3.1.71
  • Install instructions for emsdk are missing:
git clone https://github.com/emscripten-core/emsdk.git ~/emsdk
~/emsdk install 3.1.69
~/emsdk activate 3.1.69
echo 'source "~/emsdk/emsdk_env.sh"' >> $HOME/.bash_profile
  • Install instructions for yarn are missing: sudo npm install -g yarn
  • Install instructions for js-beautify are missing: sudo apt install node-js-beautify (on ubuntu)

Tishj avatar May 18 '25 12:05 Tishj

Next issue: https://github.com/duckdb/duckdb-wasm/pull/2016#issuecomment-2888968820

Tishj avatar May 18 '25 12:05 Tishj

Next issue:

yarn
yarn install v1.22.22
[1/4] 🔍  Resolving packages...
success Already up-to-date.
✨  Done in 0.14s.
yarn install
yarn install v1.22.22
[1/4] 🔍  Resolving packages...
success Already up-to-date.
✨  Done in 0.15s.
yarn workspace @duckdb/duckdb-wasm-shell install:wasmpack
yarn workspace v1.22.22
yarn run v1.22.22
$ node ../../node_modules/wasm-pack/install.js
wasm-pack is already installed, skipping installation.
✨  Done in 0.22s.
✨  Done in 0.35s.
mkdir -p build
touch build/bootstrap
yarn workspace @duckdb/duckdb-wasm build:debug
yarn workspace v1.22.22
yarn run v1.22.22
$ node bundle.mjs debug && tsc --emitDeclarationOnly
DEBUG=true
[ ESBUILD ] Patch bindings
sed: ./src/bindings/duckdb-mvp.js: No such file or directory
node:internal/errors:983
  const err = new Error(message);
              ^

Error: Command failed: sed -i.bak 's/require(["'\'']child_process["'\''])/["child_process"].map(require)/g' ./src/bindings/duckdb-mvp.js && rm ./src/bindings/duckdb-mvp.js.bak
sed: ./src/bindings/duckdb-mvp.js: No such file or directory

    at genericNodeError (node:internal/errors:983:15)
    at wrappedFn (node:internal/errors:537:14)
    at checkExecSyncError (node:child_process:882:11)
    at execSync (node:child_process:954:15)
    at patchFile (file://duckdb-wasm/packages/duckdb-wasm/bundle.mjs:369:5)
    at file://duckdb-wasm/packages/duckdb-wasm/bundle.mjs:104:5
    at file://duckdb-wasm/packages/duckdb-wasm/bundle.mjs:359:3
    at ModuleJob.run (node:internal/modules/esm/module_job:274:25)
    at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5) {
  status: 1,
  signal: null,
  output: [
    null,
    Buffer(0) [Uint8Array] [],
    Buffer(61) [Uint8Array] [
      115, 101, 100,  58,  32,  46,  47, 115, 114,  99,
       47,  98, 105, 110, 100, 105, 110, 103, 115,  47,
      100, 117,  99, 107, 100,  98,  45, 109, 118, 112,
       46, 106, 115,  58,  32,  78, 111,  32, 115, 117,
       99, 104,  32, 102, 105, 108, 101,  32, 111, 114,
       32, 100, 105, 114, 101,  99, 116, 111, 114, 121,
       10
    ]
  ],
  pid: 63072,
  stdout: Buffer(0) [Uint8Array] [],
  stderr: Buffer(61) [Uint8Array] [
    115, 101, 100,  58,  32,  46,  47, 115, 114,  99,
     47,  98, 105, 110, 100, 105, 110, 103, 115,  47,
    100, 117,  99, 107, 100,  98,  45, 109, 118, 112,
     46, 106, 115,  58,  32,  78, 111,  32, 115, 117,
     99, 104,  32, 102, 105, 108, 101,  32, 111, 114,
     32, 100, 105, 114, 101,  99, 116, 111, 114, 121,
     10
  ]
}

Node.js v23.10.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed.
Exit code: 1
Command: /opt/homebrew/Cellar/node/23.10.0_1/bin/node
Arguments: /opt/homebrew/Cellar/yarn/1.22.22/libexec/lib/cli.js build:debug
Directory: duckdb-wasm/packages/duckdb-wasm
Output:

Tishj avatar May 18 '25 12:05 Tishj

What does exist in that directory is: packages/duckdb-wasm/src/bindings/duckdb-mvp.d.ts Not packages/duckdb-wasm/src/bindings/duckdb-mvp.js

Contents of that file:

import { DuckDBModule } from './duckdb_module';
export function DuckDB(moduleOverrides?: Partial<DuckDBModule>): Promise<DuckDBModule>;
export default DuckDB;

EDIT: Fix was running make wasm_dev That creates all the bindings that the script is looking for But that still means that:

make apply_patches
make serve

does not work.

EDIT EDIT:

DEBUG=true
[ ESBUILD ] Patch bindings
sed: ./src/bindings/duckdb-coi.pthread.js: No such file or directory
node:internal/errors:983
  const err = new Error(message);
              ^

Error: Command failed: sed -i.bak 's/require(["'\'']vm["'\''])/["vm"].map(require)/g' ./src/bindings/duckdb-coi.pthread.js && rm ./src/bindings/duckdb-coi.pthread.js.bak
sed: ./src/bindings/duckdb-coi.pthread.js: No such file or directory

    at genericNodeError (node:internal/errors:983:15)
    at wrappedFn (node:internal/errors:537:14)
    at checkExecSyncError (node:child_process:882:11)
    at execSync (node:child_process:954:15)
    at patchFile (file://duckdb-wasm/packages/duckdb-wasm/bundle.mjs:369:5)
    at file://duckdb-wasm/packages/duckdb-wasm/bundle.mjs:107:5
    at file://duckdb-wasm/packages/duckdb-wasm/bundle.mjs:359:3
    at ModuleJob.run (node:internal/modules/esm/module_job:274:25)
    at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5) {
  status: 1,
  signal: null,
  output: [
    null,
    Buffer(0) [Uint8Array] [],
    Buffer(69) [Uint8Array] [
      115, 101, 100,  58,  32,  46,  47, 115, 114,  99,  47,
       98, 105, 110, 100, 105, 110, 103, 115,  47, 100, 117,
       99, 107, 100,  98,  45,  99, 111, 105,  46, 112, 116,
      104, 114, 101,  97, 100,  46, 106, 115,  58,  32,  78,
      111,  32, 115, 117,  99, 104,  32, 102, 105, 108, 101,
       32, 111, 114,  32, 100, 105, 114, 101,  99, 116, 111,
      114, 121,  10
    ]
  ],
  pid: 95954,
  stdout: Buffer(0) [Uint8Array] [],
  stderr: Buffer(69) [Uint8Array] [
    115, 101, 100,  58,  32,  46,  47, 115, 114,  99,  47,
     98, 105, 110, 100, 105, 110, 103, 115,  47, 100, 117,
     99, 107, 100,  98,  45,  99, 111, 105,  46, 112, 116,
    104, 114, 101,  97, 100,  46, 106, 115,  58,  32,  78,
    111,  32, 115, 117,  99, 104,  32, 102, 105, 108, 101,
     32, 111, 114,  32, 100, 105, 114, 101,  99, 116, 111,
    114, 121,  10
  ]
}

Node.js v23.10.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed.
Exit code: 1
Command: /opt/homebrew/Cellar/node/23.10.0_1/bin/node
Arguments: /opt/homebrew/Cellar/yarn/1.22.22/libexec/lib/cli.js build:debug
Directory: duckdb-wasm/packages/duckdb-wasm
Output:

Tishj avatar May 18 '25 12:05 Tishj

Even running make wasm_star before running make serve did not help to resolve the issue that errors on:

(async () => {
    // Don't attempt to bundle NodeJS modules in the browser build.
    console.log('[ ESBUILD ] Patch bindings');
    patchFile('./src/bindings/duckdb-mvp.js', 'child_process');
    patchFile('./src/bindings/duckdb-eh.js', 'child_process');
    patchFile('./src/bindings/duckdb-coi.js', 'child_process');
    patchFile('./src/bindings/duckdb-coi.pthread.js', 'vm'); // <-- this one remains missing no matter what

Tishj avatar May 18 '25 13:05 Tishj

After commenting that out, we run into more issues:

DEBUG=true
[ ESBUILD ] Patch bindings
[ ESBUILD ] duckdb-browser.cjs
[ ESBUILD ] duckdb-browser.mjs
[ ESBUILD ] duckdb-browser-blocking.cjs
✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:3785:27:
      3785 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4072:27:
      4072 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4084:27:
      4084 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4096:27:
      4096 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4240:27:
      4240 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4285:27:
      4285 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4297:27:
      4297 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4452:27:
      4452 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4607:27:
      4607 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4630:27:
      4630 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4719:27:
      4719 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4775:27:
      4775 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4820:27:
      4820 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4832:27:
      4832 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:4899:27:
      4899 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5010:27:
      5010 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5033:27:
      5033 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5166:27:
      5166 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5244:27:
      5244 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5256:27:
      5256 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5290:27:
      5290 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5368:27:
      5368 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5391:27:
      5391 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5414:27:
      5414 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5745:27:
      5745 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5757:27:
      5757 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:5846:27:
      5846 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6089:27:
      6089 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6134:27:
      6134 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6146:27:
      6146 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6180:27:
      6180 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6214:27:
      6214 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6644:27:
      6644 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6656:27:
      6656 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6668:27:
      6668 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6691:27:
      6691 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6703:27:
      6703 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6715:27:
      6715 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6826:27:
      6826 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:6838:27:
      6838 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:7213:27:
      7213 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:7236:27:
      7236 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-mvp.js:7281:27:
      7281 │                     return 0n;
           ╵                            ~~

✘ [ERROR] Could not resolve "crypto"

    src/bindings/duckdb-mvp.js:2567:45:
      2567 │                     var nodeCrypto = require("crypto");
           ╵                                              ~~~~~~~~

  The package "crypto" wasn't found on the file system but is built into node. Are you trying to
  bundle for node? You can use "platform: 'node'" to do that, which will remove this error.

▲ [WARNING] This case clause will never be evaluated because it duplicates an earlier case clause [duplicate-case]

    src/bindings/duckdb-eh.js:738:37:
      738 │                                 case "getTempRet0":
          ╵                                      ~~~~~~~~~~~~~

  The earlier case clause is here:

    src/bindings/duckdb-eh.js:736:37:
      736 │                                 case "getTempRet0":
          ╵                                      ~~~~~~~~~~~~~

▲ [WARNING] This case clause will never be evaluated because it duplicates an earlier case clause [duplicate-case]

    src/bindings/duckdb-eh.js:740:37:
      740 │                                 case "getTempRet0":
          ╵                                      ~~~~~~~~~~~~~

  The earlier case clause is here:

    src/bindings/duckdb-eh.js:736:37:
      736 │                                 case "getTempRet0":
          ╵                                      ~~~~~~~~~~~~~

▲ [WARNING] This case clause will never be evaluated because it duplicates an earlier case clause [duplicate-case]

    src/bindings/duckdb-eh.js:742:37:
      742 │                                 case "getTempRet0": return getTempRet0;   case "__table_base":
          ╵                                      ~~~~~~~~~~~~~

  The earlier case clause is here:

    src/bindings/duckdb-eh.js:736:37:
      736 │                                 case "getTempRet0":
          ╵                                      ~~~~~~~~~~~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-eh.js:5368:32:
      5368 │                     maxRange = (1n << 64n) - 1n
           ╵                                 ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-eh.js:5368:38:
      5368 │                     maxRange = (1n << 64n) - 1n
           ╵                                       ~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")

    src/bindings/duckdb-eh.js:5368:45:
      5368 │                     maxRange = (1n << 64n) - 1n
           ╵                                              ~~

✘ [ERROR] Could not resolve "crypto"

    src/bindings/duckdb-eh.js:1089:45:
      1089 │                     var nodeCrypto = require("crypto");
           ╵                                              ~~~~~~~~

  The package "crypto" wasn't found on the file system but is built into node. Are you trying to
  bundle for node? You can use "platform: 'node'" to do that, which will remove this error.

duckdb-wasm/node_modules/esbuild/lib/main.js:1651
  let error = new Error(text);
              ^

Error: Build failed with 48 errors:
src/bindings/duckdb-eh.js:1089:45: ERROR: Could not resolve "crypto"
src/bindings/duckdb-eh.js:5368:32: ERROR: Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")
src/bindings/duckdb-eh.js:5368:38: ERROR: Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")
src/bindings/duckdb-eh.js:5368:45: ERROR: Big integer literals are not available in the configured target environment ("chrome64", "edge79", "firefox62", "safari11.1")
src/bindings/duckdb-mvp.js:2567:45: ERROR: Could not resolve "crypto"
...
    at failureErrorWithLog (duckdb-wasm/node_modules/esbuild/lib/main.js:1651:15)
    at duckdb-wasm/node_modules/esbuild/lib/main.js:1059:25
    at duckdb-wasm/node_modules/esbuild/lib/main.js:1004:52
    at buildResponseToResult (duckdb-wasm/node_modules/esbuild/lib/main.js:1057:7)
    at duckdb-wasm/node_modules/esbuild/lib/main.js:1086:16
    at responseCallbacks.<computed> (duckdb-wasm/node_modules/esbuild/lib/main.js:704:9)
    at handleIncomingPacket (duckdb-wasm/node_modules/esbuild/lib/main.js:764:9)
    at Socket.readFromStdout (duckdb-wasm/node_modules/esbuild/lib/main.js:680:7)
    at Socket.emit (node:events:507:28)
    at addChunk (node:internal/streams/readable:559:12) {
  errors: [Getter/Setter],
  warnings: [Getter/Setter]
}

Tishj avatar May 18 '25 13:05 Tishj

I've tried running this on a linux VM, which resulted in this error:

In file included from /home/tishj/duckdb-wasm/build/relsize/eh/third_party/duckdb/src/duckdb_ep-build/src/main/extension/ub_duckdb_main_extension.cpp:5:
/home/tishj/duckdb-wasm/submodules/duckdb/src/main/extension/extension_load.cpp:348:8: error: use of undeclared identifier 'var'
                            var jsString = ((typeof runtime == 'object') && runtime && (typeof runtime.whereToLoad == 'function') &&
                            ^
/home/tishj/duckdb-wasm/submodules/duckdb/src/main/extension/extension_load.cpp:447:7: error: use of undeclared identifier 'var'
                    var url = (UTF8ToString($0));
                    ^

EDIT: That seemed to be fixed by locking the emscripten version to 3.1.69

needs:

  • wabt
  • npm
  • js-beautify (use node-js-beautify)
  • yarn (do not use apt-get install yarn)
  • cargo (use rustup)

Tishj avatar May 18 '25 15:05 Tishj

I've been able to get a build working, my next step was to try to load an out-of-tree extension, this hasn't worked yet. But that's a separate issue

Tishj avatar May 19 '25 06:05 Tishj