完善发布asm.js脚本
This commit is contained in:
@@ -2,17 +2,17 @@
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
echo ========================================
|
||||
echo WASM to asm.js 转换器
|
||||
echo WASM to asm.js 转换器
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
:: 检查参数
|
||||
:: 检查参数
|
||||
if "%~1"=="" (
|
||||
echo 错误: 缺少 WASM 文件路径参数
|
||||
echo 错误: 缺少 WASM 文件路径参数
|
||||
echo.
|
||||
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
|
||||
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
|
||||
echo.
|
||||
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.
|
||||
@@ -20,9 +20,9 @@ if "%~1"=="" (
|
||||
)
|
||||
|
||||
if "%~2"=="" (
|
||||
echo 错误: 缺少输出路径参数
|
||||
echo 错误: 缺少输出路径参数
|
||||
echo.
|
||||
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
|
||||
echo 用法: gen-asm.bat ^<wasm文件路径^> ^<输出路径^>
|
||||
echo.
|
||||
goto :error
|
||||
)
|
||||
@@ -30,101 +30,102 @@ if "%~2"=="" (
|
||||
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%
|
||||
echo 错误: WASM 文件不存在: %WASM_FILE_ABS%
|
||||
goto :error
|
||||
)
|
||||
|
||||
:: 创建输出目录(如果不存在)
|
||||
:: 创建输出目录(如果不存在)
|
||||
if not exist "%OUTPUT_DIR%" (
|
||||
echo 创建输出目录: %OUTPUT_DIR%
|
||||
echo 创建输出目录: %OUTPUT_DIR%
|
||||
mkdir "%OUTPUT_DIR%"
|
||||
)
|
||||
|
||||
echo 输入文件: %WASM_FILE_ABS%
|
||||
echo 输出文件: %OUTPUT_FILE_ABS%
|
||||
echo 输入文件: %WASM_FILE_ABS%
|
||||
echo 输出文件: %OUTPUT_FILE_ABS%
|
||||
echo.
|
||||
|
||||
:: 检查 Emscripten 环境
|
||||
:: 检查 Emscripten 环境
|
||||
call emcc --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo Emscripten 环境未设置,尝试自动设置...
|
||||
echo Emscripten 环境未设置,尝试自动设置...
|
||||
if exist "%SCRIPT_DIR%emsdk\emsdk_env.bat" (
|
||||
echo 运行 Emscripten 环境设置...
|
||||
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
|
||||
echo 错误: 无法设置 Emscripten 环境
|
||||
echo 请先运行 install.bat 安装 Emscripten,或手动运行 setup-env.bat
|
||||
goto :error
|
||||
)
|
||||
) else (
|
||||
echo 错误: 未找到 Emscripten 安装
|
||||
echo 请先运行 install.bat 安装 Emscripten
|
||||
echo 错误: 未找到 Emscripten 安装
|
||||
echo 请先运行 install.bat 安装 Emscripten
|
||||
goto :error
|
||||
)
|
||||
)
|
||||
|
||||
echo Emscripten 版本信息:
|
||||
echo Emscripten 版本信息:
|
||||
call emcc --version | findstr "emcc"
|
||||
echo.
|
||||
|
||||
echo 开始转换 WASM 到 asm.js...
|
||||
echo 开始转换 WASM 到 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 : 最高优化级别
|
||||
:: 使用 wasm2js 工具将 WASM 转换为 asm.js
|
||||
:: wasm2js 是 Binaryen 工具链的一部分,Emscripten 自带
|
||||
:: 参数说明:
|
||||
:: --pedantic : 使用更严格的验证
|
||||
:: -o : 输出文件路径
|
||||
|
||||
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
|
||||
|
||||
:: 检查 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 错误: 转换失败
|
||||
echo 错误: wasm2js 转换失败
|
||||
goto :error
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 转换成功!
|
||||
echo 转换成功!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 输出文件: %OUTPUT_FILE_ABS%
|
||||
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 文件大小: !size_kb! KB
|
||||
)
|
||||
|
||||
echo.
|
||||
echo 使用方法:
|
||||
echo 在 HTML 中引入生成的 JS 文件,然后使用:
|
||||
echo 使用方法:
|
||||
echo 在 HTML 中引入生成的 JS 文件,然后使用:
|
||||
echo PinballModule().then(function(Module) {
|
||||
echo // 使用 Module.ccall 调用导出的函数
|
||||
echo // 使用 Module.ccall 调用导出的函数
|
||||
echo var result = Module.ccall('function_name', 'number', ['number'], [42]);
|
||||
echo });
|
||||
echo.
|
||||
@@ -133,7 +134,7 @@ goto :end
|
||||
|
||||
:error
|
||||
echo.
|
||||
echo 转换失败!
|
||||
echo 转换失败!
|
||||
exit /b 1
|
||||
|
||||
:end
|
||||
|
||||
@@ -2,102 +2,102 @@
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
echo ========================================
|
||||
echo Emscripten 安装脚本 (版本: 3.1.41)
|
||||
echo Emscripten 安装脚本 (版本: 3.1.41)
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
:: 设置变量
|
||||
:: 设置变量
|
||||
set EMSCRIPTEN_VERSION=3.1.41
|
||||
set SCRIPT_DIR=%~dp0
|
||||
set EMSDK_DIR=%SCRIPT_DIR%emsdk
|
||||
|
||||
:: 检查是否已存在 emsdk 目录
|
||||
:: 检查是否已存在 emsdk 目录
|
||||
if exist "%EMSDK_DIR%" (
|
||||
echo 检测到已存在的 emsdk 目录...
|
||||
set /p "choice=是否重新安装? (y/n): "
|
||||
echo 检测到已存在的 emsdk 目录...
|
||||
set /p "choice=是否重新安装? (y/n): "
|
||||
if /i "!choice!" neq "y" (
|
||||
echo 安装已取消
|
||||
goto :end
|
||||
goto :install
|
||||
)
|
||||
echo 删除现有安装...
|
||||
echo 删除现有安装...
|
||||
rmdir /s /q "%EMSDK_DIR%"
|
||||
)
|
||||
|
||||
:: 检查 Git 是否可用
|
||||
:: 检查 Git 是否可用
|
||||
git --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo 错误: 未找到 Git,请先安装 Git
|
||||
echo 错误: 未找到 Git,请先安装 Git
|
||||
goto :error
|
||||
)
|
||||
|
||||
:: 检查 Python 是否可用
|
||||
:: 检查 Python 是否可用
|
||||
python --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo 错误: 未找到 Python,请先安装 Python 3.x
|
||||
echo 错误: 未找到 Python,请先安装 Python 3.x
|
||||
goto :error
|
||||
)
|
||||
|
||||
echo 开始下载 Emscripten SDK...
|
||||
echo 开始下载 Emscripten SDK...
|
||||
cd /d "%SCRIPT_DIR%"
|
||||
git clone https://github.com/emscripten-core/emsdk.git
|
||||
if %errorlevel% neq 0 (
|
||||
echo 错误: 下载 Emscripten SDK 失败
|
||||
echo 错误: 下载 Emscripten SDK 失败
|
||||
goto :error
|
||||
)
|
||||
|
||||
:install
|
||||
echo.
|
||||
echo 进入 emsdk 目录...
|
||||
echo 进入 emsdk 目录...
|
||||
cd "%EMSDK_DIR%"
|
||||
|
||||
echo 安装和激活 Emscripten %EMSCRIPTEN_VERSION%...
|
||||
echo 安装和激活 Emscripten %EMSCRIPTEN_VERSION%...
|
||||
call emsdk.bat install %EMSCRIPTEN_VERSION%
|
||||
if %errorlevel% neq 0 (
|
||||
echo 错误: 安装 Emscripten %EMSCRIPTEN_VERSION% 失败
|
||||
echo 错误: 安装 Emscripten %EMSCRIPTEN_VERSION% 失败
|
||||
goto :error
|
||||
)
|
||||
|
||||
echo.
|
||||
echo 激活 Emscripten %EMSCRIPTEN_VERSION%...
|
||||
echo 激活 Emscripten %EMSCRIPTEN_VERSION%...
|
||||
call emsdk.bat activate %EMSCRIPTEN_VERSION%
|
||||
if %errorlevel% neq 0 (
|
||||
echo 错误: 激活 Emscripten %EMSCRIPTEN_VERSION% 失败
|
||||
echo 错误: 激活 Emscripten %EMSCRIPTEN_VERSION% 失败
|
||||
goto :error
|
||||
)
|
||||
|
||||
echo.
|
||||
echo 设置环境变量...
|
||||
echo 设置环境变量...
|
||||
call emsdk_env.bat
|
||||
|
||||
echo.
|
||||
echo 验证安装...
|
||||
echo 验证安装...
|
||||
call emcc --version
|
||||
if %errorlevel% neq 0 (
|
||||
echo 错误: Emscripten 安装验证失败
|
||||
echo 错误: Emscripten 安装验证失败
|
||||
goto :error
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Emscripten %EMSCRIPTEN_VERSION% 安装成功!
|
||||
echo Emscripten %EMSCRIPTEN_VERSION% 安装成功!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 注意事项:
|
||||
echo 1. 每次使用前需要运行 setup-env.bat 来设置环境变量
|
||||
echo 2. 或者手动运行: tools\emscripten\emsdk\emsdk_env.bat
|
||||
echo 注意事项:
|
||||
echo 1. 每次使用前需要运行 setup-env.bat 来设置环境变量
|
||||
echo 2. 或者手动运行: tools\emscripten\emsdk\emsdk_env.bat
|
||||
echo.
|
||||
echo 创建快速设置脚本...
|
||||
echo 创建快速设置脚本...
|
||||
echo @echo off > "%SCRIPT_DIR%setup-env.bat"
|
||||
echo echo 设置 Emscripten 环境变量... >> "%SCRIPT_DIR%setup-env.bat"
|
||||
echo echo 设置 Emscripten 环境变量... >> "%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 环境已设置完成 >> "%SCRIPT_DIR%setup-env.bat"
|
||||
|
||||
echo setup-env.bat 已创建
|
||||
echo setup-env.bat 已创建
|
||||
goto :end
|
||||
|
||||
:error
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 安装失败!请检查错误信息
|
||||
echo 安装失败!请检查错误信息
|
||||
echo ========================================
|
||||
exit /b 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user