add_library(libScePosixForWebKit SHARED EXCLUDE_FROM_ALL Export.cpp Resolver.cpp Filesystem.cpp Wrap.cpp)
target_include_directories(libScePosixForWebKit PRIVATE ${LIBS_INCLUDE_DIR})
target_link_libraries(libScePosixForWebKit PRIVATE libSceNet libkernel_sys libSceLibcInternal)
if(WIN32)
    target_link_libraries(libScePosixForWebKit PRIVATE ws2_32)
endif()
configure_windows_unwind(libScePosixForWebKit)

if(BUILD_TESTING)
    add_test_executable(guest_posix_filesystem_tests ${LIBS_INCLUDE_DIR}/tests/GuestPosixFilesystem.cpp)
    target_include_directories(guest_posix_filesystem_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_posix_filesystem_tests PRIVATE libScePosixForWebKit libkernel libc)
    configure_windows_unwind(guest_posix_filesystem_tests)
    add_test(NAME guest_posix_filesystem COMMAND guest_posix_filesystem_tests)
    set_tests_properties(guest_posix_filesystem PROPERTIES TIMEOUT 30)
    if(WIN32)
        set_tests_properties(guest_posix_filesystem PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libScePosixForWebKit>")
    endif()
    add_test_executable(guest_posix_wrap_tests ${LIBS_INCLUDE_DIR}/tests/GuestPosixWrap.cpp)
    target_include_directories(guest_posix_wrap_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_posix_wrap_tests PRIVATE libScePosixForWebKit libkernel_sys libSceLibcInternal libkernel libc)
    configure_windows_unwind(guest_posix_wrap_tests)
    add_test(NAME guest_posix_wrap COMMAND guest_posix_wrap_tests)
    set_tests_properties(guest_posix_wrap PROPERTIES TIMEOUT 30)
    if(WIN32)
        set_tests_properties(guest_posix_wrap PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libScePosixForWebKit>")
    endif()
    add_test_executable(guest_fnmatch_tests ${LIBS_INCLUDE_DIR}/tests/GuestFnmatch.cpp)
    target_include_directories(guest_fnmatch_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_fnmatch_tests PRIVATE libScePosixForWebKit libc)
    configure_windows_unwind(guest_fnmatch_tests)
    add_test(NAME guest_fnmatch COMMAND guest_fnmatch_tests)
    if(WIN32)
        set_tests_properties(guest_fnmatch PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libScePosixForWebKit>")
    endif()
    add_test_executable(guest_resolver_tests ${LIBS_INCLUDE_DIR}/tests/GuestResolver.cpp)
    target_include_directories(guest_resolver_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_resolver_tests PRIVATE libScePosixForWebKit libSceNet libc)
    configure_windows_unwind(guest_resolver_tests)
    add_test(NAME guest_resolver COMMAND guest_resolver_tests)
    if(WIN32)
        target_link_libraries(guest_resolver_tests PRIVATE ws2_32)
        set_tests_properties(guest_resolver PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libScePosixForWebKit>")
    endif()
    add_test_executable(guest_service_database_tests ${LIBS_INCLUDE_DIR}/tests/GuestServiceDatabase.cpp)
    target_include_directories(guest_service_database_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_service_database_tests PRIVATE libScePosixForWebKit libc)
    configure_windows_unwind(guest_service_database_tests)
    add_test(NAME guest_service_database COMMAND guest_service_database_tests)
    if(WIN32)
        set_tests_properties(guest_service_database PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libScePosixForWebKit>")
    endif()
    add_test_executable(guest_posix_thread_name_tests ${LIBS_INCLUDE_DIR}/tests/GuestPosixThreadName.cpp)
    target_include_directories(guest_posix_thread_name_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_posix_thread_name_tests PRIVATE libScePosixForWebKit libkernel libc)
    configure_windows_unwind(guest_posix_thread_name_tests)
    add_test(NAME guest_posix_thread_name COMMAND guest_posix_thread_name_tests)
    set_tests_properties(guest_posix_thread_name PROPERTIES TIMEOUT 30)
    if(WIN32)
        set_tests_properties(guest_posix_thread_name PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libScePosixForWebKit>")
    endif()
endif()

if(BUILD_TESTING)
    add_test_executable(guest_raw_resolver_tests ${LIBS_INCLUDE_DIR}/tests/ResolverRaw.cpp)
    target_include_directories(guest_raw_resolver_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_raw_resolver_tests PRIVATE libScePosixForWebKit libc)
    configure_windows_unwind(guest_raw_resolver_tests)
    add_test(NAME guest_raw_resolver COMMAND guest_raw_resolver_tests)
    set_tests_properties(guest_raw_resolver PROPERTIES TIMEOUT 30)
    if(WIN32)
        set_tests_properties(guest_raw_resolver PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libScePosixForWebKit>")
    endif()
endif()
