Files
shooter-demo/tools/emscripten/gen-asm.bat
2025-11-29 01:42:48 +08:00

141 lines
3.3 KiB
Batchfile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@echo off
setlocal enabledelayedexpansion
echo ========================================
echo WASM to asm.js 转换器
echo ========================================
echo.
:: 检查参数
if "%~1"=="" (
echo 错误: 缺少 WASM 文件路径参数
echo.
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
echo.
echo 示例:
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.
goto :error
)
if "%~2"=="" (
echo 错误: 缺少输出路径参数
echo.
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
echo.
goto :error
)
set WASM_FILE=%~1
set OUTPUT_FILE=%~2
set SCRIPT_DIR=%~dp0
echo 脚本目录: %SCRIPT_DIR%
:: 转换为绝对路径
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
:: 检查输入文件是否存在
if not exist "%WASM_FILE_ABS%" (
echo 错误: WASM 文件不存在: %WASM_FILE_ABS%
goto :error
)
:: 创建输出目录(如果不存在)
if not exist "%OUTPUT_DIR%" (
echo 创建输出目录: %OUTPUT_DIR%
mkdir "%OUTPUT_DIR%"
)
echo 输入文件: %WASM_FILE_ABS%
echo 输出文件: %OUTPUT_FILE_ABS%
echo.
:: 检查 Emscripten 环境
call emcc --version >nul 2>&1
if %errorlevel% neq 0 (
echo Emscripten 环境未设置,尝试自动设置...
if exist "%SCRIPT_DIR%emsdk\emsdk_env.bat" (
echo 运行 Emscripten 环境设置...
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
goto :error
)
) else (
echo 错误: 未找到 Emscripten 安装
echo 请先运行 install.bat 安装 Emscripten
goto :error
)
)
echo Emscripten 版本信息:
call emcc --version | findstr "emcc"
echo.
echo 开始转换 WASM 到 asm.js...
:: 使用 wasm2js 工具将 WASM 转换为 asm.js
:: wasm2js 是 Binaryen 工具链的一部分Emscripten 自带
:: 参数说明:
:: --pedantic : 使用更严格的验证
:: -o : 输出文件路径
set WASM2JS_PATH=%SCRIPT_DIR%emsdk\upstream\bin\wasm2js.exe
:: 检查 wasm2js 是否存在
if not exist "%WASM2JS_PATH%" (
echo 错误: 未找到 wasm2js 工具
echo 路径: %WASM2JS_PATH%
echo 请确保 Emscripten 已正确安装
goto :error
)
echo 使用工具: %WASM2JS_PATH%
echo.
call "%WASM2JS_PATH%" "%WASM_FILE_ABS%" ^
-o "%OUTPUT_FILE_ABS%" ^
--pedantic
if %errorlevel% neq 0 (
echo 错误: wasm2js 转换失败
goto :error
)
echo.
echo ========================================
echo 转换成功!
echo ========================================
echo.
echo 输出文件: %OUTPUT_FILE_ABS%
:: 显示文件大小
for %%A in ("%OUTPUT_FILE_ABS%") do (
set file_size=%%~zA
set /a size_kb=!file_size!/1024
echo 文件大小: !size_kb! KB
)
echo.
echo 使用方法:
echo 在 HTML 中引入生成的 JS 文件,然后使用:
echo PinballModule().then(function(Module) {
echo // 使用 Module.ccall 调用导出的函数
echo var result = Module.ccall('function_name', 'number', ['number'], [42]);
echo });
echo.
goto :end
:error
echo.
echo 转换失败!
exit /b 1
:end
pause