forked from emilk/eframe_template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build_web.bat
78 lines (56 loc) · 1.95 KB
/
build_web.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
@echo off
SET script_path=%~dp0
cd %script_path%
SET OPEN=0
SET FAST=0
:do_while
IF (%1) == () GOTO end_while
IF %1 == -h GOTO print_help
IF %1 == --help GOTO print_help
IF %1 == --fast (
SET FAST=1
SHIFT
GOTO do_while
)
IF %1 == --open (
SET OPEN=1
SHIFT
GOTO do_while
)
echo Unknown command "%1"
:end_while
@REM call this first : `./setup_web.bat`
for %%I in (.) do SET FOLDER_NAME=%%~nxI
@REM assume crate name is the same as the folder name
SET CRATE_NAME=%FOLDER_NAME%
@REM for those who name crates with-kebab-case
SET CRATE_NAME_SNAKE_CASE=%FOLDER_NAME:-=_%
@REM This is required to enable the web_sys clipboard API which egui_web uses
@REM https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
@REM https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
SET RUSTFLAGS=--cfg=web_sys_unstable_apis
@REM Clear output from old stuff:
DEL /F docs\%CRATE_NAME_SNAKE_CASE%_bg.wasm
echo Building rust...
SET BUILD=release
cargo build -p %CRATE_NAME% --release --lib --target wasm32-unknown-unknown
@REM Get the output directory (in the workspace it is in another location)
FOR /F "delims=" %%i IN ('cargo metadata --format-version=1 ^| jq --raw-output .target_directory') DO SET TARGET=%%i
echo Generating JS bindings for wasm...
SET TARGET_NAME=%CRATE_NAME_SNAKE_CASE%.wasm
wasm-bindgen "%TARGET%\wasm32-unknown-unknown\%BUILD%\%TARGET_NAME%" --out-dir "docs" --no-modules --no-typescript
IF %FAST% == 0 (
echo Optimizing wasm...
@REM to get wasm-opt: apt/brew/dnf install binaryen
@REM add -g to get debug symbols :
wasm-opt "docs\%CRATE_NAME%_bg.wasm" -O2 --fast-math -o "docs\%CRATE_NAME%_bg.wasm"
)
echo Finished: docs/%CRATE_NAME_SNAKE_CASE%.wasm"
IF %OPEN% == 1 start http://localhost:8080/index.html
GOTO end_program
:print_help
echo build_web.sh [--fast] [--open]
echo --fast: skip optimization step
echo --open: open the result in a browser
GOTO end_program
:end_program