v8-windows
This commit is contained in:
parent
584af134db
commit
a6aba251e5
@ -30,7 +30,7 @@ sequenceDiagram
|
||||
actor U as User
|
||||
participant P as Page
|
||||
participant A as Site
|
||||
U->>P: click button
|
||||
U->>P: load site
|
||||
P->>A: fetch file
|
||||
A->>P: raw file
|
||||
Note over P: parse file
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Wails
|
||||
title: Spreadsheet-Powered Wails Apps
|
||||
sidebar_label: Wails
|
||||
description: Build data-intensive desktop apps using Wails. Seamlessly integrate spreadsheets into your app using SheetJS. Modernize Excel-powered business processes with confidence.
|
||||
pagination_prev: demos/mobile/index
|
||||
@ -9,8 +9,6 @@ sidebar_custom_props:
|
||||
summary: Webview + Go Backend
|
||||
---
|
||||
|
||||
# Spreadsheet-Powered Wails Apps
|
||||
|
||||
import current from '/version.js';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
@ -47,10 +45,11 @@ app to read and write workbooks. The app will look like the screenshots below:
|
||||
|
||||
</td></tr></tbody></table>
|
||||
|
||||
:::info
|
||||
:::tip pass
|
||||
|
||||
This demo assumes some familiarity with JavaScript and with Go. If you would
|
||||
prefer a pure JavaScript solution, the [Electron](/docs/demos/desktop/electron)
|
||||
This demo assumes familiarity with the Go programming language.
|
||||
|
||||
For a pure JavaScript solution, the [Electron](/docs/demos/desktop/electron)
|
||||
platform provides many native features out of the box.
|
||||
|
||||
:::
|
||||
@ -60,11 +59,11 @@ platform provides many native features out of the box.
|
||||
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
|
||||
installed in the `frontend` folder and imported in frontend scripts.
|
||||
|
||||
:::caution
|
||||
:::caution pass
|
||||
|
||||
Wails currently does not provide the equivalent of NodeJS `fs` module.
|
||||
|
||||
Reading and writing raw file data must be implemented in native Go code.
|
||||
**Reading and writing raw file data must be implemented in native Go code.**
|
||||
|
||||
:::
|
||||
|
||||
@ -144,6 +143,8 @@ func (a *App) ReadFile() string {
|
||||
Wails will automatically create bindings for use in JS. The `App` binding module
|
||||
will export the function `ReadFile`.
|
||||
|
||||
The following example uses the [SvelteJS](/docs/demos/frontend/svelte) framework:
|
||||
|
||||
```js title="frontend/src/App.svelte"
|
||||
import { read, utils } from 'xlsx';
|
||||
import { ReadFile } from '../wailsjs/go/main/App';
|
||||
@ -163,7 +164,7 @@ async function importFile(evt) {
|
||||
|
||||
### Writing Files
|
||||
|
||||
:::info
|
||||
:::info pass
|
||||
|
||||
The SheetJS `write` method[^7] can write spreadsheets in a number of formats[^8]
|
||||
including XLSX, XLSB, XLS, and NUMBERS. It expects a `bookType` option. This
|
||||
@ -262,7 +263,9 @@ func (a *App) WriteFile(b64 string, path string) {
|
||||
#### JS
|
||||
|
||||
Wails will automatically create bindings for use in JS. The `App` binding module
|
||||
will export the functions `SaveFile` and `WriteFile`:
|
||||
will export the functions `SaveFile` and `WriteFile`.
|
||||
|
||||
The following example uses the [SvelteJS](/docs/demos/frontend/svelte) framework:
|
||||
|
||||
```js title="frontend/src/App.svelte"
|
||||
import { utils, write } from 'xlsx';
|
||||
@ -290,8 +293,14 @@ async function exportFile(table_element) {
|
||||
|
||||
:::note
|
||||
|
||||
This demo was tested against Wails `v2.4.1` on 2023 April 30 using
|
||||
the Svelte TypeScript starter.
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| OS and Version | Arch | Wails | Date |
|
||||
|:---------------|:-----|:---------|:-----------|
|
||||
| macOS 12.6.3 | x64 | `v2.5.1` | 2023-08-24 |
|
||||
| macOS 13.5.1 | ARM | `v2.5.1` | 2023-08-24 |
|
||||
| Windows 10 | x64 | `v2.5.1` | 2023-08-25 |
|
||||
| Linux (HoloOS) | x64 | `v2.5.1` | 2023-08-25 |
|
||||
|
||||
:::
|
||||
|
||||
@ -326,12 +335,22 @@ Your system is ready for Wails development!
|
||||
|
||||
If a required dependency is missing, it will be displayed.
|
||||
|
||||
:::note
|
||||
:::note pass
|
||||
|
||||
None of the optional packages are required for building and running this demo.
|
||||
|
||||
:::
|
||||
|
||||
:::info pass
|
||||
|
||||
On the Steam Deck (HoloOS), some dependencies must be reinstalled:
|
||||
|
||||
```bash
|
||||
sudo pacman -Syu base-devel gtk glib2 pango harfbuzz cairo gdk-pixbuf2 atk libsoup
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
</details>
|
||||
|
||||
1) Create a new Wails app:
|
||||
@ -374,6 +393,15 @@ wails build
|
||||
|
||||
At the end, it will print the path to the generated program. Run the program!
|
||||
|
||||
**Testing**
|
||||
|
||||
When run, the program will download [`pres.xlsx`](https://sheetjs.com/pres.xlsx)
|
||||
and display the contents of the first worksheet in a table.
|
||||
|
||||
To test export features, click "Export XLSX". The app will ask for a file name
|
||||
and location. After clicking Save, the app will export to XLSX. This file can be
|
||||
opened in a spreadsheet editor such as Excel.
|
||||
|
||||
[^1]: See ["How does it Work?"](https://wails.io/docs/howdoesitwork) in the Wails documentation.
|
||||
[^2]: See [`read` in "Reading Files"](/docs/api/parse-options)
|
||||
[^3]: See [`sheet_to_html` in "Utilities"](/docs/api/utilities/html#html-table-output)
|
||||
|
@ -1,5 +1,7 @@
|
||||
---
|
||||
title: C++ + V8
|
||||
title: Blazing Fast Data Processing with V8
|
||||
sidebar_label: C++ + V8
|
||||
description: Process structured data in C++ or Rust programs. Seamlessly integrate spreadsheets by paring V8 and SheetJS. Modernize workflows while preserving Excel compatibility.
|
||||
pagination_prev: demos/bigdata/index
|
||||
pagination_next: solutions/input
|
||||
---
|
||||
@ -9,14 +11,25 @@ import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
V8 is an embeddable JS engine written in C++. It powers Chromium and Chrome,
|
||||
NodeJS and Deno, Adobe UXP and other platforms.
|
||||
[V8](https://v8.dev/) is an embeddable JavaScript engine written in C++. It
|
||||
powers Chromium and Chrome, NodeJS and Deno, Adobe UXP and other platforms.
|
||||
|
||||
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
|
||||
parsed and evaluated in a V8 context.
|
||||
[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
|
||||
data from spreadsheets.
|
||||
|
||||
This demo uses V8 and SheetJS to read and write spreadsheets. We'll explore how
|
||||
to load SheetJS in a V8 context and process spreadsheets and structured data from
|
||||
C++ and Rust programs.
|
||||
|
||||
The ["Complete Example"](#complete-example) creates a C++ command-line tool for
|
||||
reading spreadsheet files and generating new workbooks. ["Bindings"](#bindings)
|
||||
covers V8 engine bindings for other programming languages.
|
||||
|
||||
## Integration Details
|
||||
|
||||
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
|
||||
can be parsed and evaluated in a V8 context.
|
||||
|
||||
_Initialize V8_
|
||||
|
||||
The official V8 `hello-world` example covers initialization and cleanup. For the
|
||||
@ -30,10 +43,10 @@ v8::Local<v8::Context> context = v8::Context::New(isolate);
|
||||
The following helper function evaluates C strings as JS code:
|
||||
|
||||
```cpp
|
||||
v8::Local<v8::Value> eval_code(v8::Isolate *i, v8::Local<v8::Context> c, char* code) {
|
||||
v8::Local<v8::String> source = v8::String::NewFromUtf8(i, code).ToLocalChecked();
|
||||
v8::Local<v8::Script> script = v8::Script::Compile(i, source).ToLocalChecked();
|
||||
return script->Run(c).ToLocalChecked();
|
||||
v8::Local<v8::Value> eval_code(v8::Isolate *isolate, v8::Local<v8::Context> context, char* code, size_t sz = -1) {
|
||||
v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, code, v8::NewStringType::kNormal, sz).ToLocalChecked();
|
||||
v8::Local<v8::Script> script = v8::Script::Compile(context, source).ToLocalChecked();
|
||||
return script->Run(context).ToLocalChecked();
|
||||
}
|
||||
```
|
||||
|
||||
@ -56,7 +69,7 @@ static char *read_file(const char *filename, size_t *sz) {
|
||||
|
||||
// ...
|
||||
size_t sz; char *file = read_file("xlsx.full.min.js", &sz);
|
||||
v8::Local<v8::Value> result = eval_code(isolate, context, file);
|
||||
v8::Local<v8::Value> result = eval_code(isolate, context, file, sz);
|
||||
```
|
||||
|
||||
To confirm the library is loaded, `XLSX.version` can be inspected:
|
||||
@ -109,25 +122,26 @@ The resulting `buf` can be written to file with `fwrite`.
|
||||
|
||||
This demo was tested in the following deployments:
|
||||
|
||||
| V8 Version | Platform | OS Version | Compiler | Date |
|
||||
|:--------------|:-------------|:-------------|:---------------|:-----------|
|
||||
| `11.3.244.11` | `darwin-x64` | macOS 13.2 | `clang 14.0.3` | 2023-05-20 |
|
||||
| `11.3.244.11` | `darwin-arm` | macOS 13.0 | `clang 14.0.3` | 2023-06-05 |
|
||||
| `11.3.244.11` | `linux-x64` | HoloOS 3.4.6 | `gcc 12.2.0` | 2023-05-20 |
|
||||
| V8 Version | Platform | OS Version | Compiler | Date |
|
||||
|:--------------|:-------------|:-------------|:-----------------|:-----------|
|
||||
| `11.8.82` | `darwin-x64` | macOS 13.5.1 | `clang 14.0.3` | 2023-08-26 |
|
||||
| `11.8.82` | `darwin-arm` | macOS 13.5.1 | `clang 14.0.3` | 2023-08-26 |
|
||||
| `11.8.82` | `win10-x64` | Windows 10 | `CL 19.37.32822` | 2023-08-26 |
|
||||
| `11.3.244.11` | `linux-x64` | HoloOS 3.4.6 | `gcc 12.2.0` | 2023-05-20 |
|
||||
|
||||
:::
|
||||
|
||||
This program parses a file and prints CSV data from the first worksheet. It also
|
||||
generates an XLSB file and writes to the filesystem.
|
||||
|
||||
:::caution
|
||||
:::caution pass
|
||||
|
||||
When the demo was last tested, there were errors in the official V8 embed guide.
|
||||
The correct instructions are included below.
|
||||
|
||||
:::
|
||||
|
||||
:::caution
|
||||
:::caution pass
|
||||
|
||||
The build process is long and will test your patience.
|
||||
|
||||
@ -135,6 +149,9 @@ The build process is long and will test your patience.
|
||||
|
||||
### Preparation
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
0) Prepare `/usr/local/lib`:
|
||||
|
||||
```bash
|
||||
@ -142,7 +159,7 @@ mkdir -p /usr/local/lib
|
||||
cd /usr/local/lib
|
||||
```
|
||||
|
||||
:::caution
|
||||
:::caution pass
|
||||
|
||||
If this step throws a permission error, run:
|
||||
|
||||
@ -153,15 +170,77 @@ sudo chmod 777 /usr/local/lib
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
0) Follow the official ["Visual Studio"](https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md#visual-studio)
|
||||
installation steps.
|
||||
|
||||
:::info pass
|
||||
|
||||
Using the installer tool, the "Desktop development with C++" workload must be
|
||||
installed. In the sidebar, verify the following components are checked:
|
||||
|
||||
- "C++ ATL for latest ... build tools" (`v143` when last tested)
|
||||
- "C++ MFC for latest ... build tools" (`v143` when last tested)
|
||||
|
||||
In the "Individual components" tab, search for "Windows 11 SDK" and verify that
|
||||
"Windows 11 SDK (10.0.22621.0)" is checked.
|
||||
|
||||
Click "Modify" and allow the installer to finish.
|
||||
|
||||
The SDK debugging tools must be installed after the SDK is installed.
|
||||
|
||||
1) Using the Search bar, search "Apps & features".
|
||||
|
||||
2) When the setting panel opens, scroll down to "Windows Software Development
|
||||
Kit - Windows 10.0.22621 and click "Modify".
|
||||
|
||||
3) In the new window, select "Change" and click "Next"
|
||||
|
||||
4) Check "Debugging Tools for Windows" and click "Change"
|
||||
|
||||
:::
|
||||
|
||||
The following `git` settings should be changed:
|
||||
|
||||
```bash
|
||||
git config --global core.autocrlf false
|
||||
git config --global core.filemode false
|
||||
git config --global branch.autosetuprebase always
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
||||
1) Download and install `depot_tools`:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
[The bundle](https://storage.googleapis.com/chrome-infra/depot_tools.zip) is a
|
||||
ZIP file that should be downloaded and extracted.
|
||||
|
||||
The demo was last tested on an exFAT-formatted drive (mounted at `E:\`).
|
||||
|
||||
After extracting, verify that the `depot_tools` folder is not read-only.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
2) Add the path to the `PATH` environment variable:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
export PATH="/usr/local/lib/depot_tools:$PATH"
|
||||
```
|
||||
@ -169,16 +248,91 @@ export PATH="/usr/local/lib/depot_tools:$PATH"
|
||||
At this point, it is strongly recommended to add the line to a shell startup
|
||||
script such as `.bashrc` or `.zshrc`
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
:::caution pass
|
||||
|
||||
These instructions are for `cmd` use. Do not run in PowerShell!
|
||||
|
||||
It is strongly recommended to use the "Developer Command Prompt" from Visual
|
||||
Studio as it prepares the console to run build tools.
|
||||
|
||||
:::
|
||||
|
||||
```bash
|
||||
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
|
||||
set PATH=E:\depot_tools;%PATH%
|
||||
```
|
||||
|
||||
In addition, the `vs2022_install` variable must be set to the Visual Studio
|
||||
folder. For example, using the "Community Edition", the assignment should be
|
||||
|
||||
```bash
|
||||
set vs2022_install="C:\Program Files\Microsoft Visual Studio\2022\Community"
|
||||
```
|
||||
|
||||
These environment variables can be persisted in the Control Panel.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
3) Run `gclient` once to update `depot_tools`:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
gclient
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
gclient
|
||||
```
|
||||
|
||||
:::caution pass
|
||||
|
||||
`gclient` may throw errors related to `git` and permissions issues:
|
||||
|
||||
```
|
||||
fatal: detected dubious ownership in repository at 'E:/depot_tools'
|
||||
'E:/depot_tools' is on a file system that doesnot record ownership
|
||||
To add an exception for this directory, call:
|
||||
|
||||
git config --global --add safe.directory E:/depot_tools
|
||||
```
|
||||
|
||||
These issues are related to the exFAT file system. They were resolved by running
|
||||
the recommended commands and re-running `gclient`.
|
||||
|
||||
:::
|
||||
|
||||
:::caution pass
|
||||
|
||||
There were errors pertaining to `gitconfig`:
|
||||
|
||||
```
|
||||
error: could not write config file E:/depot_tools/bootstrap-2@3_8_10_chromium_26_bin/git/etc/gitconfig: File exists
|
||||
```
|
||||
|
||||
This can happen if the `depot_tools` folder is read-only. The workaround is to
|
||||
unset the read-only flag for the `E:\depot_tools` folder.
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Clone V8
|
||||
|
||||
4) Create a base directory:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
mkdir -p ~/dev/v8
|
||||
cd ~/dev/v8
|
||||
@ -188,12 +342,94 @@ cd v8
|
||||
|
||||
Note that the actual repo will be placed in `~/dev/v8/v8`.
|
||||
|
||||
5) Checkout the desired version. The following command pulls `11.3.244.11`:
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
git checkout refs/tags/11.3.244.11 -b sample -t
|
||||
cd E:\
|
||||
mkdir v8
|
||||
cd v8
|
||||
fetch v8
|
||||
cd v8
|
||||
```
|
||||
|
||||
:::caution pass
|
||||
|
||||
On exFAT, every cloned repo elicited the same `git` permissions error. `fetch`
|
||||
will fail with a clear remedy message such as
|
||||
|
||||
```
|
||||
git config --global --add safe.directory E:/v8/v8
|
||||
```
|
||||
|
||||
Run the command then run `gclient sync`, repeating each time the command fails.
|
||||
|
||||
:::
|
||||
|
||||
:::caution pass
|
||||
|
||||
There were occasional `git` conflict errors:
|
||||
|
||||
```
|
||||
v8/tools/clang (ERROR)
|
||||
----------------------------------------
|
||||
[0:00:01] Started.
|
||||
...
|
||||
error: Your local changes to the following files would be overwritten by checkout:
|
||||
plugins/FindBadRawPtrPatterns.cpp
|
||||
...
|
||||
Please commit your changes or stash them before you switch branches.
|
||||
Aborting
|
||||
error: could not detach HEAD
|
||||
----------------------------------------
|
||||
Error: 28> Unrecognized error, please merge or rebase manually.
|
||||
28> cd E:\v8\v8\tools\clang && git rebase --onto 65ceb79efbc9d1dec9b1a0f4bc0b8d010b9d7a66 refs/remotes/origin/main
|
||||
```
|
||||
|
||||
The recommended fix is to delete the referenced folder and re-run `gclient sync`
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
||||
5) Checkout the desired version. The following command pulls `11.8.82`:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
git checkout refs/tags/11.8.82 -b sample -t
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
git checkout tags/11.8.82 -b sample
|
||||
```
|
||||
|
||||
:::caution pass
|
||||
|
||||
The official documentation recommends:
|
||||
|
||||
```bash
|
||||
git checkout refs/tags/11.8.82 -b sample -t
|
||||
```
|
||||
|
||||
This command failed in local testing:
|
||||
|
||||
```
|
||||
E:\v8\v8>git checkout refs/tags/11.8.82 -b sample -t
|
||||
fatal: cannot set up tracking information; starting point 'refs/tags/11.8.82' is not a branch
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Build V8
|
||||
|
||||
6) Build the static library.
|
||||
@ -214,6 +450,54 @@ tools/dev/v8gen.py arm64.release.sample
|
||||
ninja -C out.gn/arm64.release.sample v8_monolith
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win10-x64" label="Windows">
|
||||
|
||||
```bash
|
||||
python3 tools\dev\v8gen.py -vv x64.release.sample
|
||||
ninja -C out.gn\x64.release.sample v8_monolith
|
||||
```
|
||||
|
||||
:::caution pass
|
||||
|
||||
In local testing, the build sometimes failed with a `dbghelp.dll` error:
|
||||
|
||||
```
|
||||
Exception: dbghelp.dll not found in "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll"
|
||||
```
|
||||
|
||||
This issue was fixed by removing and reinstalling "Debugging Tools for Windows"
|
||||
from the Control Panel as described in step 0.
|
||||
|
||||
:::
|
||||
|
||||
:::caution pass
|
||||
|
||||
In local testing, the `ninja` build failed with C++ deprecation errors:
|
||||
|
||||
```c++
|
||||
../..\src/wasm/wasm-code-manager.h(789,28): error: 'atomic_load<v8::base::OwnedVector<const unsigned char>>' is deprecated: warning STL4029: std::atomic_*() overloads for shared_ptr are deprecated in C++20. The shared_ptr specialization of std::atomic provides superior functionality. You can define _SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning. [-Werror,-Wdeprecated-declarations]
|
||||
789 | auto wire_bytes = std::atomic_load(&wire_bytes_);
|
||||
| ^
|
||||
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\include\memory(3794,1): note: 'atomic_load<v8::base::OwnedVector<const unsigned char>>' has been explicitly marked deprecated here
|
||||
3794 | _CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT _NODISCARD shared_ptr<_Ty> atomic_load(
|
||||
| ^
|
||||
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\include\yvals_core.h(1317,7): note: expanded from macro '_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT'
|
||||
1317 | [[deprecated("warning STL4029: " \
|
||||
| ^
|
||||
2 errors generated.
|
||||
[14/1303] CXX obj/torque_generated_definitions/js-atomics-synchronization-tq.obj
|
||||
FAILED: obj/torque_generated_definitions/js-atomics-synchronization-tq.obj
|
||||
```
|
||||
|
||||
The workaround is to append a line to `out.gn\x64.release.sample\args.gn`:
|
||||
|
||||
```text title="out.gn\x64.release.sample\args.gn (add to end)"
|
||||
treat_warnings_as_errors = false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
@ -237,6 +521,14 @@ 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 \
|
||||
-std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX
|
||||
./hello_world
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win10-x64" label="Windows">
|
||||
|
||||
```bash
|
||||
cl /I. /Iinclude samples/hello-world.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:hello_world.exe /LIBPATH:out.gn\x64.release.sample\obj\
|
||||
.\hello_world.exe
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
@ -247,14 +539,32 @@ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith
|
||||
|
||||
8) Make a new project folder:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
cd ~/dev
|
||||
mkdir -p sheetjs-v8
|
||||
cd sheetjs-v8
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
cd E:\
|
||||
mkdir sheetjs-v8
|
||||
cd sheetjs-v8
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
9) Copy the sample source:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
cp ~/dev/v8/v8/samples/hello-world.cc .
|
||||
```
|
||||
@ -280,8 +590,23 @@ ln -s ~/dev/v8/v8/out.gn/arm64.release.sample/obj
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
copy E:\v8\v8\samples\hello-world.cc .\
|
||||
```
|
||||
|
||||
10) Observe that exFAT does not support symbolic links and move on to step 11.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
11) Build and run the `hello-world` example from this folder:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \
|
||||
-lv8_libbase -lv8_libplatform -ldl -Lobj/ -pthread -std=c++17 \
|
||||
@ -289,6 +614,17 @@ g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \
|
||||
./hello_world
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
cl /MT /I..\v8\v8\ /I..\v8\v8\include hello-world.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:hello_world.exe /LIBPATH:..\v8\v8\out.gn\x64.release.sample\obj\
|
||||
.\hello_world.exe
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Add SheetJS
|
||||
|
||||
12) Download the standalone script and test file:
|
||||
@ -311,18 +647,44 @@ curl -LO https://docs.sheetjs.com/v8/sheetjs.v8.cc
|
||||
|
||||
14) Compile standalone `sheetjs.v8` binary
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
g++ -I. -Iinclude sheetjs.v8.cc -o sheetjs.v8 -fno-rtti -lv8_monolith \
|
||||
-lv8_libbase -lv8_libplatform -ldl -Lobj/ -pthread -std=c++17 \
|
||||
-DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
cl /MT /I..\v8\v8\ /I..\v8\v8\include sheetjs.v8.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:sheetjs.v8.exe /LIBPATH:..\v8\v8\out.gn\x64.release.sample\obj\
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
15) Run the demo:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
./sheetjs.v8 pres.numbers
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```bash
|
||||
cl /MT /I..\v8\v8\ /I..\v8\v8\include sheetjs.v8.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:sheetjs.v8.exe /LIBPATH:..\v8\v8\out.gn\x64.release.sample\obj\
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
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.
|
||||
|
||||
@ -358,7 +720,7 @@ This demo was last tested in the following deployments:
|
||||
|
||||
| Architecture | V8 Crate | Date |
|
||||
|:-------------|:---------|:-----------|
|
||||
| `darwin-x64` | `0.71.2` | 2023-05-22 |
|
||||
| `darwin-x64` | `0.75.1` | 2023-08-26 |
|
||||
| `darwin-arm` | `0.73.0` | 2023-06-05 |
|
||||
| `linux-x64` | `0.71.2` | 2023-05-23 |
|
||||
| `win10-x64` | `0.71.2` | 2023-05-23 |
|
||||
|
@ -120,13 +120,14 @@ This demo was tested in the following deployments:
|
||||
|
||||
| Architecture | Git Commit | Date |
|
||||
|:-------------|:-----------|:-----------|
|
||||
| `darwin-x64` | `c3ead3f` | 2023-07-05 |
|
||||
| `darwin-arm` | `c3ead3f` | 2023-07-05 |
|
||||
| `darwin-x64` | `c3ead3f` | 2023-08-26 |
|
||||
| `darwin-arm` | `c3ead3f` | 2023-08-26 |
|
||||
| `win10-x64` | `c3ead3f` | 2023-08-26 |
|
||||
| `linux-x64` | `c3ead3f` | 2023-07-05 |
|
||||
|
||||
:::
|
||||
|
||||
0) Install `icu` and `cmake` dependencies.
|
||||
0) Install dependencies:
|
||||
|
||||
<Tabs groupId="triple">
|
||||
<TabItem value="darwin-x64" label="Intel Mac">
|
||||
@ -151,13 +152,19 @@ On Arch Linux / HoloOS:
|
||||
sudo pacman -S cmake clang
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win10-x64" label="Windows">
|
||||
|
||||
Install Visual Studio 2022 with the "Desktop Development with C++" workflow.
|
||||
All commands in this demo should be run in a Developer Command Prompt.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
1) Download ChakraCore:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/Microsoft/ChakraCore
|
||||
git clone https://github.com/Microsoft/ChakraCore.git
|
||||
cd ChakraCore
|
||||
git checkout c3ead3f
|
||||
cd ..
|
||||
@ -241,6 +248,31 @@ When the demo was last tested, ChakraCore JIT was not supported.
|
||||
cd ChakraCore
|
||||
./build.sh --static --embed-icu --test-build -j=8 --no-jit
|
||||
cd ..
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win10-x64" label="Windows">
|
||||
|
||||
:::info pass
|
||||
|
||||
As explained in the ChakraCore project wiki[^1], the build accepts a few flags:
|
||||
|
||||
- `/p:Platform=x64` controls the architecture
|
||||
- `/p:Configuration=Debug` enables runtime checks
|
||||
- `/p:RuntimeLib=static_library` ensures MSVC libraries are statically linked
|
||||
|
||||
:::
|
||||
|
||||
```
|
||||
cd ChakraCore
|
||||
msbuild /m /p:Platform=x64 /p:Configuration=Debug /p:RuntimeLib=static_library Build\Chakra.Core.sln
|
||||
cd ..
|
||||
```
|
||||
|
||||
After building, the generated DLL should be copied into the project folder:
|
||||
|
||||
```
|
||||
copy .\ChakraCore\Build\VcBuild\bin\x64_debug\ChakraCore.dll .
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
@ -252,18 +284,19 @@ cd ..
|
||||
- [`Makefile`](pathname:///chakra/Makefile)
|
||||
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/chakra/sheetjs.ch.cpp
|
||||
curl -LO https://docs.sheetjs.com/chakra/Makefile
|
||||
curl -L -O https://docs.sheetjs.com/chakra/sheetjs.ch.cpp
|
||||
curl -L -O https://docs.sheetjs.com/chakra/Makefile
|
||||
```
|
||||
|
||||
4) Build the sample application:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
make
|
||||
```
|
||||
|
||||
This program tries to parse the file specified by the first argument
|
||||
|
||||
:::caution
|
||||
|
||||
When this demo was last tested on macOS, the build failed with the message:
|
||||
@ -283,6 +316,16 @@ sudo ln -s /opt/homebrew/opt/icu4c
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```
|
||||
cl sheetjs.ch.cpp ChakraCore.lib /I ChakraCore\lib\Jsrt /link /LIBPATH:ChakraCore\Build\VcBuild\bin\x64_debug
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
5) Download the standalone script, shim script, and test file:
|
||||
|
||||
<ul>
|
||||
@ -292,17 +335,30 @@ sudo ln -s /opt/homebrew/opt/icu4c
|
||||
</ul>
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
|
||||
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
|
||||
curl -LO https://sheetjs.com/pres.numbers`}
|
||||
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
|
||||
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
|
||||
curl -L -O https://sheetjs.com/pres.numbers`}
|
||||
</CodeBlock>
|
||||
|
||||
6) Run the test program:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="unix" label="Linux/MacOS">
|
||||
|
||||
```bash
|
||||
./sheetjs.ch pres.numbers
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```
|
||||
.\sheetjs.ch.exe pres.numbers
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
If successful, the program will print the contents of the first sheet as CSV.
|
||||
|
||||
|
||||
@ -310,8 +366,7 @@ If successful, the program will print the contents of the first sheet as CSV.
|
||||
|
||||
:::note
|
||||
|
||||
This demo was last tested on 2023 April 09 against `ch` `1.13.0.0-beta`.
|
||||
The command line tool was built against commit `c3ead3f`.
|
||||
This demo was last tested on 2023-08-26 against `ch` commit `c3ead3f`.
|
||||
|
||||
:::
|
||||
|
||||
@ -321,6 +376,13 @@ file as a Base64 string and directly add it to an amalgamated script.
|
||||
0) Download and extract the ChakraCore release ZIP. Copy the binary (`bin/ch`)
|
||||
to your project folder.
|
||||
|
||||
:::note pass
|
||||
|
||||
The ["Integration Example"](#integration-example) also builds the `ch` binary!
|
||||
It will typically be placed in the `ChakraCore/out/Test/` folder.
|
||||
|
||||
:::
|
||||
|
||||
1) Download the standalone script, shim, and test file:
|
||||
|
||||
<ul>
|
||||
@ -329,6 +391,12 @@ to your project folder.
|
||||
<li><a href="https://sheetjs.com/pres.numbers">pres.numbers</a></li>
|
||||
</ul>
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
|
||||
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
|
||||
curl -L -O https://sheetjs.com/pres.numbers`}
|
||||
</CodeBlock>
|
||||
|
||||
2) Bundle the test file and create `payload.js`:
|
||||
|
||||
```bash
|
||||
@ -364,3 +432,5 @@ ready, it will read the bundled test data and print the contents as CSV.
|
||||
```bash
|
||||
./ch xlsx.chakra.js
|
||||
```
|
||||
|
||||
[^1]: See ["Building ChakraCore"](https://github.com/chakra-core/ChakraCore/wiki/Building-ChakraCore#deployment) in the ChakraCore project wiki
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Sheet Visibility
|
||||
sidebar_position: 7
|
||||
sidebar_position: 10
|
||||
---
|
||||
|
||||
<details>
|
@ -8,6 +8,8 @@ The official source code repository is <https://git.sheetjs.com/sheetjs/sheetjs>
|
||||
|
||||
Issues should be raised at <https://git.sheetjs.com/sheetjs/sheetjs/issues>
|
||||
|
||||
Issues can also be reported on [our Discord server](https://sheetjs.com/chat)
|
||||
|
||||
The official changelog can be found [in the source code repository](https://git.sheetjs.com/sheetjs/sheetjs/raw/branch/master/CHANGELOG.md)
|
||||
|
||||
:::tip pass
|
||||
|
@ -16,12 +16,13 @@ static char *read_file(const char *filename, size_t *sz) {
|
||||
return buf;
|
||||
}
|
||||
|
||||
v8::Local<v8::Value> eval_code(v8::Isolate *isolate, v8::Local<v8::Context> context, char* code) {
|
||||
v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, code).ToLocalChecked();
|
||||
v8::Local<v8::Value> eval_code(v8::Isolate *isolate, v8::Local<v8::Context> context, char* code, size_t sz = -1) {
|
||||
v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, code, v8::NewStringType::kNormal, sz).ToLocalChecked();
|
||||
v8::Local<v8::Script> script = v8::Script::Compile(context, source).ToLocalChecked();
|
||||
return script->Run(context).ToLocalChecked();
|
||||
}
|
||||
#define EVAL_CODE(x) eval_code(isolate, context, (char *)x)
|
||||
#define EVAL_CODE2(x,sz) eval_code(isolate, context, (char *)x, sz)
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
/* initialize -- this part is from the hello world example */
|
||||
@ -47,7 +48,7 @@ int main(int argc, char* argv[]) {
|
||||
if(!file) { perror("Error reading xlsx.full.min.js"); return 1; }
|
||||
|
||||
/* evaluate */
|
||||
v8::Local<v8::Value> result = EVAL_CODE(file);
|
||||
v8::Local<v8::Value> result = EVAL_CODE2(file, sz);
|
||||
|
||||
/* free */
|
||||
free(file);
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 302 KiB After Width: | Height: | Size: 40 KiB |
Binary file not shown.
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 122 KiB |
Binary file not shown.
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 64 KiB |
Loading…
Reference in New Issue
Block a user