include(${CMAKE_CURRENT_SOURCE_DIR}/Ngs2Library.cmake)
add_sce_ngs2_library(libSceNgs2.native)
target_sources(libSceNgs2.native PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Export.cpp)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/Export.cpp PROPERTIES COMPILE_OPTIONS -fvisibility=default)

if(BUILD_TESTING)
    add_test_executable(ngs2_custom_safety_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/Ngs2CustomSafety.cpp)
    target_include_directories(ngs2_custom_safety_tests PRIVATE ${LIBS_INCLUDE_DIR})
    target_link_libraries(ngs2_custom_safety_tests PRIVATE libSceNgs2.native libkernel libc)
    configure_windows_unwind(ngs2_custom_safety_tests)
    foreach(safetyCase IN ITEMS custom_callback upstream_callback configured_gain routing_one_buffer routing_two_buffers)
        add_test(NAME ngs2_custom_safety_${safetyCase} COMMAND ngs2_custom_safety_tests ${safetyCase})
        set_tests_properties(ngs2_custom_safety_${safetyCase} PROPERTIES TIMEOUT 10)
        if(WIN32)
            set_tests_properties(ngs2_custom_safety_${safetyCase} PROPERTIES ENVIRONMENT_MODIFICATION
                "PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceNgs2.native>")
        endif()
    endforeach()
    foreach(ngs2Test IN ITEMS Render Atrac9 Filter Custom Gain Routing Parse Stream UserFx Report Geom VoiceIndex HandleErrors VoiceHandles VoiceEvents)
        string(TOLOWER ${ngs2Test} testName)
        add_test_executable(ngs2_${testName}_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/Ngs2${ngs2Test}.cpp)
        target_include_directories(ngs2_${testName}_tests PRIVATE ${LIBS_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/3rdparty/LibAtrac9/C/src)
        target_link_libraries(ngs2_${testName}_tests PRIVATE libSceNgs2.native atrac9 libkernel libc)
        configure_windows_unwind(ngs2_${testName}_tests)
        add_test(NAME ngs2_${testName} COMMAND ngs2_${testName}_tests)
        if(WIN32)
            set_tests_properties(ngs2_${testName} PROPERTIES ENVIRONMENT_MODIFICATION
                "PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceNgs2.native>")
        endif()
    endforeach()
    add_sce_ngs2_test(libSceNgs2.native ngs2_pcm Ngs2Pcm.cpp)
endif()
