98 lines
2.3 KiB
Bash
Executable File
98 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build script for paper_recognizer.wasm
|
|
# Prerequisites: emsdk must be installed (source emsdk_env.sh)
|
|
|
|
set -e
|
|
|
|
# 配置路径
|
|
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
SRC_DIR="$PROJECT_DIR/src"
|
|
OUT_DIR="$PROJECT_DIR/web"
|
|
OPENCV_DIR="/home/ubuntu/opencv"
|
|
OPENCV_BUILD="$OPENCV_DIR/build_mini_os"
|
|
|
|
# 可选:激活 emsdk
|
|
if [ -z "$EMSDK" ]; then
|
|
EMSDK_DIR="/home/ubuntu/emsdk"
|
|
if [ -f "$EMSDK_DIR/emsdk_env.sh" ]; then
|
|
source "$EMSDK_DIR/emsdk_env.sh"
|
|
fi
|
|
fi
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
# 头文件路径
|
|
INCLUDES=(
|
|
"-I$SRC_DIR"
|
|
"-I$OPENCV_DIR/include"
|
|
"-I$OPENCV_DIR/modules/core/include"
|
|
"-I$OPENCV_DIR/modules/imgproc/include"
|
|
"-I$OPENCV_DIR/modules/imgcodecs/include"
|
|
"-I$OPENCV_DIR/modules/flann/include"
|
|
"-I$OPENCV_BUILD"
|
|
)
|
|
|
|
# OpenCV 静态库
|
|
LIBS=(
|
|
"-L$OPENCV_BUILD/lib"
|
|
"-lopencv_core"
|
|
"-lopencv_imgproc"
|
|
"-L$OPENCV_BUILD/3rdparty/lib"
|
|
"-lzlib"
|
|
"-lopencv_imgcodecs"
|
|
)
|
|
|
|
# Emscripten 编译标志
|
|
EMCC_FLAGS=(
|
|
"-s WASM=1"
|
|
"-s ALLOW_MEMORY_GROWTH=1"
|
|
"-s TOTAL_MEMORY=64MB"
|
|
"-s WASM_MEM_MAX=512MB"
|
|
"-s MODULARIZE=1"
|
|
"-s EXPORT_NAME=\"PaperRecognizerModule\""
|
|
"-s EXPORTED_RUNTIME_METHODS=[\"ccall\",\"cwrap\",\"getValue\",\"setValue\",\"UTF8ToString\",\"stringToUTF8\",\"HEAPU8\",\"HEAP8\",\"HEAP32\"]"
|
|
"-s EXPORTED_FUNCTIONS=[\"_malloc\",\"_free\",\"_recognize\",\"_getResultJson\",\"_getAnnotatedWidth\",\"_getAnnotatedHeight\",\"_getAnnotatedPixels\",\"_freeResult\"]"
|
|
"-s FILESYSTEM=0"
|
|
"-s DISABLE_EXCEPTION_CATCHING=1"
|
|
"-Wno-unused-command-line-argument"
|
|
)
|
|
|
|
# 优化级别
|
|
OPT_FLAGS="-Os -DNDEBUG"
|
|
|
|
# 源文件
|
|
SOURCES=(
|
|
"$SRC_DIR/PaperRecognizer.cpp"
|
|
"$SRC_DIR/ColorReader.cpp"
|
|
"$SRC_DIR/PaperConfig.cpp"
|
|
"$SRC_DIR/emsc_bridge.cpp"
|
|
)
|
|
|
|
echo "========================================"
|
|
echo "Building paper_recognizer WASM module..."
|
|
echo "========================================"
|
|
echo "Project: $PROJECT_DIR"
|
|
echo "OpenCV: $OPENCV_BUILD"
|
|
echo ""
|
|
|
|
# Emscripten 编译命令
|
|
CMD="em++ \
|
|
$OPT_FLAGS \
|
|
${INCLUDES[@]} \
|
|
${SOURCES[@]} \
|
|
${LIBS[@]} \
|
|
${EMCC_FLAGS[@]} \
|
|
-o \"$OUT_DIR/paper_recognizer.js\""
|
|
|
|
echo "Running:"
|
|
echo "$CMD"
|
|
echo ""
|
|
eval "$CMD"
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Build complete!"
|
|
echo "Output:"
|
|
ls -lh "$OUT_DIR/"paper_recognizer.*
|
|
echo "========================================"
|