From 47d0d376727dfcb798af4ea019dfc23a9a57b6ca Mon Sep 17 00:00:00 2001 From: Charlie Lye Date: Thu, 28 Sep 2023 17:24:31 +0100 Subject: [PATCH] chore: Provide cross compile to cjs. (#2566) The loadModule solution didn't get much love. Maybe this cross-compile helps. --- .ignore | 2 -- barretenberg/cpp/.rebuild_patterns | 6 ++--- barretenberg/ts/.dockerignore | 2 +- barretenberg/ts/Dockerfile | 2 +- barretenberg/ts/README.md | 9 -------- barretenberg/ts/cjs-entry/index.cjs | 10 -------- barretenberg/ts/cjs-entry/index.d.ts | 1 - barretenberg/ts/package.json | 15 ++++++------ barretenberg/ts/scripts/build_wasm.sh | 21 +++++++++++++++++ barretenberg/ts/scripts/cjs_postprocess.sh | 14 +++++++++++ barretenberg/ts/src/barretenberg-threads.wasm | 1 - barretenberg/ts/src/barretenberg.wasm | 1 - .../barretenberg-threads.wasm | 1 + .../src/barretenberg_wasm/barretenberg.wasm | 1 + .../factory/node/index.ts | 12 +++++++++- .../factory/node/index.ts | 12 +++++++++- .../fetch_code/browser/index.ts | 4 ++-- .../fetch_code/node/index.ts | 12 +++++++++- barretenberg/ts/src/bindgen/index.ts | 4 ++-- .../ts/src/crs/node/ignition_files_crs.ts | 12 +++++++++- barretenberg/ts/src/info.json | 22 ------------------ barretenberg/ts/src/info.ts | 23 +++++++++++++++++++ barretenberg/ts/src/main.ts | 2 +- barretenberg/ts/tsconfig.cjs.json | 8 +++++++ barretenberg/ts/tsconfig.json | 2 +- 25 files changed, 131 insertions(+), 68 deletions(-) delete mode 100644 .ignore delete mode 100644 barretenberg/ts/cjs-entry/index.cjs delete mode 100644 barretenberg/ts/cjs-entry/index.d.ts create mode 100755 barretenberg/ts/scripts/build_wasm.sh create mode 100755 barretenberg/ts/scripts/cjs_postprocess.sh delete mode 120000 barretenberg/ts/src/barretenberg-threads.wasm delete mode 120000 barretenberg/ts/src/barretenberg.wasm create mode 120000 barretenberg/ts/src/barretenberg_wasm/barretenberg-threads.wasm create mode 120000 barretenberg/ts/src/barretenberg_wasm/barretenberg.wasm delete mode 100644 barretenberg/ts/src/info.json create mode 100644 barretenberg/ts/src/info.ts create mode 100644 barretenberg/ts/tsconfig.cjs.json diff --git a/.ignore b/.ignore deleted file mode 100644 index d263d2fa829..00000000000 --- a/.ignore +++ /dev/null @@ -1,2 +0,0 @@ -/barretenberg/ts -/barretenberg/foundation \ No newline at end of file diff --git a/barretenberg/cpp/.rebuild_patterns b/barretenberg/cpp/.rebuild_patterns index 24dc32bd6de..c5fea1fede5 100644 --- a/barretenberg/cpp/.rebuild_patterns +++ b/barretenberg/cpp/.rebuild_patterns @@ -1,4 +1,4 @@ -^barretenberg/.*\\.(cpp|cc|cxx|c\\+\\+|h|hpp|hxx|h\\+\\+|c|h|inl|inc|ipp|tpp|cmake)$ -^barretenberg/.*CMakeLists\\.txt$ -^barretenberg/.*Dockerfile.*$ +^barretenberg/cpp/.*\\.(cpp|cc|cxx|c\\+\\+|h|hpp|hxx|h\\+\\+|c|h|inl|inc|ipp|tpp|cmake)$ +^barretenberg/cpp/.*CMakeLists\\.txt$ +^barretenberg/cpp/.*Dockerfile.*$ ^barretenberg/cpp/scripts/ diff --git a/barretenberg/ts/.dockerignore b/barretenberg/ts/.dockerignore index 6a3231fc51c..ab18ce85c3d 100644 --- a/barretenberg/ts/.dockerignore +++ b/barretenberg/ts/.dockerignore @@ -4,4 +4,4 @@ node_modules Dockerfile .yarn !.yarn/releases -.tsbuildinfo \ No newline at end of file +.tsbuildinfo* \ No newline at end of file diff --git a/barretenberg/ts/Dockerfile b/barretenberg/ts/Dockerfile index 619a377532f..faa17cca907 100644 --- a/barretenberg/ts/Dockerfile +++ b/barretenberg/ts/Dockerfile @@ -10,5 +10,5 @@ COPY yarn.lock yarn.lock COPY .yarnrc.yml .yarnrc.yml RUN yarn --immutable COPY . . -RUN yarn formatting && yarn build:ts +RUN yarn formatting && SKIP_CPP_BUILD=1 yarn build CMD ["yarn", "test"] diff --git a/barretenberg/ts/README.md b/barretenberg/ts/README.md index ae92a04e90d..2993b8c9132 100644 --- a/barretenberg/ts/README.md +++ b/barretenberg/ts/README.md @@ -104,15 +104,6 @@ in size) is loaded and keeps page load times responsive. const { Barretenberg, RawBuffer, Crs } = await import('@aztec/bb.js'); ``` -### CommonJS Usage - -The import syntax is slightly different in a CommonJS environment. - -```typescript -const { loadModule } = await import('@aztec/bb.js'); -const { Barretenberg, RawBuffer, Crs } = await loadModule(); -``` - ## Development Create a symlink to the root script `bb.js-dev` in your path. You can now run the current state of the code from diff --git a/barretenberg/ts/cjs-entry/index.cjs b/barretenberg/ts/cjs-entry/index.cjs deleted file mode 100644 index 1e87567d254..00000000000 --- a/barretenberg/ts/cjs-entry/index.cjs +++ /dev/null @@ -1,10 +0,0 @@ -let loadedModule; - -async function loadModule() { - if (!loadedModule) { - loadedModule = await import('../dest/node/index.js'); - } - return loadedModule; -} - -module.exports = { loadModule }; diff --git a/barretenberg/ts/cjs-entry/index.d.ts b/barretenberg/ts/cjs-entry/index.d.ts deleted file mode 100644 index 405d72d5650..00000000000 --- a/barretenberg/ts/cjs-entry/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function loadModule(): Promise; diff --git a/barretenberg/ts/package.json b/barretenberg/ts/package.json index 97ac8ae3980..f00226ec369 100644 --- a/barretenberg/ts/package.json +++ b/barretenberg/ts/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts", "license": "MIT", "type": "module", - "types": "./cjs-entry/index.d.ts", + "types": "./dest/node-cjs/index.d.ts", "exports": { ".": { - "require": "./cjs-entry/index.cjs", + "require": "./dest/node-cjs/index.js", "browser": "./dest/browser/index.js", "default": "./dest/node/index.js" } @@ -22,11 +22,12 @@ "README.md" ], "scripts": { - "clean": "rm -rf ./dest .tsbuildinfo", - "build": "yarn clean && yarn build:wasm && yarn build:ts", - "build:dev": "tsc -b --watch", - "build:wasm": "cd ../cpp && cmake --preset wasm-threads && cmake --build --preset wasm-threads && cmake --preset wasm && cmake --build --preset wasm && ./scripts/strip-wasm.sh", - "build:ts": "tsc -b && cp ./src/barretenberg-threads.wasm ./dest/node && webpack && chmod +x ./dest/node/main.js", + "clean": "rm -rf ./dest .tsbuildinfo .tsbuildinfo.cjs", + "build": "yarn clean && yarn build:wasm && yarn build:esm && yarn build:cjs && yarn build:browser", + "build:wasm": "./scripts/build_wasm.sh", + "build:esm": "tsc -b && chmod +x ./dest/node/main.js", + "build:cjs": "tsc -b tsconfig.cjs.json && ./scripts/cjs_postprocess.sh", + "build:browser": "webpack", "build:bindings": "cd .. && ./scripts/bindgen.sh", "formatting": "prettier --check ./src && eslint --max-warnings 0 ./src", "formatting:fix": "prettier -w ./src", diff --git a/barretenberg/ts/scripts/build_wasm.sh b/barretenberg/ts/scripts/build_wasm.sh new file mode 100755 index 00000000000..340bbf99c7b --- /dev/null +++ b/barretenberg/ts/scripts/build_wasm.sh @@ -0,0 +1,21 @@ +#!/bin/sh +set -eu + +if [ -z "$SKIP_CPP_BUILD" ]; then + # Build the wasms and strip debug symbols. + cd ../cpp + cmake --preset wasm-threads && cmake --build --preset wasm-threads + cmake --preset wasm && cmake --build --preset wasm + ./scripts/strip-wasm.sh + cd ../ts +fi + +# Copy the wasm to its home in the bb.js dest folder. +# We only need the threads wasm, as node always uses threads. +# We need to take two copies for both esm and cjs builds. You can't use symlinks when publishing. +# This probably isn't a big deal however due to compression. +# When building the the browser bundle, both wasms are inlined directly. +mkdir -p ./dest/node/barretenberg_wasm +mkdir -p ./dest/node-cjs/barretenberg_wasm +cp ../cpp/build-wasm-threads/bin/barretenberg.wasm ./dest/node/barretenberg_wasm/barretenberg-threads.wasm +cp ../cpp/build-wasm-threads/bin/barretenberg.wasm ./dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm \ No newline at end of file diff --git a/barretenberg/ts/scripts/cjs_postprocess.sh b/barretenberg/ts/scripts/cjs_postprocess.sh new file mode 100755 index 00000000000..0c2d37565bf --- /dev/null +++ b/barretenberg/ts/scripts/cjs_postprocess.sh @@ -0,0 +1,14 @@ +#!/bin/sh +cat >dest/node-cjs/package.json <