#!/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 "========================================"