完善发布asm.js脚本

This commit is contained in:
janing
2025-11-29 01:42:48 +08:00
parent 8c7f70ae9b
commit e8a07c695e
11 changed files with 202 additions and 157 deletions

View File

@@ -2,17 +2,17 @@
setlocal enabledelayedexpansion
echo ========================================
echo WASM to asm.js 转换器
echo WASM to asm.js ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo ========================================
echo.
:: 检查参数
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if "%~1"=="" (
echo 错误: 缺少 WASM 文件路径参数
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ȱ<><C8B1> WASM <20>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo.
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
echo <EFBFBD>÷<EFBFBD>: gen-asm.bat ^<wasm<EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>^> ^<<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>^>
echo.
echo 示例:
echo ʾ<EFBFBD><EFBFBD>:
echo gen-asm.bat pinball.wasm output/pinball-asm.js
echo gen-asm.bat ../target/wasm32-unknown-unknown/release/pinball_physics.wasm ../client-cocos/assets/wasm/pinball-asm.js
echo.
@@ -20,9 +20,9 @@ if "%~1"=="" (
)
if "%~2"=="" (
echo 错误: 缺少输出路径参数
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ȱ<><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo.
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
echo <EFBFBD>÷<EFBFBD>: gen-asm.bat ^<wasm<EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>^> ^<<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>^>
echo.
goto :error
)
@@ -30,101 +30,102 @@ if "%~2"=="" (
set WASM_FILE=%~1
set OUTPUT_FILE=%~2
set SCRIPT_DIR=%~dp0
echo <20>ű<EFBFBD>Ŀ¼: %SCRIPT_DIR%
:: 转换为绝对路径
:: ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
for %%i in ("%WASM_FILE%") do set WASM_FILE_ABS=%%~fi
for %%i in ("%OUTPUT_FILE%") do set OUTPUT_FILE_ABS=%%~fi
for %%i in ("%OUTPUT_FILE_ABS%") do set OUTPUT_DIR=%%~dpi
:: 检查输入文件是否存在
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if not exist "%WASM_FILE_ABS%" (
echo 错误: WASM 文件不存在: %WASM_FILE_ABS%
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: WASM <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %WASM_FILE_ABS%
goto :error
)
:: 创建输出目录(如果不存在)
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
if not exist "%OUTPUT_DIR%" (
echo 创建输出目录: %OUTPUT_DIR%
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼: %OUTPUT_DIR%
mkdir "%OUTPUT_DIR%"
)
echo 输入文件: %WASM_FILE_ABS%
echo 输出文件: %OUTPUT_FILE_ABS%
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>: %WASM_FILE_ABS%
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>: %OUTPUT_FILE_ABS%
echo.
:: 检查 Emscripten 环境
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Emscripten <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
call emcc --version >nul 2>&1
if %errorlevel% neq 0 (
echo Emscripten 环境未设置,尝试自动设置...
echo Emscripten <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
if exist "%SCRIPT_DIR%emsdk\emsdk_env.bat" (
echo 运行 Emscripten 环境设置...
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Emscripten <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
call "%SCRIPT_DIR%emsdk\emsdk_env.bat"
call emcc --version >nul 2>&1
if %errorlevel% neq 0 (
echo 错误: 无法设置 Emscripten 环境
echo 请先运行 install.bat 安装 Emscripten,或手动运行 setup-env.bat
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD> Emscripten <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> install.bat <EFBFBD><EFBFBD>װ Emscripten<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> setup-env.bat
goto :error
)
) else (
echo 错误: 未找到 Emscripten 安装
echo 请先运行 install.bat 安装 Emscripten
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: δ<>ҵ<EFBFBD> Emscripten <EFBFBD><EFBFBD>װ
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> install.bat <EFBFBD><EFBFBD>װ Emscripten
goto :error
)
)
echo Emscripten 版本信息:
echo Emscripten <EFBFBD><EFBFBD><EFBFBD>Ϣ:
call emcc --version | findstr "emcc"
echo.
echo 开始转换 WASM asm.js...
echo <EFBFBD><EFBFBD>ʼת<EFBFBD><EFBFBD> WASM <EFBFBD><EFBFBD> asm.js...
:: 使用 emcc 将 WASM 转换为 asm.js
:: 关键参数说明:
:: -s WASM=0 : 禁用 WebAssembly生成 asm.js
:: -s LEGACY_VM_SUPPORT=1 : 支持较老的 JavaScript 引擎
:: -s ALLOW_MEMORY_GROWTH=1 : 允许内存增长
:: -s NO_EXIT_RUNTIME=1 : 不退出运行时
:: -s EXPORTED_FUNCTIONS=["_main"] : 导出函数(根据需要调整)
:: -s MODULARIZE=1 : 生成模块化代码
:: -s EXPORT_NAME="Module" : 导出模块名
:: -O3 : 最高优化级别
:: ʹ<EFBFBD><EFBFBD> wasm2js <20><><EFBFBD>߽<EFBFBD> WASM ת<EFBFBD><EFBFBD>Ϊ asm.js
:: wasm2js <20><> Binaryen <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>֣<EFBFBD>Emscripten <20>Դ<EFBFBD>
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>:
:: --pedantic : ʹ<>ø<EFBFBD><C3B8>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>֤
:: -o : <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
call emcc "%WASM_FILE_ABS%" ^
-s WASM=0 ^
-s LEGACY_VM_SUPPORT=1 ^
-s ALLOW_MEMORY_GROWTH=1 ^
-s NO_EXIT_RUNTIME=1 ^
-s MODULARIZE=1 ^
-s EXPORT_NAME="PinballModule" ^
-s EXPORTED_RUNTIME_METHODS="['ccall','cwrap']" ^
-O3 ^
--closure 0 ^
-o "%OUTPUT_FILE_ABS%"
set WASM2JS_PATH=%SCRIPT_DIR%emsdk\upstream\bin\wasm2js.exe
:: <20><><EFBFBD><EFBFBD> wasm2js <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if not exist "%WASM2JS_PATH%" (
echo <20><><EFBFBD><EFBFBD>: δ<>ҵ<EFBFBD> wasm2js <20><><EFBFBD><EFBFBD>
echo ·<><C2B7>: %WASM2JS_PATH%
echo <20><>ȷ<EFBFBD><C8B7> Emscripten <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>װ
goto :error
)
echo ʹ<>ù<EFBFBD><C3B9><EFBFBD>: %WASM2JS_PATH%
echo.
call "%WASM2JS_PATH%" "%WASM_FILE_ABS%" ^
-o "%OUTPUT_FILE_ABS%" ^
--pedantic
if %errorlevel% neq 0 (
echo 错误: 转换失败
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: wasm2js ת<><D7AA>ʧ<EFBFBD><CAA7>
goto :error
)
echo.
echo ========================================
echo 转换成功!
echo ת<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>
echo ========================================
echo.
echo 输出文件: %OUTPUT_FILE_ABS%
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>: %OUTPUT_FILE_ABS%
:: 显示文件大小
:: <EFBFBD><EFBFBD>ʾ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С
for %%A in ("%OUTPUT_FILE_ABS%") do (
set file_size=%%~zA
set /a size_kb=!file_size!/1024
echo 文件大小: !size_kb! KB
echo <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С: !size_kb! KB
)
echo.
echo 使用方法:
echo HTML 中引入生成的 JS 文件,然后使用:
echo ʹ<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD>:
echo <EFBFBD><EFBFBD> HTML <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD> JS <20>ļ<EFBFBD><C4BC><EFBFBD>Ȼ<EFBFBD><C8BB>ʹ<EFBFBD><CAB9>:
echo PinballModule().then(function(Module) {
echo // 使用 Module.ccall 调用导出的函数
echo // ʹ<EFBFBD><EFBFBD> Module.ccall <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>
echo var result = Module.ccall('function_name', 'number', ['number'], [42]);
echo });
echo.
@@ -133,7 +134,7 @@ goto :end
:error
echo.
echo 转换失败!
echo ת<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
exit /b 1
:end

View File

@@ -2,102 +2,102 @@
setlocal enabledelayedexpansion
echo ========================================
echo Emscripten 安装脚本 (版本: 3.1.41)
echo Emscripten <EFBFBD><EFBFBD>װ<EFBFBD>ű<EFBFBD> (<28>: 3.1.41)
echo ========================================
echo.
:: 设置变量
:: <EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD>
set EMSCRIPTEN_VERSION=3.1.41
set SCRIPT_DIR=%~dp0
set EMSDK_DIR=%SCRIPT_DIR%emsdk
:: 检查是否已存在 emsdk 目录
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD> emsdk Ŀ¼
if exist "%EMSDK_DIR%" (
echo 检测到已存在的 emsdk 目录...
set /p "choice=是否重新安装? (y/n): "
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD>ڵ<EFBFBD> emsdk Ŀ¼...
set /p "choice=<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD>װ? (y/n): "
if /i "!choice!" neq "y" (
echo 安装已取消
goto :end
goto :install
)
echo 删除现有安装...
echo ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>װ...
rmdir /s /q "%EMSDK_DIR%"
)
:: 检查 Git 是否可用
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Git <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
git --version >nul 2>&1
if %errorlevel% neq 0 (
echo 错误: 未找到 Git请先安装 Git
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: δ<>ҵ<EFBFBD> Git<69><74><EFBFBD><EFBFBD><EFBFBD>Ȱ<EFBFBD>װ Git
goto :error
)
:: 检查 Python 是否可用
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Python <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
python --version >nul 2>&1
if %errorlevel% neq 0 (
echo 错误: 未找到 Python请先安装 Python 3.x
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: δ<>ҵ<EFBFBD> Python<6F><6E><EFBFBD><EFBFBD><EFBFBD>Ȱ<EFBFBD>װ Python 3.x
goto :error
)
echo 开始下载 Emscripten SDK...
echo <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Emscripten SDK...
cd /d "%SCRIPT_DIR%"
git clone https://github.com/emscripten-core/emsdk.git
if %errorlevel% neq 0 (
echo 错误: 下载 Emscripten SDK 失败
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD> Emscripten SDK ʧ<EFBFBD><EFBFBD>
goto :error
)
:install
echo.
echo 进入 emsdk 目录...
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD> emsdk Ŀ¼...
cd "%EMSDK_DIR%"
echo 安装和激活 Emscripten %EMSCRIPTEN_VERSION%...
echo <EFBFBD><EFBFBD>װ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD> Emscripten %EMSCRIPTEN_VERSION%...
call emsdk.bat install %EMSCRIPTEN_VERSION%
if %errorlevel% neq 0 (
echo 错误: 安装 Emscripten %EMSCRIPTEN_VERSION% 失败
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>װ Emscripten %EMSCRIPTEN_VERSION% ʧ<EFBFBD><EFBFBD>
goto :error
)
echo.
echo 激活 Emscripten %EMSCRIPTEN_VERSION%...
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Emscripten %EMSCRIPTEN_VERSION%...
call emsdk.bat activate %EMSCRIPTEN_VERSION%
if %errorlevel% neq 0 (
echo 错误: 激活 Emscripten %EMSCRIPTEN_VERSION% 失败
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD> Emscripten %EMSCRIPTEN_VERSION% ʧ<EFBFBD><EFBFBD>
goto :error
)
echo.
echo 设置环境变量...
echo <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
call emsdk_env.bat
echo.
echo 验证安装...
echo <EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD>װ...
call emcc --version
if %errorlevel% neq 0 (
echo 错误: Emscripten 安装验证失败
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Emscripten <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>֤ʧ<EFBFBD><EFBFBD>
goto :error
)
echo.
echo ========================================
echo Emscripten %EMSCRIPTEN_VERSION% 安装成功!
echo Emscripten %EMSCRIPTEN_VERSION% <EFBFBD><EFBFBD>װ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>
echo ========================================
echo.
echo 注意事项:
echo 1. 每次使用前需要运行 setup-env.bat 来设置环境变量
echo 2. 或者手动运行: tools\emscripten\emsdk\emsdk_env.bat
echo ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
echo 1. ÿ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> setup-env.bat <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: tools\emscripten\emsdk\emsdk_env.bat
echo.
echo 创建快速设置脚本...
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýű<EFBFBD>...
echo @echo off > "%SCRIPT_DIR%setup-env.bat"
echo echo 设置 Emscripten 环境变量... >> "%SCRIPT_DIR%setup-env.bat"
echo echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Emscripten <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... >> "%SCRIPT_DIR%setup-env.bat"
echo call "%EMSDK_DIR%\emsdk_env.bat" >> "%SCRIPT_DIR%setup-env.bat"
echo echo Emscripten 环境已设置完成 >> "%SCRIPT_DIR%setup-env.bat"
echo echo Emscripten <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >> "%SCRIPT_DIR%setup-env.bat"
echo setup-env.bat 已创建
echo setup-env.bat <EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD>
goto :end
:error
echo.
echo ========================================
echo 安装失败!请检查错误信息
echo <EFBFBD><EFBFBD>װʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
echo ========================================
exit /b 1