add_library(libkernel SHARED EXCLUDE_FROM_ALL
        ${CMAKE_CURRENT_SOURCE_DIR}/Unimplemented.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Apr/src/Apr.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Equeue/Equeue.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Equeue/src/EventAccessors.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/DirectoryDescriptor.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/FileLock.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/NativeStat.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/Terminal.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/Open.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/OpenFileLimit.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/SharedMemory.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/RandomDevice.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/File/src/Stdio.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/../libc/src/Rename.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Semaphore/src/Semaphore.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/SyncOnAddress/src/SyncOnAddress.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/DirectMemory/Export.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/DirectMemory/DirectMemory.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/DirectMemory/PosixMemory.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/DirectMemory/MemoryPool.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/DirectMemory/MemoryPoolExport.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/src/Mutex.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/src/Cond.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/src/Attr.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/src/Thread.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/src/Tsd.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/src/Rwlock.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/src/Sem.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Attr.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Barrier.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Cond.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Mutex.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Rwlock.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Thread.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Once.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Tsd.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Pthread/Posix/Sem.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Socket/src/Socket.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Socket/src/Udp.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Socket/src/AddressConversion.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/EventFlag/src/EventFlag.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Module/src/Module.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Module/src/DynamicLoader.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Module/src/ModuleInfo.cpp
        ${LIBS_INCLUDE_DIR}/nid/src/NidCompute.cpp
        ${LIBS_INCLUDE_DIR}/nid/src/Sha1.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Aio/src/Aio.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Coredump.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Exception.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Sanitizer.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Rtld.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Process.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Sandbox.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/SystemConfiguration.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/SoftwareVersion.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Signals.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/SignalSets.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/System/src/Notification.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Time/Time.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Time/TimedWait.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/AppMetadata/src/AppMetadata.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/AppMetadata/src/ParamJsonParser.cpp
)

target_include_directories(libkernel PRIVATE ${LIBS_INCLUDE_DIR})
target_include_directories(libkernel PRIVATE ${LIBS_INCLUDE_DIR}/nid/include)
target_link_libraries(libkernel PRIVATE ${CMAKE_DL_LIBS})
target_link_libraries(libkernel PRIVATE libc)
if(WIN32)
    target_link_libraries(libkernel PRIVATE ws2_32 shell32)
    target_compile_definitions(libkernel PRIVATE _WIN32_WINNT=0x0602)
endif()
configure_windows_unwind(libkernel)

