From f0e5193b74fb2a9832495872f0dc0781ad1e8d11 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Sun, 26 May 2024 03:50:55 -0400 Subject: [PATCH] ARM64 Engine demo refresh --- docz/data/engines.xls | 97 +++++++++--------- .../docs/03-demos/19-desktop/05-neutralino.md | 23 ++++- .../03-demos/19-desktop/06-reactnative.md | 6 +- docz/docs/03-demos/20-cli/23-deno.md | 6 +- docz/docs/03-demos/20-cli/index.md | 8 +- .../03-demos/32-extensions/01-extendscript.md | 2 +- docz/docs/03-demos/42-engines/01-duktape.md | 90 +++++++++++++--- docz/docs/03-demos/42-engines/02-v8.md | 68 +++++++++--- docz/docs/03-demos/42-engines/03-rhino.md | 31 ++++-- docz/docs/03-demos/42-engines/04-jsc.md | 46 ++++++++- docz/docs/03-demos/42-engines/05-jint.md | 18 ++-- docz/docs/03-demos/42-engines/06-goja.md | 4 +- docz/docs/03-demos/42-engines/07-nashorn.md | 2 +- docz/docs/03-demos/42-engines/08-quickjs.md | 4 +- docz/docs/03-demos/42-engines/09-hermes.md | 8 +- docz/docs/03-demos/42-engines/15-rb.md | 10 +- docz/docs/03-demos/42-engines/21-boa.md | 16 ++- docz/docs/03-demos/42-engines/22-perl.md | 13 ++- .../03-demos/42-engines/23-jerryscript.md | 25 ++--- docz/docs/03-demos/42-engines/24-graaljs.md | 9 +- docz/docs/03-demos/42-engines/25-mujs.md | 3 +- docz/static/reactnative/rnw.png | Bin 12597 -> 104930 bytes tests/engines-boa.sh | 17 +++ tests/engines-execjs.sh | 13 +++ tests/engines-goja.sh | 20 ++++ tests/engines-graaljs.sh | 38 +++++++ tests/engines-hermes.sh | 22 ++++ tests/engines-jerryscript.sh | 37 +++++++ tests/engines-mujs.sh | 26 +++++ tests/engines-rhino.sh | 54 ++++++++++ 30 files changed, 572 insertions(+), 144 deletions(-) create mode 100755 tests/engines-boa.sh create mode 100755 tests/engines-execjs.sh create mode 100755 tests/engines-goja.sh create mode 100755 tests/engines-graaljs.sh create mode 100755 tests/engines-hermes.sh create mode 100755 tests/engines-jerryscript.sh create mode 100755 tests/engines-mujs.sh create mode 100755 tests/engines-rhino.sh diff --git a/docz/data/engines.xls b/docz/data/engines.xls index 6a83401..fb4591b 100644 --- a/docz/data/engines.xls +++ b/docz/data/engines.xls @@ -1,10 +1,6 @@ - + 10620 11020 @@ -24,21 +20,21 @@ + - +
@@ -62,7 +58,7 @@ ARM - Duktape + Duktape C @@ -72,7 +68,7 @@ - V8 + V8 C++ @@ -82,27 +78,27 @@ - Rhino + Rhino Java - - + + - JSC + JSC C++ - + - Jint + Jint C# @@ -112,7 +108,7 @@ - Goja + Goja Go @@ -122,17 +118,17 @@ - Nashorn + Nashorn Java - - + + - QuickJS + QuickJS C @@ -142,7 +138,7 @@ - Hermes + Hermes C++ @@ -152,7 +148,7 @@ - ChakraCore + ChakraCore C++ @@ -162,7 +158,7 @@ - Boa + Boa Rust @@ -172,17 +168,17 @@ - JE + JE Perl - + - JerryScript + JerryScript C @@ -192,24 +188,24 @@ - GraalJS + GraalJS Java - - + + - MuJS + MuJS C - +
@@ -238,8 +234,7 @@
- +
@@ -263,47 +258,47 @@ ARM - Duktape + Duktape Perl - + - Duktape + Duktape PHP - + - Duktape + Duktape Python - + - Duktape + Duktape Zig - - - + + + - V8 + V8 Rust @@ -313,7 +308,7 @@ - JSC + JSC Swift @@ -323,7 +318,7 @@ - ExecJS + ExecJS Ruby diff --git a/docz/docs/03-demos/19-desktop/05-neutralino.md b/docz/docs/03-demos/19-desktop/05-neutralino.md index 2beeb87..b97486e 100644 --- a/docz/docs/03-demos/19-desktop/05-neutralino.md +++ b/docz/docs/03-demos/19-desktop/05-neutralino.md @@ -193,7 +193,7 @@ This demo was tested in the following environments: | OS and Version | Architecture | Server | Client | Date | |:---------------|:-------------|:---------|:---------|:-----------| | macOS 14.4 | `darwin-x64` | `5.0.0` | `5.0.1` | 2024-03-15 | -| macOS 14.0 | `darwin-arm` | `4.14.1` | `3.12.0` | 2023-10-18 | +| macOS 14.5 | `darwin-arm` | `5.1.0` | `5.1.0` | 2024-05-25 | | Windows 10 | `win10-x64` | `5.1.0` | `5.1.0` | 2024-03-24 | | Windows 11 | `win11-arm` | `4.14.1` | `3.12.0` | 2023-12-01 | | Linux (HoloOS) | `linux-x64` | `5.0.0` | `5.0.1` | 2024-03-21 | @@ -336,7 +336,11 @@ npx @neutralinojs/neu run })(); ``` -9) Close the app and relaunch the app with `npx @neutralinojs/neu run` +9) Close the app. Run the app again: + +```bash +npx @neutralinojs/neu run +``` When the app loads, a table should show in the main screen. @@ -371,7 +375,11 @@ async function exportData() { } ``` -11) Close the app and re-run with `npx @neutralinojs/neu run` +11) Close the app. Run the app again: + +```bash +npx @neutralinojs/neu run +``` When the app loads, click the "Import File" button and select a spreadsheet to see the contents. @@ -398,8 +406,13 @@ save as `SheetJSNeu` will not automatically add the `.xlsx` extension! npx @neutralinojs/neu build ``` -Platform-specific programs will be created in the `dist` folder. For example, -the `darwin-arm` program will be `./dist/sheetjs-neu/sheetjs-neu-mac_arm64` +Platform-specific programs will be created in the `dist` folder: + +| Platform | Path to binary | +|:-------------|:-------------------------------------------| +| `darwin-arm` | `./dist/sheetjs-neu/sheetjs-neu-mac_arm64` | + +Run the generated app and confirm that Presidential data is displayed. [^1]: See [`nativeAllowList`](https://neutralino.js.org/docs/configuration/neutralino.config.json#nativeallowlist-string) in the NeutralinoJS documentation [^2]: See [`os.showOpenDialog`](https://neutralino.js.org/docs/api/os#osshowopendialogtitle-options) in the NeutralinoJS documentation diff --git a/docz/docs/03-demos/19-desktop/06-reactnative.md b/docz/docs/03-demos/19-desktop/06-reactnative.md index 6a17956..f0de457 100644 --- a/docz/docs/03-demos/19-desktop/06-reactnative.md +++ b/docz/docs/03-demos/19-desktop/06-reactnative.md @@ -48,7 +48,7 @@ This demo was tested in the following environments: |:---------------|:-------------|:------------|:-----------| | Windows 10 | `win10-x64` | `v0.73.11` | 2024-03-24 | | Windows 11 | `win11-x64` | `v0.72.12` | 2023-10-14 | -| Windows 11 | `win11-arm` | `v0.72.20` | 2023-12-01 | +| Windows 11 | `win11-arm` | `v0.74.5` | 2024-05-25 | | MacOS 14.4 | `darwin-x64` | `v0.73.22` | 2024-03-24 | | MacOS 14.1.2 | `darwin-arm` | `v0.72.11` | 2023-12-01 | @@ -424,10 +424,10 @@ setup instructions" to find instructions for manual installation. ### Project Setup -1) Create a new project using React Native `0.73.6`: +1) Create a new project using React Native `0.74.1`: ```bash -npx react-native init SheetJSWin --template react-native@0.73.6 +npx react-native init SheetJSWin --template react-native@0.74.1 cd SheetJSWin ``` diff --git a/docz/docs/03-demos/20-cli/23-deno.md b/docz/docs/03-demos/20-cli/23-deno.md index 779e68c..5b6f97e 100644 --- a/docz/docs/03-demos/20-cli/23-deno.md +++ b/docz/docs/03-demos/20-cli/23-deno.md @@ -102,10 +102,10 @@ This demo was last tested in the following deployments: | `darwin-x64` | `1.43.1` | 2024-05-08 | | `darwin-arm` | `1.43.6` | 2024-05-23 | | `win10-x64` | `1.41.3` | 2024-03-24 | -| `win11-x64` | `1.37.2` | 2023-10-14 | -| `win11-arm` | `1.38.4` | 2023-12-01 | +| `win11-x64` | `1.43.6` | 2024-05-25 | +| `win11-arm` | `1.43.6` | 2024-05-25 | | `linux-x64` | `1.41.3` | 2024-03-18 | -| `linux-arm` | `1.38.4` | 2023-12-01 | +| `linux-arm` | `1.43.6` | 2024-05-25 | ::: diff --git a/docz/docs/03-demos/20-cli/index.md b/docz/docs/03-demos/20-cli/index.md index 9bcc0df..fa7f517 100644 --- a/docz/docs/03-demos/20-cli/index.md +++ b/docz/docs/03-demos/20-cli/index.md @@ -90,7 +90,7 @@ This demo was tested in the following deployments: | Architecture | Version | NodeJS | Source | Date | |:-------------|:-------------|:----------|:----------|:-----------| | `darwin-x64` | `4.0.0-rc.4` | `14.15.3` | Pre-built | 2024-03-15 | -| `darwin-arm` | `4.0.0-rc.2` | `18.18.0` | Compiled | 2023-12-01 | +| `darwin-arm` | `4.0.0-rc.6` | `18.20.3` | Compiled | 2024-05-25 | | `win10-x64` | `4.0.0-rc.4` | `14.15.3` | Pre-built | 2024-04-18 | | `win11-arm` | `4.0.0-rc.2` | `20.10.0` | Compiled | 2023-12-01 | | `linux-x64` | `4.0.0-rc.4` | `14.15.3` | Pre-built | 2024-03-21 | @@ -102,7 +102,7 @@ This demo was tested in the following deployments: | Architecture | Version | NodeJS | Date | |:-------------|:--------|:---------|:-----------| | `darwin-x64` | `5.8.1` | `18.5.0` | 2024-03-15 | -| `darwin-arm` | `5.8.1` | `18.5.0` | 2023-12-01 | +| `darwin-arm` | `5.8.1` | `18.5.0` | 2024-05-25 | | `win10-x64` | `5.8.1` | `18.5.0` | 2024-04-18 | | `win11-arm` | `5.8.1` | `18.5.0` | 2023-12-01 | | `linux-x64` | `5.8.1` | `18.5.0` | 2024-03-21 | @@ -114,7 +114,7 @@ This demo was tested in the following deployments: | Architecture | Version | NodeJS | Date | |:-------------|:--------|:----------|:-----------| | `darwin-x64` | `2.4.0` | `21.7.1` | 2024-03-15 | -| `darwin-arm` | `2.3.0` | `21.3.0` | 2023-12-01 | +| `darwin-arm` | `2.4.3` | `22.2.0` | 2024-05-25 | | `win10-x64` | `2.4.2` | `16.20.2` | 2024-04-18 | | `linux-x64` | `2.4.0` | `21.7.1` | 2024-03-21 | | `linux-arm` | `2.3.0` | `21.3.0` | 2023-12-01 | @@ -372,7 +372,7 @@ This demo was last tested in the following deployments: | `darwin-x64` | `12.3.219.9` | `0.88.0` | 2024-03-15 | | `darwin-arm` | `12.6.228.3` | `0.92.0` | 2024-05-23 | | `win10-x64` | `12.3.219.9` | `0.88.0` | 2024-03-24 | -| `win11-x64` | `11.8.172.13` | `0.79.2` | 2023-10-14 | +| `win11-x64` | `12.6.228.3` | `0.92.0` | 2024-05-23 | | `linux-x64` | `12.3.219.9` | `0.88.0` | 2024-03-18 | | `linux-arm` | `12.0.267.8` | `0.82.0` | 2023-12-01 | diff --git a/docz/docs/03-demos/32-extensions/01-extendscript.md b/docz/docs/03-demos/32-extensions/01-extendscript.md index f520a73..b80c4b8 100644 --- a/docz/docs/03-demos/32-extensions/01-extendscript.md +++ b/docz/docs/03-demos/32-extensions/01-extendscript.md @@ -422,7 +422,7 @@ If the InDesign version does not support UXP, a tooltip shows a message: > This file is not executable by any supported script language. -It is strongly recommended to upgrade to InDesign 2023. +[ExtendScript](#extendscript) should be used when UXP is not supported. ::: diff --git a/docz/docs/03-demos/42-engines/01-duktape.md b/docz/docs/03-demos/42-engines/01-duktape.md index 4684bc1..d9c01a3 100644 --- a/docz/docs/03-demos/42-engines/01-duktape.md +++ b/docz/docs/03-demos/42-engines/01-duktape.md @@ -133,7 +133,7 @@ This demo was tested in the following deployments: | `darwin-x64` | `2.7.0` | 2024-04-04 | | `darwin-arm` | `2.7.0` | 2024-05-23 | | `win10-x64` | `2.7.0` | 2024-03-27 | -| `win11-arm` | `2.7.0` | 2023-12-01 | +| `win11-arm` | `2.7.0` | 2024-05-25 | | `linux-x64` | `2.7.0` | 2024-03-21 | | `linux-arm` | `2.7.0` | 2024-05-23 | @@ -404,11 +404,12 @@ file, prints CSV rows from the first worksheet, and creates a XLSB workbook. This demo was tested in the following deployments: -| Architecture | Version | PHP Version | Date | -|:-------------|:--------|:------------|:-----------| -| `darwin-x64` | `2.7.0` | `8.3.4` | 2024-03-15 | -| `darwin-arm` | `2.7.0` | `8.3.2` | 2024-02-13 | -| `linux-x64` | `2.7.0` | `8.2.7` | 2024-03-21 | +| Architecture | Version | PHP | Date | +|:-------------|:--------|:---------|:-----------| +| `darwin-x64` | `2.7.0` | `8.3.4` | 2024-03-15 | +| `darwin-arm` | `2.7.0` | `8.3.2` | 2024-02-13 | +| `linux-x64` | `2.7.0` | `8.2.7` | 2024-03-21 | +| `linux-arm` | `2.7.0` | `8.2.18` | 2024-05-25 | ::: @@ -441,6 +442,13 @@ extension=ffi If this line is prefixed with a `;`, remove the semicolon. If this line does not appear in the file, add it to the end. +:::note pass + +On Linux and macOS, the file may be owned by the `root` user. If writing the +file fails with a normal user account, use `sudo` to launch the text editor. + +::: + 3) Build the Duktape shared library: ```bash @@ -543,6 +551,7 @@ This demo was tested in the following deployments: | `darwin-x64` | `2.7.0` | `3.12.2` | 2024-03-15 | | `darwin-arm` | `2.7.0` | `3.11.7` | 2024-02-13 | | `linux-x64` | `2.7.0` | `3.11.3` | 2024-03-21 | +| `linux-arm` | `2.7.0` | `3.11.2` | 2024-05-25 | ::: @@ -634,6 +643,37 @@ python3 SheetJSDuk.py pres.numbers If the program succeeded, the CSV contents will be printed to console and the file `sheetjsw.xlsb` will be created. That file can be opened with Excel. +:::caution pass + +In some tests, the command failed with an `OSError` message. + +The fix is to explicitly add `./` to the `lib` variable in `SheetJSDuk.py`: + + + + +The name of the library is `libduktape.207.20700.so`: + +```python title="SheetJSDuk.py (change highlighted line)" +# highlight-next-line +lib = "./libduktape.207.20700.so" +``` + + + + +The name of the library is `libduktape.so.207.20700`: + +```python title="SheetJSDuk.py (change highlighted line)" +# highlight-next-line +lib = "./libduktape.so.207.20700" +``` + + + + +::: + ### Zig :::caution Zig support is considered experimental. @@ -744,7 +784,9 @@ This demo was tested in the following deployments: | `darwin-x64` | `2.7.0` | `0.11.0` | 2024-03-10 | | `darwin-arm` | `2.7.0` | `0.12.0` | 2024-05-23 | | `win10-x64` | `2.7.0` | `0.11.0` | 2024-03-10 | +| `win11-arm` | `2.7.0` | `0.12.0` | 2024-05-25 | | `linux-x64` | `2.7.0` | `0.12.0` | 2024-04-25 | +| `linux-arm` | `2.7.0` | `0.12.0` | 2024-05-25 | On Windows, due to incompatibilities between WSL and PowerShell, some commands must be run in WSL Bash. @@ -764,7 +806,7 @@ project folder. -For Intel Mac: +For X64 Mac: ```bash curl -LO https://ziglang.org/download/0.12.0/zig-macos-x86_64-0.12.0.tar.xz @@ -782,10 +824,20 @@ tar -xzf zig-macos-*.tar.xz +For X64 Linux: + ```bash curl -LO https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz -xz -d zig-linux-x86_64-0.12.0.tar.xz -tar -xf zig-linux-x86_64-0.12.0.tar +xz -d zig-linux-*.tar.xz +tar -xf zig-linux-*.tar +``` + +For AArch64 Linux: + +```bash +curl -LO https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz +xz -d zig-linux-*.tar.xz +tar -xf zig-linux-*.tar ``` @@ -797,9 +849,18 @@ The following commands should be run within WSL bash. ::: +For X64 Windows: + ```bash curl -LO https://ziglang.org/download/0.12.0/zig-windows-x86_64-0.12.0.zip unzip zig-windows-x86_64-0.12.0.zip +``` + +For ARM64 Windows: + +```bash +curl -LO https://ziglang.org/download/0.12.0/zig-windows-aarch64-0.12.0.zip +unzip zig-windows-aarch64-0.12.0.zip ``` @@ -818,7 +879,7 @@ unzip zig-windows-x86_64-0.12.0.zip ```bash -./zig-linux-x86_64-0.12.0/zig init +./zig-*/zig init ``` @@ -831,7 +892,7 @@ The following command should be run within Powershell. ::: ```bash -.\zig-windows-x86_64-0.12.0\zig.exe init +.\zig-windows-*\zig.exe init ``` @@ -902,7 +963,7 @@ curl -L -o src/main.zig https://docs.sheetjs.com/duk/main.zig ```bash -./zig-linux-x86_64-0.12.0/zig build run -- pres.numbers +./zig-*/zig build run -- pres.numbers ``` :::caution pass @@ -924,8 +985,10 @@ sudo pacman -Syu glibc linux-api-headers +This command should be run in PowerShell: + ```bash -.\zig-windows-x86_64-0.12.0\zig.exe build run -- pres.numbers +.\zig-windows-*\zig.exe build run -- pres.numbers ``` @@ -956,6 +1019,7 @@ This demo was tested in the following deployments: | `darwin-x64` | `2.2.0` | 2024-03-15 | | `darwin-arm` | `2.2.0` | 2024-02-13 | | `linux-x64` | `2.2.0` | 2024-03-21 | +| `linux-arm` | `2.2.0` | 2024-05-25 | ::: diff --git a/docz/docs/03-demos/42-engines/02-v8.md b/docz/docs/03-demos/42-engines/02-v8.md index 72bf1e6..5196908 100644 --- a/docz/docs/03-demos/42-engines/02-v8.md +++ b/docz/docs/03-demos/42-engines/02-v8.md @@ -125,10 +125,10 @@ This demo was tested in the following deployments: | V8 Version | Platform | OS Version | Compiler | Date | |:--------------|:-------------|:--------------|:-----------------|:-----------| | `12.4.253` | `darwin-x64` | macOS 14.4 | `clang 15.0.0` | 2024-03-15 | -| `12.1.283` | `darwin-arm` | macOS 14.1.2 | `clang 15.0.0` | 2023-12-01 | +| `12.7.130` | `darwin-arm` | macOS 14.5 | `clang 15.0.0` | 2024-05-25 | | `12.5.48` | `win10-x64` | Windows 10 | `CL 19.39.33523` | 2024-03-24 | | `12.5.48` | `linux-x64` | HoloOS 3.5.17 | `gcc 13.1.1` | 2024-03-21 | -| `11.8.82` | `linux-arm` | Debian 12 | `gcc 12.2.0` | 2023-12-01 | +| `12.7.130` | `linux-arm` | Debian 12 | `gcc 12.2.0` | 2024-05-25 | ::: @@ -162,7 +162,7 @@ cd /usr/local/lib :::note pass -If this step throws a permission error, run: +If this step throws a permission error, run the following commands: ```bash sudo mkdir -p /usr/local/lib @@ -226,7 +226,7 @@ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git :::note pass -If this step throws a permission error, run: +If this step throws a permission error, run the following commands and retry: ```bash sudo mkdir -p /usr/local/lib @@ -406,11 +406,11 @@ The recommended fix is to delete the referenced folder and re-run `gclient sync` -5) Checkout the desired version. The following command pulls `12.5.48`: +5) Checkout the desired version. The following command pulls `12.7.130`: ```bash -git checkout tags/12.5.48 -b sample +git checkout tags/12.7.130 -b sample ``` :::caution pass @@ -418,14 +418,14 @@ git checkout tags/12.5.48 -b sample The official documentation recommends: ```bash -git checkout refs/tags/12.5.48 -b sample -t +git checkout refs/tags/12.7.130 -b sample -t ``` This command failed in local testing: ``` -E:\v8\v8>git checkout refs/tags/12.5.48 -b sample -t -fatal: cannot set up tracking information; starting point 'refs/tags/12.5.48' is not a branch +E:\v8\v8>git checkout refs/tags/12.7.130 -b sample -t +fatal: cannot set up tracking information; starting point 'refs/tags/12.7.130' is not a branch ``` ::: @@ -502,6 +502,37 @@ Run the build: ninja -C out.gn/arm64.release.sample v8_monolith ``` +:::caution pass + +When this demo was last tested, an assertion failed: + +``` +../../src/base/small-vector.h: In instantiation of ‘class v8::base::SmallVector, 16>’: +../../src/compiler/turboshaft/loop-unrolling-reducer.h:577:11: required from here +../../src/base/macros.h:215:55: error: static assertion failed: T should be trivially copyable + 215 | static_assert(::v8::base::is_trivially_copyable::value, \ + | ^~~~~ +../../src/base/small-vector.h:25:3: note: in expansion of macro ‘ASSERT_TRIVIALLY_COPYABLE’ + 25 | ASSERT_TRIVIALLY_COPYABLE(T); + | ^~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +The build passed after disabling the assertions: + +```cpp title="src/base/small-vector.h (edit highlighted lines)" + class SmallVector { + // Currently only support trivially copyable and trivially destructible data + // types, as it uses memcpy to copy elements and never calls destructors. + // highlight-start + //ASSERT_TRIVIALLY_COPYABLE(T); + //static_assert(std::is_trivially_destructible::value); + // highlight-end + + public: + static constexpr size_t kInlineSize = kSize; +``` +::: + @@ -587,11 +618,24 @@ ld: multiple errors: unknown file type in '/Users/test/dev/v8/v8/out.gn/x64.rele ```bash g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ - -lv8_libbase -lv8_libplatform -ldl -Lout.gn/arm64.release.sample/obj/ -pthread \ + -ldl -Lout.gn/arm64.release.sample/obj/ -pthread \ -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX ./hello_world ``` +:::info pass + +In older V8 versions, the flags `-lv8_libbase -lv8_libplatform` were required. + +Linking against `libv8_libbase` or `libv8_libplatform` in V8 version `12.4.253` +elicited linker errors: + +``` +ld: multiple errors: unknown file type in '/Users/test/dev/v8/v8/out.gn/x64.release.sample/obj/libv8_libplatform.a'; unknown file type in '/Users/test/dev/v8/v8/out.gn/x64.release.sample/obj/libv8_libbase.a' +``` + +::: + @@ -864,10 +908,10 @@ This demo was last tested in the following deployments: | Architecture | V8 Crate | Date | |:-------------|:---------|:-----------| | `darwin-x64` | `0.89.0` | 2024-04-04 | -| `darwin-arm` | `0.82.0` | 2023-12-01 | +| `darwin-arm` | `0.92.0` | 2024-05-25 | | `win10-x64` | `0.89.0` | 2024-03-24 | | `linux-x64` | `0.91.0` | 2024-04-25 | -| `linux-arm` | `0.82.0` | 2023-12-01 | +| `linux-arm` | `0.92.0` | 2024-05-25 | ::: diff --git a/docz/docs/03-demos/42-engines/03-rhino.md b/docz/docs/03-demos/42-engines/03-rhino.md index 1aa6502..8ef963a 100644 --- a/docz/docs/03-demos/42-engines/03-rhino.md +++ b/docz/docs/03-demos/42-engines/03-rhino.md @@ -1,5 +1,6 @@ --- -title: Java + Rhino +title: Taming Data with Rhino +sidebar_label: Java + Rhino pagination_prev: demos/bigdata/index pagination_next: solutions/input --- @@ -11,11 +12,11 @@ import CodeBlock from '@theme/CodeBlock'; Rhino is an ES3+ engine in Java. -The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone) -can be parsed and evaluated in a Rhino context. +[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing +data from spreadsheets. -This demo wraps workbooks and sheets into separate Java classes. The final -result is a JAR. +The ["Complete Example"](#complete-example) section includes a complete Java +command-line tool for reading data from spreadsheets and printing CSV rows. :::caution pass @@ -30,8 +31,19 @@ This demo was tested in the following deployments: | OpenJDK | Rhino | Date | |:--------|:---------|:-----------| | 22 | `1.7.14` | 2024-04-04 | -| 21.0.2 | `1.7.14` | 2024-04-25 | -| 17.0.10 | `1.7.14` | 2024-03-25 | +| 21.0.3 | `1.7.15` | 2024-05-24 | +| 20.0.2 | `1.7.15` | 2024-05-25 | +| 19.0.2 | `1.7.15` | 2024-05-25 | +| 18.0.2 | `1.7.15` | 2024-05-25 | +| 17.0.11 | `1.7.15` | 2024-05-25 | +| 16.0.1 | `1.7.15` | 2024-05-25 | +| 15.0.10 | `1.7.15` | 2024-05-25 | +| 14.0.2 | `1.7.15` | 2024-05-25 | +| 13.0.14 | `1.7.15` | 2024-05-25 | +| 12.0.2 | `1.7.15` | 2024-05-25 | +| 11.0.22 | `1.7.15` | 2024-05-25 | +| 10.0.2 | `1.7.15` | 2024-05-25 | +| 9 | `1.7.15` | 2024-05-25 | | 1.8.0 | `1.7.14` | 2024-04-25 | ::: @@ -49,6 +61,9 @@ context.setOptimizationLevel(-1); ::: +The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone) +can be parsed and evaluated in a Rhino context. + Binary strings can be passed back and forth. _Initialize Rhino_ @@ -144,7 +159,7 @@ cd sheetjs-java 2) Download the Rhino JAR and rename to `rhino.jar`: ``` -curl -L -o rhino.jar https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.14/rhino-1.7.14.jar +curl -L -o rhino.jar https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.15/rhino-1.7.15.jar ``` 3) Download the SheetJS Standalone script and the test file. Save both files in diff --git a/docz/docs/03-demos/42-engines/04-jsc.md b/docz/docs/03-demos/42-engines/04-jsc.md index 45afab5..6680bbc 100644 --- a/docz/docs/03-demos/42-engines/04-jsc.md +++ b/docz/docs/03-demos/42-engines/04-jsc.md @@ -9,6 +9,9 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; +export const r = {style: {color:"red"}}; +export const B = {style: {fontWeight:"bold"}}; + [JavaScriptCore](https://developer.apple.com/documentation/javascriptcore) (JSC) is the JavaScript engine powering the Safari web browser. @@ -389,6 +392,7 @@ This demo was tested in the following environments: | `darwin-x64` | `7618.1.15.14.7` | 2024-04-24 | | `darwin-arm` | `7618.2.12.11.7` | 2024-05-24 | | `linux-x64` | `7618.1.15.14.7` | 2024-04-24 | +| `linux-arm` | `7618.2.12.11.7` | 2024-05-25 | ::: @@ -503,10 +507,50 @@ env CFLAGS="-Wno-error=dangling-reference -Wno-dangling-reference" CXXFLAGS="-Wn cd .. ``` -:::danger pass +:::caution pass When this was last tested on the Steam Deck, the build ran for 24 minutes! +::: + +:::danger pass + +When this demo was last tested on ARM64, there was a dangling pointer error: + +
+WebKitBuild/JSCOnly/Release/WTF/Headers/wtf/SentinelLinkedList.h:61:55: error: storing the address of local variable ‘toBeRemoved’ in ‘{"*"}MEM[(struct BasicRawSentinelNode {"*"} const &)this_4(D) + 96].WTF::BasicRawSentinelNode<JSC::CallLinkInfoBase>::m_next’ [-Werror=dangling-pointer=]
+{"   61 |"}     void setNext(BasicRawSentinelNode* next) {"{"} m_next = next; {"}"}
+{"      |"}                                                ~~~~~~~^~~~~~
+
+ +The error can be suppressed with a preprocessor pragma: + +```cpp title="WebKitBuild/JSCOnly/Release/WTF/Headers/wtf/SentinelLinkedList.h (add highlighted lines)" + BasicRawSentinelNode() = default; + +// highlight-start +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdangling-pointer" +// highlight-end + + void setPrev(BasicRawSentinelNode* prev) { m_prev = prev; } + void setNext(BasicRawSentinelNode* next) { m_next = next; } + +// highlight-next-line +#pragma GCC diagnostic pop + + + T* prev() const { return static_cast(PtrTraits::unwrap(m_prev)); } +``` + +After patching the header, JSC must be built without WebAssembly or JIT support: + +```bash +cd WebKit-WebKit-7618.2.12.11.7 +env CFLAGS="-Wno-error=dangling-reference -Wno-dangling-reference" CXXFLAGS="-Wno-error=dangling-reference -Wno-dangling-reference" Tools/Scripts/build-webkit --jsc-only --cmakeargs="-Wno-error -DENABLE_STATIC_JSC=ON -DUSE_THIN_ARCHIVES=OFF -DCMAKE_C_FLAGS=\"-Wno-error -Wno-dangling-reference\" -DCMAKE_CXX_FLAGS=-Wno-error -Wno-dangling-reference" --make-args="-j1 -Wno-error -Wno-error=dangling-reference" -j1 --no-jit --no-webassembly +cd .. +``` + :::
diff --git a/docz/docs/03-demos/42-engines/05-jint.md b/docz/docs/03-demos/42-engines/05-jint.md index 22652fc..328529f 100644 --- a/docz/docs/03-demos/42-engines/05-jint.md +++ b/docz/docs/03-demos/42-engines/05-jint.md @@ -161,14 +161,14 @@ System.IO.File.WriteAllBytes("SheetJSJint.xlsb", outfile); This demo was tested in the following deployments: -| Architecture | Jint Version | Date | -|:-------------|:------------------|:-----------| -| `darwin-x64` | `3.0.1` | 2024-03-15 | -| `darwin-arm` | `3.0.0-beta-2056` | 2023-12-01 | -| `win10-x64` | `3.1.0` | 2024-04-17 | -| `win11-arm` | `3.0.0-beta-2056` | 2023-12-01 | -| `linux-x64` | `3.1.0` | 2024-04-25 | -| `linux-arm` | `3.0.0-beta-2056` | 2023-12-01 | +| Architecture | Jint | Date | +|:-------------|:--------|:-----------| +| `darwin-x64` | `3.0.1` | 2024-03-15 | +| `darwin-arm` | `3.1.2` | 2024-05-25 | +| `win10-x64` | `3.1.0` | 2024-04-17 | +| `win11-arm` | `3.1.2` | 2024-05-25 | +| `linux-x64` | `3.1.0` | 2024-04-25 | +| `linux-arm` | `3.1.2` | 2024-05-25 | ::: @@ -248,7 +248,7 @@ dotnet run ```bash dotnet nuget add source https://www.myget.org/F/jint/api/v3/index.json -dotnet add package Jint --version 3.1.0 +dotnet add package Jint --version 3.1.2 ``` To verify Jint is installed, replace `Program.cs` with the following: diff --git a/docz/docs/03-demos/42-engines/06-goja.md b/docz/docs/03-demos/42-engines/06-goja.md index aa47a87..4c2b046 100644 --- a/docz/docs/03-demos/42-engines/06-goja.md +++ b/docz/docs/03-demos/42-engines/06-goja.md @@ -97,9 +97,9 @@ This demo was tested in the following deployments: | `darwin-x64` | `e401ed4` | `1.21.7` | 2024-04-25 | | `darwin-arm` | `ccbae20` | `1.22.3` | 2024-05-23 | | `win10-x64` | `e401ed4` | `1.22.1` | 2024-03-24 | -| `win11-arm` | `b396bb4` | `1.21.1` | 2023-12-01 | +| `win11-arm` | `ccbae20` | `1.22.3` | 2024-05-25 | | `linux-x64` | `e401ed4` | `1.22.1` | 2024-03-21 | -| `linux-arm` | `b396bb4` | `1.21.4` | 2023-12-01 | +| `linux-arm` | `ccbae20` | `1.19.8` | 2024-05-25 | At the time of writing, Goja did not have proper version numbers. Versions are identified by Git commit hashes. diff --git a/docz/docs/03-demos/42-engines/07-nashorn.md b/docz/docs/03-demos/42-engines/07-nashorn.md index db35194..ba62882 100644 --- a/docz/docs/03-demos/42-engines/07-nashorn.md +++ b/docz/docs/03-demos/42-engines/07-nashorn.md @@ -106,7 +106,7 @@ This demo was tested in the following deployments: | OpenJDK | Nashorn | Date | |:--------|:----------------|:-----------| | 22 | 15.4 standalone | 2024-03-23 | -| 21.0.2 | 15.4 standalone | 2024-03-23 | +| 21.0.3 | 15.4 standalone | 2024-05-24 | | 20.0.2 | 15.4 standalone | 2024-03-23 | | 19.0.2 | 15.4 standalone | 2024-03-23 | | 18.0.2 | 15.4 standalone | 2024-03-23 | diff --git a/docz/docs/03-demos/42-engines/08-quickjs.md b/docz/docs/03-demos/42-engines/08-quickjs.md index e509a14..76d83d7 100644 --- a/docz/docs/03-demos/42-engines/08-quickjs.md +++ b/docz/docs/03-demos/42-engines/08-quickjs.md @@ -266,9 +266,9 @@ This demo was tested in the following deployments: | `darwin-x64` | `6a89d7c` | 2024-03-15 | | `darwin-arm` | `d378a9f` | 2024-05-23 | | `win10-x64` | `9e561d5` | 2024-03-04 | -| `win11-arm` | `03cc5ec` | 2023-12-01 | +| `win11-arm` | `d378a9f` | 2024-05-25 | | `linux-x64` | `3b45d15` | 2024-04-25 | -| `linux-arm` | `03cc5ec` | 2023-12-01 | +| `linux-arm` | `d378a9f` | 2024-05-25 | When the demo was tested, `d378a9f` was the HEAD commit on the `master` branch. diff --git a/docz/docs/03-demos/42-engines/09-hermes.md b/docz/docs/03-demos/42-engines/09-hermes.md index a8e1a8c..d69cc8d 100644 --- a/docz/docs/03-demos/42-engines/09-hermes.md +++ b/docz/docs/03-demos/42-engines/09-hermes.md @@ -367,7 +367,7 @@ This demo was tested in the following deployments: | `darwin-x64` | `d070c74` | 2024-04-25 | | `darwin-arm` | `d070c74` | 2024-05-23 | | `linux-x64` | `d217af8` | 2024-03-21 | -| `linux-arm` | `84732b3` | 2023-12-01 | +| `linux-arm` | `d070c74` | 2024-05-25 | The main Hermes source tree does not have Windows support. The `hermes-windows` fork, which powers React Native for Windows, does have built-in support[^5] @@ -405,6 +405,12 @@ On Debian and Ubuntu: sudo apt install cmake git ninja-build libicu-dev python zip libreadline-dev ``` +:::note pass + +When using virtual machines, Linux builds require at least 8 GB memory. + +::: + 1) Make a project directory: diff --git a/docz/docs/03-demos/42-engines/15-rb.md b/docz/docs/03-demos/42-engines/15-rb.md index c386e7c..46baa48 100644 --- a/docz/docs/03-demos/42-engines/15-rb.md +++ b/docz/docs/03-demos/42-engines/15-rb.md @@ -71,13 +71,15 @@ This demo was tested in the following deployments: | Platform | Ruby | ExecJS | Date | |:-------------|:---------|:--------|:-----------| | `darwin-x64` | `2.6.10` | `2.9.1` | 2024-04-25 | -| `darwin-arm` | `2.6.10` | `2.9.1` | 2023-12-01 | +| `darwin-arm` | `2.6.10` | `2.9.1` | 2024-05-25 | | `win10-x64` | `3.2.3` | `2.9.1` | 2024-03-10 | -| `win11-arm` | `3.0.2` | `2.9.1` | 2023-12-01 | +| `win11-arm` | `3.0.2` | `2.9.1` | 2024-05-25 | | `linux-x64` | `3.0.5` | `2.9.1` | 2024-03-21 | -| `linux-arm` | `2.7.4` | `2.9.1` | 2023-12-01 | +| `linux-arm` | `3.1.2` | `2.9.1` | 2024-05-25 | -**Note: The Windows 11 ARM64 test used the Ruby version that ships with WSL.** +When the demo was last tested, there was no official Ruby release for Windows +on ARM. The `win11-arm` test was run in WSL. The `win10-x64` test used the +official Ruby for Windows x64 release. ::: diff --git a/docz/docs/03-demos/42-engines/21-boa.md b/docz/docs/03-demos/42-engines/21-boa.md index c858028..b204524 100644 --- a/docz/docs/03-demos/42-engines/21-boa.md +++ b/docz/docs/03-demos/42-engines/21-boa.md @@ -123,9 +123,21 @@ This demo was tested in the following deployments: | `darwin-x64` | `0.18.0` | 2024-04-25 | | `darwin-arm` | `0.18.0` | 2024-05-23 | | `win10-x64` | `0.18.0` | 2024-04-25 | -| `win11-arm` | `0.17.3` | 2023-12-01 | +| `win11-arm` | `0.18.0` | 2024-05-25 | | `linux-x64` | `0.18.0` | 2024-03-21 | -| `linux-arm` | `0.17.3` | 2023-12-01 | +| `linux-arm` | `0.18.0` | 2024-05-25 | + +::: + +0) Install Rust. + +:::caution pass + +Boa `0.18.0` requires Rust version `1.67` or later. + +Debian 12 (Bullseye) ships with Rust version `1.63.0`. + +It is strongly recommended to install Rust from the official distribution. ::: diff --git a/docz/docs/03-demos/42-engines/22-perl.md b/docz/docs/03-demos/42-engines/22-perl.md index a7bd3a5..a6a3768 100644 --- a/docz/docs/03-demos/42-engines/22-perl.md +++ b/docz/docs/03-demos/42-engines/22-perl.md @@ -102,14 +102,21 @@ write_file("SheetJE.fods", $fods); :::note Tested Deployments -This demo was tested on 2024-02-13 against JE 0.066 +This demo was tested in the following deployments: + +| Architecture | Version | Date | +|:-------------|:--------|:-----------| +| `darwin-x64` | `0.066` | 2024-02-13 | +| `darwin-arm` | `0.066` | 2024-05-25 | +| `linux-x64` | `0.066` | 2024-02-13 | +| `linux-arm` | `0.066` | 2024-05-25 | ::: -1) Install `JE` through CPAN: +1) Install `JE` and `File::Slurp` through CPAN: ```bash -cpan install JE +cpan install JE File::Slurp ``` 2) Download the [ExtendScript build](/docs/getting-started/installation/extendscript): diff --git a/docz/docs/03-demos/42-engines/23-jerryscript.md b/docz/docs/03-demos/42-engines/23-jerryscript.md index 09b5dfe..307e9bb 100644 --- a/docz/docs/03-demos/42-engines/23-jerryscript.md +++ b/docz/docs/03-demos/42-engines/23-jerryscript.md @@ -36,12 +36,12 @@ This demo was tested in the following environments: | Architecture | Commit | Date | |:-------------|:----------|:-----------| -| `darwin-x64` | `47bd5d4` | 2024-04-25 | -| `darwin-arm` | `ef4cb2b` | 2023-12-08 | +| `darwin-x64` | `35465ed` | 2024-05-25 | +| `darwin-arm` | `35465ed` | 2024-05-25 | | `win10-x64` | `47bd5d4` | 2024-04-14 | -| `win11-arm` | `ef4cb2b` | 2023-12-08 | +| `win11-arm` | `35465ed` | 2024-05-25 | | `linux-x64` | `cefd391` | 2024-03-21 | -| `linux-arm` | `ef4cb2b` | 2023-12-08 | +| `linux-arm` | `35465ed` | 2024-05-25 | The Windows tests were run in WSL. @@ -413,17 +413,6 @@ as a Base64 string and directly add it to an amalgamated script. 0) Build the library and command line tool with required options. -:::info pass - -The "Integration Example" builds JerryScript. The CLI test must be run from the -repo folder. - -```bash -cd jerryscript -``` - -::: - If the "Integration Example" was not tested, run the following commands: ```bash @@ -432,6 +421,12 @@ cd jerryscript python3 tools/build.py --error-messages=ON --logging=ON --mem-heap=8192 --cpointer-32bit=ON ``` +If the "Integration Example" was tested, enter the `jerryscript` folder: + +```bash +cd jerryscript +``` + 1) Download the SheetJS Standalone script, shim script and test file. Move all three files to the `jerryscript` cloned repo directory: diff --git a/docz/docs/03-demos/42-engines/24-graaljs.md b/docz/docs/03-demos/42-engines/24-graaljs.md index 4dc806e..61ad0ad 100644 --- a/docz/docs/03-demos/42-engines/24-graaljs.md +++ b/docz/docs/03-demos/42-engines/24-graaljs.md @@ -54,9 +54,12 @@ This demo was tested in the following deployments: | OpenJDK | GraalJS | Date | |:--------|:--------|:-----------| -| 22 | 24.0.0 | 2024-03-23 | -| 21.0.2 | 24.0.0 | 2024-03-23 | -| 17.0.8 | 24.0.1 | 2024-05-23 | +| 22 | 24.0.1 | 2024-05-25 | +| 21.0.3 | 24.0.1 | 2024-05-25 | +| 20.0.2 | 24.0.1 | 2024-05-25 | +| 19.0.2 | 24.0.1 | 2024-05-25 | +| 18.0.2 | 24.0.1 | 2024-05-25 | +| 17.0.10 | 24.0.1 | 2024-05-25 | ::: diff --git a/docz/docs/03-demos/42-engines/25-mujs.md b/docz/docs/03-demos/42-engines/25-mujs.md index d8e9a75..2e8c3a8 100644 --- a/docz/docs/03-demos/42-engines/25-mujs.md +++ b/docz/docs/03-demos/42-engines/25-mujs.md @@ -322,9 +322,10 @@ This demo was tested in the following deployments: | Architecture | Version | Date | |:-------------|:--------|:-----------| -| `darwin-x64` | `1.3.4` | 2024-04-21 | +| `darwin-x64` | `1.3.4` | 2024-05-25 | | `darwin-arm` | `1.3.4` | 2024-05-23 | | `linux-x64` | `1.3.4` | 2024-04-21 | +| `linux-arm` | `1.3.4` | 2024-05-25 | ::: diff --git a/docz/static/reactnative/rnw.png b/docz/static/reactnative/rnw.png index 01a72266a03f2b02b19704aff83aec7e6ba15a12..fc834fbf20690d37d9084cb823ba528a814932f7 100644 GIT binary patch literal 104930 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 Trq@XV{+!pkq*<(v3;jO;cP@vC literal 12597 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 IzV!RQ0d`58y#N3J diff --git a/tests/engines-boa.sh b/tests/engines-boa.sh new file mode 100755 index 0000000..faec581 --- /dev/null +++ b/tests/engines-boa.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/boa + +cd /tmp +rm -rf sheetjs-boa + +cargo new sheetjs-boa +cd sheetjs-boa +cargo run; echo $? + +cargo add boa_engine + +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://sheetjs.com/pres.xlsx + +curl -L -o src/main.rs https://docs.sheetjs.com/boa/main.rs +cargo run --release; echo $? \ No newline at end of file diff --git a/tests/engines-execjs.sh b/tests/engines-execjs.sh new file mode 100755 index 0000000..09d7094 --- /dev/null +++ b/tests/engines-execjs.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/rb +cd /tmp +rm -rf sheetjs-rb +mkdir -p sheetjs-rb +cd sheetjs-rb + +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://sheetjs.com/pres.numbers + +curl -LO https://docs.sheetjs.com/execjs/ExecSheetJS.rb + +ruby ExecSheetJS.rb pres.numbers; echo $? \ No newline at end of file diff --git a/tests/engines-goja.sh b/tests/engines-goja.sh new file mode 100755 index 0000000..97aef42 --- /dev/null +++ b/tests/engines-goja.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/goja + +cd /tmp +rm -rf SheetGoja + +mkdir SheetGoja +cd SheetGoja +go mod init SheetGoja +go get github.com/dop251/goja + +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/shim.min.js +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://sheetjs.com/pres.numbers + +curl -LO https://docs.sheetjs.com/goja/SheetGoja.go + +go build SheetGoja.go + +./SheetGoja pres.numbers diff --git a/tests/engines-graaljs.sh b/tests/engines-graaljs.sh new file mode 100755 index 0000000..2ad0f0f --- /dev/null +++ b/tests/engines-graaljs.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/graaljs +cd /tmp +rm -rf sheetjs-graaljs +mkdir -p sheetjs-graaljs +cd sheetjs-graaljs + +curl -LO "https://repo1.maven.org/maven2/org/graalvm/js/js-scriptengine/24.0.1/js-scriptengine-24.0.1.jar" +curl -LO "https://repo1.maven.org/maven2/org/graalvm/js/js-language/24.0.1/js-language-24.0.1.jar" +curl -LO "https://repo1.maven.org/maven2/org/graalvm/polyglot/polyglot/24.0.1/polyglot-24.0.1.jar" +curl -LO "https://repo1.maven.org/maven2/org/graalvm/sdk/collections/24.0.1/collections-24.0.1.jar" +curl -LO "https://repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/24.0.1/truffle-api-24.0.1.jar" +curl -LO "https://repo1.maven.org/maven2/org/graalvm/sdk/nativeimage/24.0.1/nativeimage-24.0.1.jar" +curl -LO "https://repo1.maven.org/maven2/org/graalvm/shadowed/icu4j/24.0.1/icu4j-24.0.1.jar" +curl -LO "https://repo1.maven.org/maven2/org/graalvm/regex/regex/24.0.1/regex-24.0.1.jar" + +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/shim.min.js +curl -LO https://sheetjs.com/pres.xlsx + +curl -LO https://docs.sheetjs.com/nashorn/SheetJSNashorn.java + +for n in {17..22}; do + export JAVA_HOME=`/usr/libexec/java_home -v $n` + java -version + rm -fr SheetJSNashorn.class SheetJSNashorn.jar sheethorn + javac SheetJSNashorn.java + + java -cp ".:js-scriptengine-24.0.1.jar:js-language-24.0.1.jar:polyglot-24.0.1.jar:collections-24.0.1.jar:truffle-api-24.0.1.jar:nativeimage-24.0.1.jar:icu4j-24.0.1.jar:regex-24.0.1.jar" -Dpolyglot.js.nashorn-compat=true SheetJSNashorn pres.xlsx + + jar -cf SheetJSNashorn.jar SheetJSNashorn.class xlsx.full.min.js shim.min.js + + mkdir -p sheethorn + cp *.jar pres.xlsx sheethorn + cd sheethorn + java -cp ".:js-scriptengine-24.0.1.jar:js-language-24.0.1.jar:polyglot-24.0.1.jar:collections-24.0.1.jar:truffle-api-24.0.1.jar:nativeimage-24.0.1.jar:icu4j-24.0.1.jar:regex-24.0.1.jar:SheetJSNashorn.jar" -Dpolyglot.js.nashorn-compat=true SheetJSNashorn pres.xlsx + cd - +done \ No newline at end of file diff --git a/tests/engines-hermes.sh b/tests/engines-hermes.sh new file mode 100755 index 0000000..d768070 --- /dev/null +++ b/tests/engines-hermes.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/hermes + +cd /tmp +rm -rf sheetjs-hermes +mkdir -p sheetjs-hermes +cd sheetjs-hermes + +curl -LO https://docs.sheetjs.com/hermes/Makefile +curl -LO https://docs.sheetjs.com/hermes/sheetjs-hermes.cpp + +make init + +make sheetjs-hermes + +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://sheetjs.com/pres.numbers + +cp ./build_release/API/hermes/libhermes.* . +cp ./build_release/jsi/libjsi.* . + +./sheetjs-hermes pres.numbers; echo $? diff --git a/tests/engines-jerryscript.sh b/tests/engines-jerryscript.sh new file mode 100755 index 0000000..979f6dd --- /dev/null +++ b/tests/engines-jerryscript.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/jerryscript +cd /tmp +rm -rf SheetJSJerry +mkdir -p SheetJSJerry +cd SheetJSJerry + +git clone --depth=1 https://github.com/jerryscript-project/jerryscript.git +cd jerryscript +python3 tools/build.py --error-messages=ON --logging=ON --mem-heap=8192 --cpointer-32bit=ON +cd .. + +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/shim.min.js +curl -LO https://sheetjs.com/pres.xlsx + +# Integration Example +curl -LO https://docs.sheetjs.com/jerryscript/sheetjs.jerry.c + +gcc -o sheetjs.jerry -Ijerryscript/jerry-ext/include -Ijerryscript/jerry-math/include -Ijerryscript/jerry-core/include sheetjs.jerry.c -ljerry-core -ljerry-ext -ljerry-port -lm -Ljerryscript/build/lib -Wno-pointer-sign +./sheetjs.jerry pres.xlsx; echo $? + +# CLI Test +node -e "fs.writeFileSync('payload.js', 'var payload = \"' + fs.readFileSync('pres.xlsx').toString('base64') + '\";')" + +cat >global.js <jerry.js < xlsx.jerry.js +jerryscript/build/bin/jerry xlsx.jerry.js; echo $? \ No newline at end of file diff --git a/tests/engines-mujs.sh b/tests/engines-mujs.sh new file mode 100755 index 0000000..243e52c --- /dev/null +++ b/tests/engines-mujs.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/mujs + +cd /tmp +rm -rf sheetjs-mu + +mkdir sheetjs-mu +cd sheetjs-mu + +curl -LO https://mujs.com/downloads/mujs-1.3.4.zip +unzip mujs-1.3.4.zip +cd mujs-1.3.4 +make release +cd .. + +cp mujs-1.3.4/build/release/libmujs.a mujs-1.3.4/mujs.h . + +curl -LO https://docs.sheetjs.com/mujs/SheetJSMu.c + +gcc -o SheetJSMu SheetJSMu.c -L. -lmujs -lm -lc -std=c89 -Wall + +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/shim.min.js +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://sheetjs.com/pres.xlsb + +./SheetJSMu pres.xlsb diff --git a/tests/engines-rhino.sh b/tests/engines-rhino.sh new file mode 100755 index 0000000..4314929 --- /dev/null +++ b/tests/engines-rhino.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# https://docs.sheetjs.com/docs/demos/engines/rhino + +cd /tmp +rm -rf sheetjs-java +mkdir -p sheetjs-java +cd sheetjs-java + +curl -L -o rhino.jar https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.15/rhino-1.7.15.jar + +curl -LO https://cdn.sheetjs.com/xlsx-0.20.2/package/dist/xlsx.full.min.js +curl -LO https://docs.sheetjs.com/pres.xlsx + +curl -LO https://docs.sheetjs.com/rhino/SheetJSRhino.zip +unzip SheetJSRhino.zip + +cat >SheetJSRhino.java <