add_library(libSceNet SHARED EXCLUDE_FROM_ALL Export.cpp)
target_include_directories(libSceNet PRIVATE ${LIBS_INCLUDE_DIR})
configure_windows_unwind(libSceNet)

if(BUILD_TESTING)
    add_test_executable(guest_datagram_receive_tests ${LIBS_INCLUDE_DIR}/tests/GuestDatagramReceive.cpp)
    target_include_directories(guest_datagram_receive_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_datagram_receive_tests PRIVATE libSceNet libkernel libc)
    configure_windows_unwind(guest_datagram_receive_tests)
    foreach(api IN ITEMS recv recvfrom sceNetRecv sceNetRecvfrom)
        add_test(NAME guest_datagram_${api} COMMAND guest_datagram_receive_tests ${api})
        set_tests_properties(guest_datagram_${api} PROPERTIES TIMEOUT 20)
        if(WIN32)
            set_tests_properties(guest_datagram_${api} PROPERTIES ENVIRONMENT_MODIFICATION
                "PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceNet>")
        endif()
    endforeach()
    if(WIN32)
        add_test_executable(guest_socket_host_write_tests ${LIBS_INCLUDE_DIR}/tests/GuestSocketHostWrite.cpp)
        target_include_directories(guest_socket_host_write_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_socket_host_write_tests PRIVATE libSceNet libkernel libc)
        configure_windows_unwind(guest_socket_host_write_tests)
        foreach(api IN ITEMS recv recvfrom read sceKernelRead sceNetRecv sceNetRecvfrom)
            add_test(NAME guest_socket_host_write_${api}_udp COMMAND guest_socket_host_write_tests ${api})
            add_test(NAME guest_socket_host_write_${api}_tcp COMMAND guest_socket_host_write_tests ${api} tcp)
            set_tests_properties(guest_socket_host_write_${api}_udp guest_socket_host_write_${api}_tcp
                PROPERTIES TIMEOUT 20 ENVIRONMENT_MODIFICATION
                "PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceNet>")
        endforeach()
    endif()
    add_test_executable(guest_sce_net_tests ${LIBS_INCLUDE_DIR}/tests/GuestSceNet.cpp)
    target_include_directories(guest_sce_net_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_sce_net_tests PRIVATE libSceNet libSceNetCtl libkernel libc)
    configure_windows_unwind(guest_sce_net_tests)
    add_test(NAME guest_sce_net COMMAND guest_sce_net_tests)
    set_tests_properties(guest_sce_net PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77)
    if(WIN32)
        target_link_libraries(guest_sce_net_tests PRIVATE ws2_32)
        set_tests_properties(guest_sce_net PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceNet>")
    endif()
endif()
