@@ -201,54 +201,86 @@ jobs:
201201 # 新架构: wsjtx_lib (static) -> wsjtx_bridge (dynamic) -> .node (loads bridge)
202202 npx cmake-js compile --arch=${{ matrix.cmake_arch }}
203203
204- # 8 . Windows构建 - 统一使用MinGW(简化后的单阶段构建)
205- - name : Build native module (Windows/MinGW)
204+ # 8a . Windows构建 - 第一步:MinGW构建wsjtx_lib和wsjtx_bridge.dll
205+ - name : Build wsjtx_bridge.dll (Windows/MinGW)
206206 if : runner.os == 'Windows'
207207 shell : msys2 {0}
208208 run : |
209- echo "=== Building with MinGW (unified architecture) ==="
210- echo "New build flow : wsjtx_lib -> wsjtx_bridge.dll -> .node "
209+ echo "=== Step 1: Building wsjtx_lib + wsjtx_bridge.dll with MinGW ==="
210+ echo "Architecture : wsjtx_lib (static) + wsjtx_bridge.dll (dynamic) "
211211
212212 # 清理之前的构建
213- rm -rf build/
214-
215- # 使用cmake-js进行完整构建(MinGW工具链)
216- npx cmake-js compile --arch=x64 \
217- --CDCMAKE_BUILD_TYPE=Release \
218- --CDCMAKE_C_COMPILER=gcc \
219- --CDCMAKE_CXX_COMPILER=g++ \
220- --CDCMAKE_Fortran_COMPILER=gfortran \
221- --CDCMAKE_PREFIX_PATH=/mingw64 \
222- --CDPKG_CONFIG_EXECUTABLE=/mingw64/bin/pkg-config
213+ rm -rf build_mingw/
214+ mkdir -p build_mingw
215+ cd build_mingw
216+
217+ # 使用CMake直接构建(MinGW Makefiles generator)
218+ cmake .. \
219+ -G "MinGW Makefiles" \
220+ -DCMAKE_BUILD_TYPE=Release \
221+ -DCMAKE_C_COMPILER=gcc \
222+ -DCMAKE_CXX_COMPILER=g++ \
223+ -DCMAKE_Fortran_COMPILER=gfortran \
224+ -DCMAKE_PREFIX_PATH=/mingw64 \
225+ -DPKG_CONFIG_EXECUTABLE=/mingw64/bin/pkg-config \
226+ -DWSJTX_BUILD_LIBS=ON \
227+ -DWSJTX_BUILD_NODE_ADDON=OFF
228+
229+ # 构建
230+ cmake --build . --config Release
223231
224232 # 验证构建产物
225233 echo ""
226- echo "🔍 Verifying build artifacts..."
227- if [ ! -f "build/ Release/wsjtx_bridge.dll" ]; then
234+ echo "🔍 Verifying MinGW build artifacts..."
235+ if [ ! -f "Release/wsjtx_bridge.dll" ]; then
228236 echo "❌ Error: wsjtx_bridge.dll not found!"
229- ls -la build/Release/ || ls -la build/
237+ find . -name "wsjtx_bridge.dll" -o -name "libwsjtx_bridge.*"
230238 exit 1
231239 fi
232240
233- if [ ! -f "build/Release/wsjtx_lib_nodejs.node" ]; then
234- echo "❌ Error: wsjtx_lib_nodejs.node not found!"
235- ls -la build/Release/ || ls -la build/
236- exit 1
237- fi
241+ echo "✅ wsjtx_bridge.dll built successfully"
242+ ls -lh Release/wsjtx_bridge.dll
238243
239- echo "✅ All build artifacts generated successfully"
240- ls -lh build/Release/
244+ cd ..
241245
242- # 创建prebuilds目录并复制所有必需文件
243- echo ""
244- echo "📦 Packaging prebuilt binaries..."
246+ # 8b. Windows构建 - 第二步:MSVC构建.node扩展
247+ - name : Build .node extension (Windows/MSVC)
248+ if : runner.os == 'Windows'
249+ shell : cmd
250+ run : |
251+ echo === Step 2: Building .node extension with MSVC ===
252+ echo Architecture: .node (loads wsjtx_bridge.dll at runtime)
253+
254+ REM 使用cmake-js构建.node(自动使用Visual Studio)
255+ npx cmake-js compile --arch=x64 --CDWSJTX_BUILD_LIBS=OFF --CDWSJTX_BUILD_NODE_ADDON=ON
256+
257+ REM 验证构建产物
258+ echo.
259+ echo Verifying MSVC build artifacts...
260+ if not exist "build\Release\wsjtx_lib_nodejs.node" (
261+ echo Error: wsjtx_lib_nodejs.node not found!
262+ dir /s /b build\*.node
263+ exit /b 1
264+ )
265+
266+ echo All build artifacts generated successfully
267+ dir build\Release\*.node
268+
269+ # 8c. Windows打包 - 复制所有必需文件
270+ - name : Package Windows binaries
271+ if : runner.os == 'Windows'
272+ shell : msys2 {0}
273+ run : |
274+ echo "📦 Packaging Windows prebuilt binaries..."
245275 mkdir -p prebuilds/win32-x64
246276
247- # 复制.node扩展
277+ # 复制.node扩展(MSVC构建)
248278 cp build/Release/wsjtx_lib_nodejs.node prebuilds/win32-x64/
279+ echo "✅ Copied .node extension (MSVC)"
249280
250- # 复制bridge动态库
251- cp build/Release/wsjtx_bridge.dll prebuilds/win32-x64/
281+ # 复制wsjtx_bridge.dll(MinGW构建)
282+ cp build_mingw/Release/wsjtx_bridge.dll prebuilds/win32-x64/
283+ echo "✅ Copied wsjtx_bridge.dll (MinGW)"
252284
253285 # 复制MinGW运行时依赖
254286 echo "📦 Copying MinGW runtime dependencies..."
@@ -469,10 +501,17 @@ jobs:
469501 echo "📁 构建完成的文件:"
470502 ls -la "$TARGET_DIR"
471503
472- # 计算文件数量
473- BRIDGE_LIBS=$(ls "$TARGET_DIR" | grep -E "\\.(so|dylib)$" | grep -v wsjtx_bridge | wc -l)
474- NODE_SIZE=$(stat -c%s "$TARGET_DIR"/*.node 2>/dev/null || stat -f%z "$TARGET_DIR"/*.node 2>/dev/null || echo "unknown")
475- BRIDGE_SIZE=$(stat -c%s "$TARGET_DIR"/wsjtx_bridge.* 2>/dev/null || stat -f%z "$TARGET_DIR"/wsjtx_bridge.* 2>/dev/null || echo "unknown")
504+ # 计算文件数量(去除空格)
505+ BRIDGE_LIBS=$(ls "$TARGET_DIR" | grep -E "\\.(so|dylib)$" | grep -v wsjtx_bridge | wc -l | tr -d ' ')
506+
507+ # 获取文件大小(确保是数字或引号包裹的字符串)
508+ if [ "${{ runner.os }}" = "Linux" ]; then
509+ NODE_SIZE=$(stat -c%s "$TARGET_DIR"/*.node 2>/dev/null || echo "0")
510+ BRIDGE_SIZE=$(stat -c%s "$TARGET_DIR"/wsjtx_bridge.* 2>/dev/null || echo "0")
511+ else
512+ NODE_SIZE=$(stat -f%z "$TARGET_DIR"/*.node 2>/dev/null || echo "0")
513+ BRIDGE_SIZE=$(stat -f%z "$TARGET_DIR"/wsjtx_bridge.* 2>/dev/null || echo "0")
514+ fi
476515
477516 # 创建构建信息文件
478517 cat > "$TARGET_DIR/build-info.json" << EOF
0 commit comments