dofile('rive_build_config.lua')

dependencies = os.getenv('DEPENDENCIES')

rive = '../../'
rive_tess = '../../tess'
rive_skia = '../../skia'
skia = dependencies .. '/skia'

if _OPTIONS.renderer == 'tess' then
    dofile(rive .. '/decoders/build/premake5.lua')
    dofile(path.join(path.getabsolute(rive_tess) .. '/build', 'premake5_tess.lua'))
else
    -- tess renderer includes this
    dofile(path.join(path.getabsolute(rive) .. '/build', 'premake5.lua'))
end

dofile(path.join(path.getabsolute(rive) .. '/cg_renderer', 'premake5.lua'))

project('rive_viewer')
do
    if _OPTIONS.renderer == 'tess' then
        dependson('rive_decoders')
    end
    kind('ConsoleApp')

    defines({ 'WITH_RIVE_TEXT', 'WITH_RIVE_AUDIO', 'WITH_RIVE_LAYOUT', 'YOGA_EXPORT=' })

    includedirs({
        '../include',
        rive .. '/include',
        rive .. '/skia/renderer/include', -- for font backends
        dependencies,
        dependencies .. '/sokol',
        dependencies .. '/imgui',
        miniaudio,
        yoga,
    })

    links({ 'rive', 'rive_harfbuzz', 'rive_sheenbidi', 'rive_yoga' })

    libdirs({ rive .. '/build/%{cfg.system}/bin/%{cfg.buildcfg}' })

    files({
        '../src/**.cpp',
        rive .. '/utils/**.cpp',
        dependencies .. '/imgui/imgui.cpp',
        dependencies .. '/imgui/imgui_widgets.cpp',
        dependencies .. '/imgui/imgui_tables.cpp',
        dependencies .. '/imgui/imgui_draw.cpp',
    })

    buildoptions({ '-Wall', '-fno-exceptions', '-fno-rtti' })

    filter({ 'system:macosx' })
    do
        links({
            'Cocoa.framework',
            'IOKit.framework',
            'CoreVideo.framework',
            'OpenGL.framework',
            'rive_cg_renderer',
        })
        files({ '../src/**.m', '../src/**.mm' })
    end

    filter({ 'system:macosx', 'options:graphics=gl' })
    do
        links({ 'OpenGL.framework' })
    end

    filter({ 'system:macosx', 'options:graphics=metal' })
    do
        links({ 'Metal.framework', 'MetalKit.framework', 'QuartzCore.framework' })
    end

    -- Tess Renderer Configuration
    filter({ 'options:renderer=tess' })
    do
        includedirs({ rive_tess .. '/include', rive .. '/decoders/include' })
        defines({ 'RIVE_RENDERER_TESS' })
        links({ 'rive_tess_renderer', 'rive_decoders', 'libpng', 'zlib', 'libjpeg', 'libwebp' })
        libdirs({ rive_tess .. '/build/%{cfg.system}/bin/%{cfg.buildcfg}' })
    end

    filter({ 'options:renderer=tess', 'options:graphics=gl' })
    do
        defines({ 'SOKOL_GLCORE33' })
    end

    filter({ 'options:renderer=tess', 'options:graphics=metal' })
    do
        defines({ 'SOKOL_METAL' })
    end

    filter({ 'options:renderer=tess', 'options:graphics=d3d' })
    do
        defines({ 'SOKOL_D3D11' })
    end

    filter({ 'options:renderer=skia', 'options:graphics=gl' })
    do
        defines({ 'SK_GL', 'SOKOL_GLCORE33' })
        files({ '../src/skia/viewer_skia_gl.cpp' })
        libdirs({ skia .. '/out/gl/%{cfg.buildcfg}' })
    end

    filter({ 'options:renderer=skia', 'options:graphics=metal' })
    do
        defines({ 'SK_METAL', 'SOKOL_METAL' })
        libdirs({ skia .. '/out/metal/%{cfg.buildcfg}' })
    end

    filter({ 'options:renderer=skia', 'options:graphics=d3d' })
    do
        defines({ 'SK_DIRECT3D' })
        libdirs({ skia .. '/out/d3d/%{cfg.buildcfg}' })
    end

    filter({ 'options:renderer=skia' })
    do
        includedirs({
            skia,
            skia .. '/include/core',
            skia .. '/include/effects',
            skia .. '/include/gpu',
            skia .. '/include/config',
        })
        defines({ 'RIVE_RENDERER_SKIA' })
        libdirs({
            rive_skia .. '/renderer/build/%{cfg.system}/bin/%{cfg.buildcfg}',
        })
        links({ 'skia', 'rive_skia_renderer' })
    end

    -- CLI config options
    newoption({
        trigger = 'graphics',
        value = 'gl',
        description = 'The graphics api to use.',
        allowed = { { 'gl' }, { 'metal' }, { 'd3d' } },
    })

    newoption({
        trigger = 'renderer',
        value = 'skia',
        description = 'The renderer to use.',
        allowed = { { 'skia' }, { 'tess' } },
    })
end