if(BUILD_TESTING)
    add_test_executable(download_data_mount_tests ${LIBS_INCLUDE_DIR}/tests/GuestDownloadDataMount.cpp)
    target_include_directories(download_data_mount_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(download_data_mount_tests PRIVATE libkernel libc)
    configure_windows_unwind(download_data_mount_tests)
    foreach(downloadDataCase IN ITEMS declared:256 none:0 invalid:256)
        string(REPLACE ":" ";" downloadDataCase ${downloadDataCase})
        list(GET downloadDataCase 0 downloadDataName)
        list(GET downloadDataCase 1 downloadDataSize)
        set(downloadDataRun ${CMAKE_CURRENT_BINARY_DIR}/download_data_mount_${downloadDataName})
        if(downloadDataName STREQUAL "invalid")
            file(WRITE ${downloadDataRun}/app0/sce_sys/param.json "{\"downloadDataSize\":${downloadDataSize}}")
        else()
            file(WRITE ${downloadDataRun}/app0/sce_sys/param.json
                "{\"titleId\":\"PPSA00000\",\"localizedParameters\":{\"en-US\":{\"titleName\":\"Example\"}},\"downloadDataSize\":${downloadDataSize},"
                "\"userDefinedParam1\":0,\"userDefinedParam2\":0,\"userDefinedParam3\":0,\"userDefinedParam4\":0}")
        endif()
        add_test(NAME download_data_mount_${downloadDataName} COMMAND download_data_mount_tests ${downloadDataName}
            WORKING_DIRECTORY ${downloadDataRun})
        if(WIN32)
            set_tests_properties(download_data_mount_${downloadDataName} PROPERTIES ENVIRONMENT_MODIFICATION
                "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
        endif()
    endforeach()
    add_test_executable(param_json_parser_tests ${LIBS_INCLUDE_DIR}/tests/ParamJsonParser.cpp)
    target_include_directories(param_json_parser_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(param_json_parser_tests PRIVATE libkernel libc)
    configure_windows_unwind(param_json_parser_tests)
    add_test(NAME param_json_parser COMMAND param_json_parser_tests)
    if(WIN32)
        set_tests_properties(param_json_parser PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_posix_sem_tests ${LIBS_INCLUDE_DIR}/tests/GuestPosixSem.cpp)
    target_include_directories(guest_posix_sem_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_posix_sem_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_posix_sem_tests)
    add_test(NAME guest_posix_sem_init COMMAND guest_posix_sem_tests init)
    add_test(NAME guest_posix_sem_post COMMAND guest_posix_sem_tests post)
    if(WIN32)
        set_tests_properties(guest_posix_sem_init guest_posix_sem_post PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_process_time_tests ${LIBS_INCLUDE_DIR}/tests/GuestProcessTime.cpp)
    target_include_directories(guest_process_time_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_process_time_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_process_time_tests)
    add_test(NAME guest_process_time COMMAND guest_process_time_tests)
    add_test(NAME guest_process_time_counter COMMAND guest_process_time_tests counter)
    add_test(NAME guest_process_time_scaled COMMAND guest_process_time_tests)
    add_test(NAME guest_process_time_counter_scaled COMMAND guest_process_time_tests counter)
    set_tests_properties(guest_process_time_scaled guest_process_time_counter_scaled PROPERTIES ENVIRONMENT "APS5_TIME_SCALE=0.5")
    if(WIN32)
        set_tests_properties(guest_process_time_scaled guest_process_time_counter_scaled PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    if(WIN32)
        set_tests_properties(guest_process_time guest_process_time_counter PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_process_arguments_tests ${LIBS_INCLUDE_DIR}/tests/GuestProcessArguments.cpp)
    target_include_directories(guest_process_arguments_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_process_arguments_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_process_arguments_tests)
    add_test(NAME guest_process_arguments COMMAND guest_process_arguments_tests plain "two words" "ü日")
    if(WIN32)
        set_tests_properties(guest_process_arguments PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_library(guest_module_fixture SHARED ${LIBS_INCLUDE_DIR}/tests/GuestModuleFixture.cpp)
    target_include_directories(guest_module_fixture PRIVATE ${LIBS_INCLUDE_DIR})
    add_custom_command(TARGET guest_module_fixture POST_BUILD
        COMMAND $<TARGET_FILE:nid_patcher> guest_module_fixture $<TARGET_FILE:guest_module_fixture>
        VERBATIM)
    add_dependencies(guest_module_fixture nid_patcher)
    configure_windows_unwind(guest_module_fixture)
    set_target_properties(guest_module_fixture PROPERTIES BUILD_WITH_INSTALL_RPATH ON INSTALL_RPATH "$ORIGIN")
    find_package(Python3 QUIET COMPONENTS Interpreter)
    if(Python3_Interpreter_FOUND AND NOT WIN32)
        target_link_options(guest_module_fixture PRIVATE -Wl,--no-as-needed)
        add_test(NAME nid_patcher_dynamic_strings COMMAND ${Python3_EXECUTABLE}
            ${LIBS_INCLUDE_DIR}/nid/tests/test_dynamic_strings.py $<TARGET_FILE:guest_module_fixture>)
        add_test(NAME nid_patcher_symbol_versions COMMAND ${Python3_EXECUTABLE}
            ${LIBS_INCLUDE_DIR}/nid/tests/test_symbol_versions.py $<TARGET_FILE:nid_patcher>)
    endif()
    add_test_executable(guest_dynamic_loader_tests ${LIBS_INCLUDE_DIR}/tests/GuestDynamicLoader.cpp)
    target_include_directories(guest_dynamic_loader_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_dynamic_loader_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_dynamic_loader_tests)
    add_dependencies(guest_dynamic_loader_tests guest_module_fixture)
    if(NOT WIN32)
        set_target_properties(guest_dynamic_loader_tests PROPERTIES ENABLE_EXPORTS ON)
    endif()
    add_test(NAME guest_dynamic_loader COMMAND guest_dynamic_loader_tests $<TARGET_FILE_NAME:guest_module_fixture>)
    set_tests_properties(guest_dynamic_loader PROPERTIES
        WORKING_DIRECTORY "$<TARGET_FILE_DIR:guest_module_fixture>")
    if(WIN32)
        set_tests_properties(guest_dynamic_loader PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_module_info_tests ${LIBS_INCLUDE_DIR}/tests/GuestModuleInfo.cpp)
    target_include_directories(guest_module_info_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_module_info_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_module_info_tests)
    add_dependencies(guest_module_info_tests guest_module_fixture)
    add_test(NAME guest_module_info COMMAND guest_module_info_tests $<TARGET_FILE_NAME:guest_module_fixture>)
    set_tests_properties(guest_module_info PROPERTIES
        WORKING_DIRECTORY "$<TARGET_FILE_DIR:guest_module_fixture>")
    if(WIN32)
        set_tests_properties(guest_module_info PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_file_timestamp_tests ${LIBS_INCLUDE_DIR}/tests/GuestFileTimestamps.cpp)
    target_include_directories(guest_file_timestamp_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_file_timestamp_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_file_timestamp_tests)
    add_test(NAME guest_file_timestamps COMMAND guest_file_timestamp_tests)
    if(WIN32)
        set_tests_properties(guest_file_timestamps PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libc>")
    endif()
    add_test_executable(guest_filesystem_tests ${LIBS_INCLUDE_DIR}/tests/GuestFilesystem.cpp)
    target_include_directories(guest_filesystem_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_filesystem_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_filesystem_tests)
    add_test(NAME guest_filesystem COMMAND guest_filesystem_tests)
    if(WIN32)
        set_tests_properties(guest_filesystem PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_terminal_tests ${LIBS_INCLUDE_DIR}/tests/GuestTerminal.cpp)
    target_include_directories(guest_terminal_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_terminal_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_terminal_tests)
    add_test(NAME guest_terminal COMMAND guest_terminal_tests)
    set_tests_properties(guest_terminal PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_terminal PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_kernel_sync_tests ${LIBS_INCLUDE_DIR}/tests/GuestKernelSync.cpp)
    target_include_directories(guest_kernel_sync_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_kernel_sync_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_kernel_sync_tests)
    add_test(NAME guest_kernel_sync COMMAND guest_kernel_sync_tests)
    if(WIN32)
        set_tests_properties(guest_kernel_sync PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_kernel_rename_tests ${LIBS_INCLUDE_DIR}/tests/GuestKernelRename.cpp)
    target_include_directories(guest_kernel_rename_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_kernel_rename_tests PRIVATE libkernel libc)
    target_compile_definitions(guest_kernel_rename_tests PRIVATE KERNEL_PRX_PATH="$<TARGET_FILE:libkernel>")
    configure_windows_unwind(guest_kernel_rename_tests)
    add_test(NAME guest_kernel_rename COMMAND guest_kernel_rename_tests)
    if(WIN32)
        set_tests_properties(guest_kernel_rename PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_aio_tests ${LIBS_INCLUDE_DIR}/tests/GuestAio.cpp)
    target_include_directories(guest_aio_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_aio_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_aio_tests)
    add_test(NAME guest_aio COMMAND guest_aio_tests)
    if(WIN32)
        set_tests_properties(guest_aio PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_once_tests ${LIBS_INCLUDE_DIR}/tests/GuestOnce.cpp)
    target_include_directories(guest_once_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_once_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_once_tests)
    add_test(NAME guest_once COMMAND guest_once_tests)
    set_tests_properties(guest_once PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_once PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_barrier_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadBarrier.cpp)
    target_include_directories(guest_pthread_barrier_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_barrier_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_barrier_tests)
    add_test(NAME guest_pthread_barrier COMMAND guest_pthread_barrier_tests)
    set_tests_properties(guest_pthread_barrier PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_barrier PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_kernel_is_stack_tests ${LIBS_INCLUDE_DIR}/tests/GuestKernelIsStack.cpp)
    target_include_directories(guest_kernel_is_stack_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_kernel_is_stack_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_kernel_is_stack_tests)
    add_test(NAME guest_kernel_is_stack COMMAND guest_kernel_is_stack_tests)
    set_tests_properties(guest_kernel_is_stack PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_kernel_is_stack PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_app_info_tests ${LIBS_INCLUDE_DIR}/tests/GuestAppInfo.cpp)
    target_include_directories(guest_app_info_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_app_info_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_app_info_tests)
    add_test(NAME guest_app_info COMMAND guest_app_info_tests)
    set_tests_properties(guest_app_info PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_app_info PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_kernel_stack_protect_tests ${LIBS_INCLUDE_DIR}/tests/GuestKernelStackProtect.cpp)
    target_include_directories(guest_kernel_stack_protect_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_kernel_stack_protect_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_kernel_stack_protect_tests)
    add_test(NAME guest_kernel_stack_protect COMMAND guest_kernel_stack_protect_tests)
    set_tests_properties(guest_kernel_stack_protect PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_kernel_stack_protect PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_thread_self_tests ${LIBS_INCLUDE_DIR}/tests/GuestThreadSelf.cpp)
    target_include_directories(guest_thread_self_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_thread_self_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_thread_self_tests)
    add_test(NAME guest_thread_self COMMAND guest_thread_self_tests)
    set_tests_properties(guest_thread_self PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_thread_self PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_getname_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadGetname.cpp)
    target_include_directories(guest_pthread_getname_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_getname_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_getname_tests)
    add_test(NAME guest_pthread_getname COMMAND guest_pthread_getname_tests)
    set_tests_properties(guest_pthread_getname PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_getname PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_attr_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadAttr.cpp)
    target_include_directories(guest_pthread_attr_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_attr_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_attr_tests)
    add_test(NAME guest_pthread_attr COMMAND guest_pthread_attr_tests)
    set_tests_properties(guest_pthread_attr PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_attr PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_mutexattr_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadMutexattr.cpp)
    target_include_directories(guest_pthread_mutexattr_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_mutexattr_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_mutexattr_tests)
    add_test(NAME guest_pthread_mutexattr COMMAND guest_pthread_mutexattr_tests)
    set_tests_properties(guest_pthread_mutexattr PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_mutexattr PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_start_tests ${LIBS_INCLUDE_DIR}/tests/PthreadStart.cpp)
    target_include_directories(guest_pthread_start_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_start_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_start_tests)
    add_test(NAME guest_pthread_start COMMAND guest_pthread_start_tests)
    set_tests_properties(guest_pthread_start PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_start PROPERTIES TIMEOUT 60 ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_stack_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadStack.cpp)
    target_include_directories(guest_pthread_stack_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_stack_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_stack_tests)
    add_test(NAME guest_pthread_stack COMMAND guest_pthread_stack_tests)
    set_tests_properties(guest_pthread_stack PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_stack PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_cond_timedwait_tests ${LIBS_INCLUDE_DIR}/tests/GuestCondTimedwait.cpp)
    target_include_directories(guest_cond_timedwait_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_cond_timedwait_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_cond_timedwait_tests)
    add_test(NAME guest_cond_timedwait COMMAND guest_cond_timedwait_tests)
    set_tests_properties(guest_cond_timedwait PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_cond_timedwait PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_cond_recursive_mutex_tests ${LIBS_INCLUDE_DIR}/tests/GuestCondRecursiveMutex.cpp)
    target_include_directories(guest_cond_recursive_mutex_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_cond_recursive_mutex_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_cond_recursive_mutex_tests)
    add_test(NAME guest_cond_recursive_mutex COMMAND guest_cond_recursive_mutex_tests)
    set_tests_properties(guest_cond_recursive_mutex PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_cond_recursive_mutex PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_cond_unowned_mutex_tests ${LIBS_INCLUDE_DIR}/tests/GuestCondUnownedMutex.cpp)
    target_include_directories(guest_cond_unowned_mutex_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_cond_unowned_mutex_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_cond_unowned_mutex_tests)
    add_test(NAME guest_cond_unowned_mutex COMMAND guest_cond_unowned_mutex_tests)
    set_tests_properties(guest_cond_unowned_mutex PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_cond_unowned_mutex PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_cpu_time_clocks_tests ${LIBS_INCLUDE_DIR}/tests/GuestCpuTimeClocks.cpp)
    target_include_directories(guest_cpu_time_clocks_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_cpu_time_clocks_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_cpu_time_clocks_tests)
    add_test(NAME guest_cpu_time_clocks COMMAND guest_cpu_time_clocks_tests)
    set_tests_properties(guest_cpu_time_clocks PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_cpu_time_clocks PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_freebsd_clocks_tests ${LIBS_INCLUDE_DIR}/tests/GuestFreebsdClocks.cpp)
    target_include_directories(guest_freebsd_clocks_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_freebsd_clocks_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_freebsd_clocks_tests)
    add_test(NAME guest_freebsd_clocks COMMAND guest_freebsd_clocks_tests)
    set_tests_properties(guest_freebsd_clocks PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_freebsd_clocks PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_thread_cpu_clock_tests ${LIBS_INCLUDE_DIR}/tests/GuestThreadCpuClock.cpp)
    target_include_directories(guest_thread_cpu_clock_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_thread_cpu_clock_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_thread_cpu_clock_tests)
    add_test(NAME guest_thread_cpu_clock COMMAND guest_thread_cpu_clock_tests)
    set_tests_properties(guest_thread_cpu_clock PROPERTIES TIMEOUT 30)
    if(WIN32)
        set_tests_properties(guest_thread_cpu_clock PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_nanosleep_tests ${LIBS_INCLUDE_DIR}/tests/GuestNanosleep.cpp)
    target_include_directories(guest_nanosleep_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_nanosleep_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_nanosleep_tests)
    add_test(NAME guest_nanosleep COMMAND guest_nanosleep_tests)
    set_tests_properties(guest_nanosleep PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_nanosleep PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_sem_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadSem.cpp)
    target_include_directories(guest_pthread_sem_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_sem_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_sem_tests)
    add_test(NAME guest_pthread_sem COMMAND guest_pthread_sem_tests)
    set_tests_properties(guest_pthread_sem PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_sem PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_cancel_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadCancel.cpp)
    target_include_directories(guest_pthread_cancel_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_cancel_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_cancel_tests)
    add_test(NAME guest_pthread_cancel COMMAND guest_pthread_cancel_tests)
    set_tests_properties(guest_pthread_cancel PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_cancel PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_cancel_recovery_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadCancelRecovery.cpp)
    target_include_directories(guest_pthread_cancel_recovery_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_cancel_recovery_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_cancel_recovery_tests)
    add_test(NAME guest_pthread_cancel_recovery COMMAND guest_pthread_cancel_recovery_tests)
    add_test(NAME guest_pthread_cancel_recovery_coarse COMMAND guest_pthread_cancel_recovery_tests)
    set_tests_properties(guest_pthread_cancel_recovery guest_pthread_cancel_recovery_coarse PROPERTIES TIMEOUT 20)
    set_tests_properties(guest_pthread_cancel_recovery_coarse PROPERTIES ENVIRONMENT "APS5_COARSE_TIMED_WAITS=1")
    if(WIN32)
        set_tests_properties(guest_pthread_cancel_recovery guest_pthread_cancel_recovery_coarse PROPERTIES
            ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_semaphore_tests ${LIBS_INCLUDE_DIR}/tests/GuestSemaphore.cpp)
    target_include_directories(guest_semaphore_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_semaphore_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_semaphore_tests)
    add_test(NAME guest_semaphore COMMAND guest_semaphore_tests)
    set_tests_properties(guest_semaphore PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_semaphore PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_rwlock_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadRwlock.cpp)
    target_include_directories(guest_pthread_rwlock_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_rwlock_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_rwlock_tests)
    add_test(NAME guest_pthread_rwlock COMMAND guest_pthread_rwlock_tests)
    set_tests_properties(guest_pthread_rwlock PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_rwlock PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_key_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadKey.cpp)
    target_include_directories(guest_pthread_key_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_key_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_key_tests)
    add_test(NAME guest_pthread_key COMMAND guest_pthread_key_tests)
    set_tests_properties(guest_pthread_key PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_key PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_signal_tests ${LIBS_INCLUDE_DIR}/tests/GuestSignals.cpp)
    target_include_directories(guest_signal_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_signal_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_signal_tests)
    add_test(NAME guest_signals COMMAND guest_signal_tests)
    if(WIN32)
        set_tests_properties(guest_signals PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_parent_process_tests ${LIBS_INCLUDE_DIR}/tests/GuestParentProcess.cpp)
    target_include_directories(guest_parent_process_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_parent_process_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_parent_process_tests)
    add_test(NAME guest_parent_process COMMAND guest_parent_process_tests)
    if(WIN32)
        set_tests_properties(guest_parent_process PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_kill_tests ${LIBS_INCLUDE_DIR}/tests/GuestKill.cpp)
    target_include_directories(guest_kill_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_kill_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_kill_tests)
    add_test(NAME guest_kill COMMAND guest_kill_tests)
    set_tests_properties(guest_kill PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_kill PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_signal_set_tests ${LIBS_INCLUDE_DIR}/tests/GuestSignalSets.cpp)
    target_include_directories(guest_signal_set_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_signal_set_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_signal_set_tests)
    add_test(NAME guest_signal_sets COMMAND guest_signal_set_tests)
    set_tests_properties(guest_signal_sets PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_signal_sets PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_sigaltstack_tests ${LIBS_INCLUDE_DIR}/tests/GuestSigaltstack.cpp)
    target_include_directories(guest_sigaltstack_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_sigaltstack_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_sigaltstack_tests)
    add_test(NAME guest_sigaltstack COMMAND guest_sigaltstack_tests)
    if(WIN32)
        set_tests_properties(guest_sigaltstack PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_exception_handler_tests ${LIBS_INCLUDE_DIR}/tests/GuestExceptionHandler.cpp)
    target_include_directories(guest_exception_handler_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_exception_handler_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_exception_handler_tests)
    add_test(NAME guest_exception_handler COMMAND guest_exception_handler_tests)
    if(WIN32)
        set_tests_properties(guest_exception_handler PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    if(WIN32)
        add_test_executable(guest_raise_exception_tests ${LIBS_INCLUDE_DIR}/tests/GuestRaiseException.cpp)
        target_include_directories(guest_raise_exception_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_raise_exception_tests PRIVATE libkernel libc)
        configure_windows_unwind(guest_raise_exception_tests)
        add_test(NAME guest_raise_exception COMMAND guest_raise_exception_tests)
        set_tests_properties(guest_raise_exception PROPERTIES TIMEOUT 30 ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
        add_test_executable(guest_raise_nested_sleep_tests ${LIBS_INCLUDE_DIR}/tests/GuestRaiseNestedSleep.cpp)
        target_include_directories(guest_raise_nested_sleep_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_raise_nested_sleep_tests PRIVATE libkernel libc)
        configure_windows_unwind(guest_raise_nested_sleep_tests)
        add_test(NAME guest_raise_nested_sleep COMMAND guest_raise_nested_sleep_tests)
        set_tests_properties(guest_raise_nested_sleep PROPERTIES TIMEOUT 30 ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    if(WIN32)
        add_library(guest_unwind_module_info_fixture SHARED ${LIBS_INCLUDE_DIR}/tests/GuestUnwindModuleInfoFixture.cpp)
        target_include_directories(guest_unwind_module_info_fixture PRIVATE ${LIBS_INCLUDE_DIR})
        target_compile_options(guest_unwind_module_info_fixture PRIVATE -fno-exceptions)
        add_test_executable(guest_unwind_module_info_tests ${LIBS_INCLUDE_DIR}/tests/GuestUnwindModuleInfo.cpp)
        target_include_directories(guest_unwind_module_info_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_unwind_module_info_tests PRIVATE libkernel libc guest_unwind_module_info_fixture)
        configure_windows_unwind(guest_unwind_module_info_tests)
        add_test(NAME guest_unwind_module_info COMMAND guest_unwind_module_info_tests)
        set_tests_properties(guest_unwind_module_info PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>;PATH=path_list_prepend:$<TARGET_FILE_DIR:guest_unwind_module_info_fixture>")
    elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
        add_library(guest_unwind_module_info_fixture SHARED ${LIBS_INCLUDE_DIR}/tests/GuestModuleFixture.cpp)
        target_include_directories(guest_unwind_module_info_fixture PRIVATE ${LIBS_INCLUDE_DIR})
        set_target_properties(guest_unwind_module_info_fixture PROPERTIES PREFIX "" OUTPUT_NAME guest_unwind_module_info_fixture.prx SUFFIX ".guest.prx")
        add_library(guest_unwind_no_header_fixture SHARED ${LIBS_INCLUDE_DIR}/tests/GuestModuleFixture.cpp)
        target_include_directories(guest_unwind_no_header_fixture PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_options(guest_unwind_no_header_fixture PRIVATE -Wl,--no-eh-frame-hdr)
        set_target_properties(guest_unwind_no_header_fixture PROPERTIES PREFIX "" OUTPUT_NAME guest_unwind_no_header_fixture.prx SUFFIX ".guest.prx")
        add_test_executable(guest_unwind_module_info_tests ${LIBS_INCLUDE_DIR}/tests/GuestUnwindModuleInfoLinux.cpp)
        target_include_directories(guest_unwind_module_info_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_unwind_module_info_tests PRIVATE libkernel libc)
        add_dependencies(guest_unwind_module_info_tests guest_unwind_module_info_fixture guest_unwind_no_header_fixture)
        add_test(NAME guest_unwind_module_info COMMAND guest_unwind_module_info_tests guest_unwind_module_info_fixture.prx guest_unwind_no_header_fixture.prx)
        set_tests_properties(guest_unwind_module_info PROPERTIES
            WORKING_DIRECTORY "$<TARGET_FILE_DIR:guest_unwind_module_info_fixture>")
        add_test_executable(guest_unwind_module_info_failure_tests ${LIBS_INCLUDE_DIR}/tests/GuestUnwindModuleInfoFailureLinux.cpp)
        target_include_directories(guest_unwind_module_info_failure_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_unwind_module_info_failure_tests PRIVATE libkernel libc)
        set_target_properties(guest_unwind_module_info_failure_tests PROPERTIES ENABLE_EXPORTS ON)
        add_test(NAME guest_unwind_module_info_failure COMMAND guest_unwind_module_info_failure_tests)
    endif()
    add_test_executable(guest_sync_on_address_tests ${LIBS_INCLUDE_DIR}/tests/GuestSyncOnAddress.cpp)
    target_include_directories(guest_sync_on_address_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_sync_on_address_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_sync_on_address_tests)
    add_test(NAME guest_sync_on_address COMMAND guest_sync_on_address_tests)
    set_tests_properties(guest_sync_on_address PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_sync_on_address PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_available_cpumask_tests ${LIBS_INCLUDE_DIR}/tests/GuestAvailableCpumask.cpp)
    target_include_directories(guest_available_cpumask_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_available_cpumask_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_available_cpumask_tests)
    add_test(NAME guest_available_cpumask COMMAND guest_available_cpumask_tests)
    set_tests_properties(guest_available_cpumask PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_available_cpumask PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_current_cpu_tests ${LIBS_INCLUDE_DIR}/tests/GuestCurrentCpu.cpp)
    target_include_directories(guest_current_cpu_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_current_cpu_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_current_cpu_tests)
    add_test(NAME guest_current_cpu COMMAND guest_current_cpu_tests)
    set_tests_properties(guest_current_cpu PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_current_cpu PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_getrusage_tests ${LIBS_INCLUDE_DIR}/tests/GuestGetrusage.cpp)
    target_include_directories(guest_getrusage_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_getrusage_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_getrusage_tests)
    add_test(NAME guest_getrusage COMMAND guest_getrusage_tests)
    set_tests_properties(guest_getrusage PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_getrusage PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_sched_priority_tests ${LIBS_INCLUDE_DIR}/tests/GuestSchedPriority.cpp)
    target_include_directories(guest_sched_priority_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_sched_priority_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_sched_priority_tests)
    add_test(NAME guest_sched_priority COMMAND guest_sched_priority_tests)
    set_tests_properties(guest_sched_priority PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_sched_priority PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_waitpid_tests ${LIBS_INCLUDE_DIR}/tests/GuestWaitpid.cpp)
    target_include_directories(guest_waitpid_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_waitpid_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_waitpid_tests)
    add_test(NAME guest_waitpid COMMAND guest_waitpid_tests)
    set_tests_properties(guest_waitpid PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_waitpid PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_execvp_tests ${LIBS_INCLUDE_DIR}/tests/GuestExecvp.cpp)
    target_include_directories(guest_execvp_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_execvp_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_execvp_tests)
    add_test(NAME guest_execvp COMMAND guest_execvp_tests)
    if(WIN32)
        set_tests_properties(guest_execvp PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_kernel_error_tests ${LIBS_INCLUDE_DIR}/tests/GuestKernelErrors.cpp)
    target_include_directories(guest_kernel_error_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_kernel_error_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_kernel_error_tests)
    add_test(NAME guest_kernel_errors COMMAND guest_kernel_error_tests)
    set_tests_properties(guest_kernel_errors PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_kernel_errors PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_getrlimit_tests ${LIBS_INCLUDE_DIR}/tests/GuestGetrlimit.cpp)
    target_include_directories(guest_getrlimit_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_getrlimit_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_getrlimit_tests)
    add_test(NAME guest_getrlimit COMMAND guest_getrlimit_tests)
    set_tests_properties(guest_getrlimit PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_getrlimit PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_equeue_event_tests ${LIBS_INCLUDE_DIR}/tests/GuestEqueueEvents.cpp)
    target_include_directories(guest_equeue_event_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_equeue_event_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_equeue_event_tests)
    add_test(NAME guest_equeue_events COMMAND guest_equeue_event_tests)
    set_tests_properties(guest_equeue_events PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_equeue_events PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_shm_open_tests ${LIBS_INCLUDE_DIR}/tests/GuestShmOpen.cpp)
    target_include_directories(guest_shm_open_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_shm_open_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_shm_open_tests)
    add_test(NAME guest_shm_open COMMAND guest_shm_open_tests)
    if(WIN32)
        set_tests_properties(guest_shm_open PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_system_configuration_tests ${LIBS_INCLUDE_DIR}/tests/GuestSystemConfiguration.cpp)
    target_include_directories(guest_system_configuration_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_system_configuration_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_system_configuration_tests)
    add_test(NAME guest_system_configuration COMMAND guest_system_configuration_tests)
    if(WIN32)
        set_tests_properties(guest_system_configuration PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_software_version_tests ${LIBS_INCLUDE_DIR}/tests/GuestSoftwareVersion.cpp)
    target_include_directories(guest_software_version_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_software_version_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_software_version_tests)
    add_test(NAME guest_software_version COMMAND guest_software_version_tests)
    if(WIN32)
        set_tests_properties(guest_software_version PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_system_command_tests ${LIBS_INCLUDE_DIR}/tests/GuestSystemCommand.cpp)
    target_include_directories(guest_system_command_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_system_command_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_system_command_tests)
    add_test(NAME guest_system_command COMMAND guest_system_command_tests)
    if(WIN32)
        set_tests_properties(guest_system_command PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_udp_tests ${LIBS_INCLUDE_DIR}/tests/GuestUdp.cpp)
    target_include_directories(guest_udp_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_udp_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_udp_tests)
    add_test(NAME guest_udp COMMAND guest_udp_tests)
    set_tests_properties(guest_udp PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_udp PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_socket_read_write_tests ${LIBS_INCLUDE_DIR}/tests/GuestSocketReadWrite.cpp)
    target_include_directories(guest_socket_read_write_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_socket_read_write_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_socket_read_write_tests)
    add_test(NAME guest_socket_read_write COMMAND guest_socket_read_write_tests)
    set_tests_properties(guest_socket_read_write PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_socket_read_write PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_poll_tests ${LIBS_INCLUDE_DIR}/tests/GuestPoll.cpp)
    target_include_directories(guest_poll_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_poll_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_poll_tests)
    add_test(NAME guest_poll COMMAND guest_poll_tests)
    set_tests_properties(guest_poll PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_poll PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_tcp_tests ${LIBS_INCLUDE_DIR}/tests/GuestTcp.cpp)
    target_include_directories(guest_tcp_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_tcp_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_tcp_tests)
    add_test(NAME guest_tcp COMMAND guest_tcp_tests)
    set_tests_properties(guest_tcp PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_tcp PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_socket_pair_tests ${LIBS_INCLUDE_DIR}/tests/GuestSocketPair.cpp)
    target_include_directories(guest_socket_pair_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_socket_pair_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_socket_pair_tests)
    add_test(NAME guest_socket_pair COMMAND guest_socket_pair_tests)
    set_tests_properties(guest_socket_pair PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_socket_pair PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_dup_tests ${LIBS_INCLUDE_DIR}/tests/GuestDup.cpp)
    target_include_directories(guest_dup_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_dup_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_dup_tests)
    add_test(NAME guest_dup COMMAND guest_dup_tests)
    set_tests_properties(guest_dup PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_dup PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_socket_event_tests ${LIBS_INCLUDE_DIR}/tests/GuestSocketEvents.cpp)
    target_include_directories(guest_socket_event_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_socket_event_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_socket_event_tests)
    add_test(NAME guest_socket_events COMMAND guest_socket_event_tests)
    set_tests_properties(guest_socket_events PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_socket_events PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_elf_phdr_match_tests ${LIBS_INCLUDE_DIR}/tests/GuestElfPhdrMatch.cpp)
    target_include_directories(guest_elf_phdr_match_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_elf_phdr_match_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_elf_phdr_match_tests)
    add_test(NAME guest_elf_phdr_match COMMAND guest_elf_phdr_match_tests)
    set_tests_properties(guest_elf_phdr_match PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_elf_phdr_match PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_credentials_tests ${LIBS_INCLUDE_DIR}/tests/GuestCredentials.cpp)
    target_include_directories(guest_credentials_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_credentials_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_credentials_tests)
    add_test(NAME guest_credentials COMMAND guest_credentials_tests)
    set_tests_properties(guest_credentials PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_credentials PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_address_tests ${LIBS_INCLUDE_DIR}/tests/GuestAddressConversion.cpp)
    target_include_directories(guest_address_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_address_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_address_tests)
    add_test(NAME guest_addresses COMMAND guest_address_tests)
    if(WIN32)
        set_tests_properties(guest_addresses PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_memory_tests ${LIBS_INCLUDE_DIR}/tests/GuestMemory.cpp)
    target_include_directories(guest_memory_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_memory_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_memory_tests)
    add_test(NAME guest_memory COMMAND guest_memory_tests)
    if(WIN32)
        add_library(guest_memory_module SHARED ${LIBS_INCLUDE_DIR}/tests/GuestMemoryModule.cpp)
        set_target_properties(guest_memory_module PROPERTIES PREFIX "" SUFFIX ".guest.prx")
        add_dependencies(guest_memory_tests guest_memory_module)
        target_compile_definitions(guest_memory_tests PRIVATE GUEST_MEMORY_MODULE="$<TARGET_FILE:guest_memory_module>")
        set_tests_properties(guest_memory PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_mlock_tests ${LIBS_INCLUDE_DIR}/tests/GuestMlock.cpp)
    target_include_directories(guest_mlock_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_mlock_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_mlock_tests)
    add_test(NAME guest_mlock COMMAND guest_mlock_tests)
    set_tests_properties(guest_mlock PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_mlock PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_msync_tests ${LIBS_INCLUDE_DIR}/tests/GuestMsync.cpp)
    target_include_directories(guest_msync_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_msync_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_msync_tests)
    add_test(NAME guest_msync COMMAND guest_msync_tests)
    set_tests_properties(guest_msync PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_msync PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    if(WIN32)
        add_test_executable(guest_directory_buffer_tests ${LIBS_INCLUDE_DIR}/tests/GuestDirectoryBuffer.cpp)
        target_include_directories(guest_directory_buffer_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_directory_buffer_tests PRIVATE libkernel libc)
        configure_windows_unwind(guest_directory_buffer_tests)
        add_test(NAME guest_directory_buffer COMMAND guest_directory_buffer_tests)
        set_tests_properties(guest_directory_buffer PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    if(NOT WIN32)
        add_test_executable(guest_directory_entry_tests ${LIBS_INCLUDE_DIR}/tests/GuestDirectoryEntries.cpp)
        target_include_directories(guest_directory_entry_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_directory_entry_tests PRIVATE libkernel libc)
        add_test(NAME guest_directory_entries COMMAND guest_directory_entry_tests)
    else()
        add_test_executable(guest_directory_close_tests ${LIBS_INCLUDE_DIR}/tests/GuestDirectoryClose.cpp)
        target_include_directories(guest_directory_close_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_directory_close_tests PRIVATE libkernel libc)
        configure_windows_unwind(guest_directory_close_tests)
        add_test(NAME guest_directory_close COMMAND guest_directory_close_tests)
        set_tests_properties(guest_directory_close PROPERTIES TIMEOUT 15 ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
        if(MINGW)
            target_compile_options(guest_directory_close_tests PRIVATE -fasynchronous-unwind-tables)
        endif()
    endif()
    add_test_executable(guest_file_vector_tests ${LIBS_INCLUDE_DIR}/tests/GuestFileVector.cpp)
    target_include_directories(guest_file_vector_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_file_vector_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_file_vector_tests)
    add_test(NAME guest_file_vector COMMAND guest_file_vector_tests)
    if(WIN32)
        set_tests_properties(guest_file_vector PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_fstatfs_tests ${LIBS_INCLUDE_DIR}/tests/GuestFstatfs.cpp)
    target_include_directories(guest_fstatfs_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_fstatfs_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_fstatfs_tests)
    add_test(NAME guest_fstatfs COMMAND guest_fstatfs_tests)
    set_tests_properties(guest_fstatfs PROPERTIES TIMEOUT 15)
    if(WIN32)
        set_tests_properties(guest_fstatfs PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_kernel_fcntl_tests ${LIBS_INCLUDE_DIR}/tests/GuestKernelFcntl.cpp)
    target_include_directories(guest_kernel_fcntl_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_kernel_fcntl_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_kernel_fcntl_tests)
    add_test(NAME guest_kernel_fcntl COMMAND guest_kernel_fcntl_tests)
    set_tests_properties(guest_kernel_fcntl PROPERTIES TIMEOUT 15)
    if(WIN32)
        set_tests_properties(guest_kernel_fcntl PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_sandbox_random_word_tests ${LIBS_INCLUDE_DIR}/tests/GuestSandboxRandomWord.cpp)
    target_include_directories(guest_sandbox_random_word_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_sandbox_random_word_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_sandbox_random_word_tests)
    add_test(NAME guest_sandbox_random_word COMMAND guest_sandbox_random_word_tests)
    set_tests_properties(guest_sandbox_random_word PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_sandbox_random_word PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
        add_test_executable(guest_mutex_raise_exception_tests ${LIBS_INCLUDE_DIR}/tests/GuestMutexRaiseException.cpp)
        target_include_directories(guest_mutex_raise_exception_tests PRIVATE ${LIBS_INCLUDE_DIR})
        target_link_libraries(guest_mutex_raise_exception_tests PRIVATE libkernel libc)
        configure_windows_unwind(guest_mutex_raise_exception_tests)
        add_test(NAME guest_mutex_raise_exception COMMAND guest_mutex_raise_exception_tests)
        set_tests_properties(guest_mutex_raise_exception PROPERTIES TIMEOUT 20 ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
    add_test_executable(guest_pthread_rename_tests ${LIBS_INCLUDE_DIR}/tests/GuestPthreadRename.cpp)
    target_include_directories(guest_pthread_rename_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(guest_pthread_rename_tests PRIVATE libkernel libc)
    configure_windows_unwind(guest_pthread_rename_tests)
    add_test(NAME guest_pthread_rename COMMAND guest_pthread_rename_tests)
    set_tests_properties(guest_pthread_rename PROPERTIES TIMEOUT 20)
    if(WIN32)
        set_tests_properties(guest_pthread_rename PROPERTIES ENVIRONMENT_MODIFICATION
            "PATH=path_list_prepend:$<TARGET_FILE_DIR:libkernel>")
    endif()
endif()
