cmake_minimum_required(VERSION 3.20)
project(LoSteamArtworkTests LANGUAGES C CXX)
enable_testing()
get_filename_component(LO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../.." ABSOLUTE)
if(LO_MINIZ_DIR)
    set(LO_STEAM_MINIZ_DIR "${LO_MINIZ_DIR}")
else()
    set(LO_STEAM_MINIZ_DIR "${LO_ROOT}/tools/XenosRecomp/thirdparty/smol-v/testing/external/miniz")
endif()
add_executable(LoSteamArtworkTest "${LO_ROOT}/tools/tests/steam_artwork_test.cpp"
    "${LO_ROOT}/LostOdysseyRecomp/os/steam_artwork.cpp" "${LO_STEAM_MINIZ_DIR}/miniz.c")
target_include_directories(LoSteamArtworkTest PRIVATE "${LO_ROOT}/LostOdysseyRecomp" "${LO_STEAM_MINIZ_DIR}")
target_compile_features(LoSteamArtworkTest PRIVATE cxx_std_20)
if(MSVC)
    target_compile_options(LoSteamArtworkTest PRIVATE /utf-8 /UNDEBUG)
else()
    target_compile_options(LoSteamArtworkTest PRIVATE -UNDEBUG)
    if(LO_REVIEW_SANITIZE)
        target_compile_options(LoSteamArtworkTest PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer)
        target_link_options(LoSteamArtworkTest PRIVATE -fsanitize=address,undefined)
        # The existing miniz x86 fast path deliberately reads unaligned uint16s.
        # Keep the new C++ fully instrumented and all other checks on miniz.
        set_property(SOURCE "${LO_STEAM_MINIZ_DIR}/miniz.c" APPEND PROPERTY
            COMPILE_OPTIONS -fno-sanitize=alignment)
    endif()
endif()
add_test(NAME steam_artwork COMMAND LoSteamArtworkTest)
set_tests_properties(steam_artwork PROPERTIES TIMEOUT 60)
if(LO_REVIEW_SANITIZE)
    set_tests_properties(steam_artwork PROPERTIES ENVIRONMENT "UBSAN_OPTIONS=halt_on_error=1")
endif()
