dofile('rive_tools_project.lua')

newoption({
    trigger = 'no_tools_shader_hotloading',
    description = 'do not compile in support for shader hotloading',
})

if not _OPTIONS['for_unreal'] then
    rive_tools_project(
        'bench',
        _OPTIONS['os'] == 'ios' and 'StaticLib'
            or _OPTIONS['all_tools_as_static'] and 'StaticLib'
            or 'ConsoleApp'
    )
    do
        files({ 'bench/*.cpp' })
    end
end

rive_tools_project('gms', 'RiveTool')
do
    files({ 'gm/*.cpp' })
    -- Deferred-rendering 2D record/replay (SerializingFactory + the replay that
    -- drives a real Factory/Renderer) so GMs can verify 2D replay against PLS.
    files({
        '../utils/serializing_factory.cpp',
        '../utils/serialized_replay.cpp',
    })
    -- serializing_factory.cpp decodes images (decoders header).
    includedirs({ '../decoders/include' })
    -- Ore GM tests need Obj-C++ on Apple (ore headers include <Metal/Metal.h>).
    -- .mm wrappers #include the .cpp files so every Apple generator compiles
    -- them as Obj-C++ without needing compileas or buildoptions hacks.
    -- On non-Apple, ore GMs are excluded from the gm/*.cpp glob but re-added
    -- per-platform as the corresponding Ore backend lands.
    removefiles({ 'gm/ore_*.cpp' })
    -- render_canvas GMs use RenderContext::makeRenderCanvas which is gated
    -- behind RIVE_CANVAS; only compile them when with_rive_canvas is on.
    filter({ 'options:not with_rive_canvas' })
    do
        removefiles({ 'gm/render_canvas*.cpp' })
    end
    filter('system:macosx or ios')
    do
        files({ 'gm/*.mm' })
        buildoptions({ '-fobjc-arc' })
    end
    -- D3D11 Ore backend: include ore GMs on Windows when with_rive_canvas is on.
    filter({ 'system:windows', 'options:with_rive_canvas' })
    do
        files({ 'gm/ore_*.cpp' })
    end
    -- GL Ore backend: include ore GMs on Android/Emscripten/Linux.
    filter({ 'system:android or emscripten or linux', 'options:with_rive_canvas' })
    do
        files({ 'gm/ore_*.cpp' })
    end
    -- Console builds: include ore GMs to exercise ORE_BACKEND_VK paths.
    filter({ 'options:_console_only_ore_vk', 'options:with_rive_canvas' })
    do
        files({ 'gm/ore_*.cpp' })
    end
    filter({})
    filter({ 'options:not no_tools_shader_hotloading' })
    do
        files({ RIVE_PLS_DIR .. '/shader_hotload/**.cpp' })
    end
    filter({ 'options:for_unreal' })
    do
        defines({ 'RIVE_UNREAL' })
    end
    filter('system:emscripten')
    do
        files({ 'gm/gms.html' })
    end
end

rive_tools_project('goldens', 'RiveTool')
do
    exceptionhandling('On')
    files({ 'goldens/goldens.cpp', 'goldens/goldens_bench.cpp' })
    -- The deferred recording factory (deferred_render_factory.hpp) decodes image
    -- dimensions at record time so the artboard's layout sees real sizes; needs
    -- the decoder header + RIVE_DECODERS (the lib is already linked).
    includedirs({ '../decoders/include' })
    defines({ 'RIVE_DECODERS' })
    filter({ 'options:not no_tools_shader_hotloading' })
    do
        files({ RIVE_PLS_DIR .. '/shader_hotload/**.cpp' })
    end
    filter({ 'options:for_unreal' })
    do
        defines({ 'RIVE_UNREAL' })
    end
    filter('system:emscripten')
    do
        files({ 'goldens/goldens.html' })
    end
end

rive_tools_project('player', 'RiveTool')
do
    files({ 'player/player.cpp' })
    filter('system:emscripten')
    do
        files({ 'player/player.html' })
    end

    filter({ 'options:not no_tools_shader_hotloading' })
    do
        files({ RIVE_PLS_DIR .. '/shader_hotload/**.cpp' })
    end
end
