# Platform detection and conditional dependencies if(WIN32) set(SOFTBUS_PLATFORM_NAME "Windows") add_compile_definitions(SOFTBUS_PLATFORM_WINDOWS NOMINMAX WIN32_LEAN_AND_MEAN) else() set(SOFTBUS_PLATFORM_NAME "Linux") add_compile_definitions(SOFTBUS_PLATFORM_LINUX) endif() find_package(Threads REQUIRED) if(WIN32) set(SOFTBUS_HAS_DBUS OFF) set(SOFTBUS_HAS_UDEV OFF) else() find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_check_modules(DBUS QUIET dbus-1) if(DBUS_FOUND) set(SOFTBUS_HAS_DBUS ON) else() set(SOFTBUS_HAS_DBUS OFF) message(WARNING "libdbus-1 not found; DBus IPC will be disabled on Linux") endif() else() set(SOFTBUS_HAS_DBUS OFF) endif() find_library(UDEV_LIB udev) if(UDEV_LIB) set(SOFTBUS_HAS_UDEV ON) else() set(SOFTBUS_HAS_UDEV OFF) message(WARNING "libudev not found; udev device monitor will use stub on Linux") endif() endif() # ZeroMQ option(SOFTBUS_WITH_ZMQ "Enable ZeroMQ transport" OFF) if(SOFTBUS_WITH_ZMQ) if(PkgConfig_FOUND) pkg_check_modules(ZMQ QUIET libzmq) endif() if(NOT ZMQ_FOUND) find_library(ZMQ_LIBRARY NAMES zmq libzmq) find_path(ZMQ_INCLUDE_DIR zmq.h) if(ZMQ_LIBRARY AND ZMQ_INCLUDE_DIR) set(ZMQ_FOUND TRUE) set(ZMQ_LIBRARIES ${ZMQ_LIBRARY}) set(ZMQ_INCLUDE_DIRS ${ZMQ_INCLUDE_DIR}) endif() endif() if(ZMQ_FOUND) set(SOFTBUS_HAS_ZMQ ON) message(STATUS "ZeroMQ found: ${ZMQ_LIBRARIES}") else() set(SOFTBUS_HAS_ZMQ OFF) message(WARNING "ZeroMQ not found; set SOFTBUS_WITH_ZMQ=OFF or install libzmq") endif() else() set(SOFTBUS_HAS_ZMQ OFF) endif() # open62541 (optional until daemon links it) option(SOFTBUS_WITH_OPCUA "Enable OPC UA server in daemon" ON) function(softbus_apply_platform_libs target) target_link_libraries(${target} PRIVATE Threads::Threads) if(WIN32) target_link_libraries(${target} PRIVATE ws2_32 wsock32) endif() if(MINGW) target_compile_options(${target} PRIVATE -fno-stack-protector) target_link_options(${target} PRIVATE -fno-stack-protector) endif() endfunction() function(softbus_apply_zmq target) if(SOFTBUS_HAS_ZMQ) target_compile_definitions(${target} PRIVATE SOFTBUS_HAS_ZMQ=1) target_include_directories(${target} PRIVATE ${ZMQ_INCLUDE_DIRS}) target_link_libraries(${target} PRIVATE ${ZMQ_LIBRARIES}) else() target_compile_definitions(${target} PRIVATE SOFTBUS_HAS_ZMQ=0) endif() endfunction() function(softbus_apply_dbus target) if(SOFTBUS_HAS_DBUS) target_compile_definitions(${target} PRIVATE SOFTBUS_HAS_DBUS=1) target_include_directories(${target} PRIVATE ${DBUS_INCLUDE_DIRS}) target_link_libraries(${target} PRIVATE ${DBUS_LIBRARIES}) else() target_compile_definitions(${target} PRIVATE SOFTBUS_HAS_DBUS=0) endif() endfunction() function(softbus_apply_udev target) if(SOFTBUS_HAS_UDEV) target_compile_definitions(${target} PRIVATE SOFTBUS_HAS_UDEV=1) target_link_libraries(${target} PRIVATE ${UDEV_LIB}) else() target_compile_definitions(${target} PRIVATE SOFTBUS_HAS_UDEV=0) endif() endfunction()