@@ -388,6 +388,11 @@ if(NOT WSJTX_SKIP_LIB_BUILD)
388388 endforeach ()
389389
390390 message (STATUS "wsjtx_bridge.dll will be built with MinGW and linked with wsjtx_lib" )
391+
392+ # MinGW阶段只构建wsjtx_bridge.dll,不构建.node扩展
393+ # .node扩展应该在MSVC阶段构建
394+ message (STATUS "MinGW stage complete. Skipping .node build (will be built in MSVC stage)" )
395+ return ()
391396 endif ()
392397else ()
393398 message (STATUS "Skipping wsjtx_lib build (MSVC mode)" )
@@ -396,29 +401,32 @@ endif()
396401# Link directories (must be before creating target)
397402link_directories (${FFTW3F_LIBRARY_DIRS} )
398403
404+ # ==================== 构建 Node.js Addon (.node) ====================
405+ # 注意: MinGW模式在上面已经return(),不会执行到这里
406+ # 这部分只在 MSVC 模式或 Linux/macOS 平台执行
407+
399408# Source files for the Node.js addon
400409file (GLOB_RECURSE NATIVE_SOURCES "native/*.cpp" "native/*.h" )
401410
402- # Create the Node.js addon with MinGW-specific handling
403- if (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
404- # MinGW build: exclude Windows delay load hook
405- add_library (${PROJECT_NAME} SHARED
411+ # MSVC模式: 排除wsjtx_bridge.cpp (这是MinGW专用的C API桥接层)
412+ if (WIN32 AND MSVC )
413+ list (FILTER NATIVE_SOURCES EXCLUDE REGEX ".*wsjtx_bridge\\ .(cpp|h)$" )
414+ message (STATUS "MSVC mode: excluding wsjtx_bridge.cpp from .node build" )
415+ endif ()
416+
417+ # Create the Node.js addon
418+ # 注意: 此时MinGW模式已经return,只剩MSVC/Linux/macOS执行到这里
419+ if (CMAKE_JS_SRC)
420+ add_library (${PROJECT_NAME} SHARED
406421 ${NATIVE_SOURCES}
422+ ${CMAKE_JS_SRC}
407423 )
408- message (STATUS "MinGW build: excluding CMAKE_JS_SRC (Windows delay load hook)" )
424+ message (STATUS "Building ${PROJECT_NAME} with CMAKE_JS_SRC (delay- load hook)" )
409425else ()
410- # Other platforms: include CMAKE_JS_SRC if available
411- if (CMAKE_JS_SRC)
412- add_library (${PROJECT_NAME} SHARED
413- ${NATIVE_SOURCES}
414- ${CMAKE_JS_SRC}
415- )
416- message (STATUS "Non-MinGW build: including CMAKE_JS_SRC for delay-load hook" )
417- else ()
418- add_library (${PROJECT_NAME} SHARED
419- ${NATIVE_SOURCES}
420- )
421- endif ()
426+ add_library (${PROJECT_NAME} SHARED
427+ ${NATIVE_SOURCES}
428+ )
429+ message (STATUS "Building ${PROJECT_NAME} without CMAKE_JS_SRC" )
422430endif ()
423431
424432# Set properties for Node.js addon
@@ -456,33 +464,23 @@ if(UNIX AND NOT APPLE)
456464 )
457465endif ()
458466
459- # 设置 Node.js 和 node-addon-api 头文件路径(仅针对 C++ 目标)
460- if (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
461- # Windows MinGW: 使用 MSYS2 的 Node.js 头文件 + 项目的 node-addon-api
462- target_include_directories (${PROJECT_NAME} PRIVATE
463- "${CMAKE_JS_INC} "
464- "/mingw64/include/node"
465- "/mingw64/include/node/node"
466- "/mingw64/include"
467- "${NODE_ADDON_API_PATH} "
468- )
469- message (STATUS "MinGW build: using MSYS2 Node.js headers and local node-addon-api" )
470- message (STATUS "CMAKE_JS_INC: ${CMAKE_JS_INC} " )
471- elseif (WIN32 AND MSVC )
472- # Windows MSVC: 使用 cmake-js 头文件 + 项目的 node-addon-api + native目录(用于wsjtx_bridge.h)
467+ # 设置 Node.js 和 node-addon-api 头文件路径
468+ # 注意: MinGW模式已经return,这里只处理MSVC和其他平台
469+ if (WIN32 AND MSVC )
470+ # Windows MSVC: 需要包含native目录(用于wsjtx_bridge.h声明)
473471 target_include_directories (${PROJECT_NAME} PRIVATE
474472 ${CMAKE_JS_INC}
475473 "${NODE_ADDON_API_PATH} "
476474 "${CMAKE_CURRENT_SOURCE_DIR} /native"
477475 )
478- message (STATUS "MSVC build: using cmake-js headers and native directory for wsjtx_bridge.h" )
476+ message (STATUS "MSVC build: including native directory for wsjtx_bridge.h" )
479477else ()
480- # 其他平台:使用 cmake-js 提供的头文件路径 + 项目的 node-addon-api
478+ # Linux/macOS: 标准配置
481479 target_include_directories (${PROJECT_NAME} PRIVATE
482480 ${CMAKE_JS_INC}
483481 "${NODE_ADDON_API_PATH} "
484482 )
485- message (STATUS "Using cmake-js provided headers: ${CMAKE_JS_INC} " )
483+ message (STATUS "Non-Windows build: using standard cmake-js headers" )
486484endif ()
487485
488486# Compiler-specific options
@@ -496,26 +494,10 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE
496494# Add compile flags
497495target_compile_options (${PROJECT_NAME} PRIVATE ${FFTW3F_CFLAGS_OTHER} )
498496
499- # Link libraries with MinGW-specific handling
500- if (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
501- # Windows MinGW: 复制库文件到本地目录避免路径问题
502- set (LOCAL_NODE_LIB "${CMAKE_BINARY_DIR} /node.lib" )
503-
504- # 检查并复制 Node.js 库文件
505- if (EXISTS "${CMAKE_JS_LIB} " )
506- message (STATUS "Copying Node.js library from: ${CMAKE_JS_LIB} " )
507- configure_file ("${CMAKE_JS_LIB} " "${LOCAL_NODE_LIB} " COPYONLY )
508- target_link_libraries (${PROJECT_NAME} PRIVATE "${LOCAL_NODE_LIB} " )
509- message (STATUS "MinGW build: Using copied Node.js library: ${LOCAL_NODE_LIB} " )
510- else ()
511- message (STATUS "MinGW build: CMAKE_JS_LIB not found, skipping Node.js library linking" )
512- endif ()
513- else ()
514- # Other platforms: link CMAKE_JS_LIB if available
515- if (CMAKE_JS_LIB)
516- target_link_libraries (${PROJECT_NAME} PRIVATE ${CMAKE_JS_LIB} )
517- message (STATUS "Using cmake-js provided library: ${CMAKE_JS_LIB} " )
518- endif ()
497+ # Link Node.js library (MSVC/Linux/macOS only, MinGW已return)
498+ if (CMAKE_JS_LIB)
499+ target_link_libraries (${PROJECT_NAME} PRIVATE ${CMAKE_JS_LIB} )
500+ message (STATUS "Linking cmake-js library: ${CMAKE_JS_LIB} " )
519501endif ()
520502
521503# Link libraries based on build mode
@@ -557,17 +539,10 @@ elseif(UNIX)
557539 # Linux specific linker flags for Node.js extensions
558540 # Note: We don't use --no-undefined because Node.js extensions
559541 # have symbols that are resolved at runtime by the Node.js process
560- target_link_options (${PROJECT_NAME} PRIVATE
542+ target_link_options (${PROJECT_NAME} PRIVATE
561543 -Wl,--as-needed
562544 )
563545elseif (WIN32 )
564- # Windows with MinGW-w64 linking
565- target_link_libraries (${PROJECT_NAME} PRIVATE
566- gfortran
567- gcc_s
568- pthread
569- )
570- if (FFTW_HAS_THREADS)
571- target_link_libraries (${PROJECT_NAME} PRIVATE fftw3f_threads )
572- endif ()
546+ # Windows MSVC: 不需要链接Fortran库,会通过wsjtx_bridge.dll动态加载
547+ message (STATUS "Windows MSVC: Fortran libraries will be loaded via wsjtx_bridge.dll" )
573548endif ()
0 commit comments