filter({ 'system:not windows' })
do
    buildoptions({ '-ffp-model=strict' })
end
filter({ 'system:windows' })
do
    buildoptions({ '/fp:strict' })
end
filter({ 'system:windows', 'options:toolset=clang' })
do
    buildoptions({
        '-Wno-overriding-option',
    })
end
filter({})

dofile('rive_build_config.lua')
TESTING = true
defines({
    'TESTING',
    'ENABLE_QUERY_FLAT_VERTICES',
    'WITH_RIVE_TOOLS',
    'WITH_RIVE_TEXT',
    'WITH_RIVE_AUDIO',
    'WITH_RIVE_AUDIO_TOOLS',
    'WITH_RIVE_LAYOUT',
    'WITH_RIVE_SCRIPTING',
    'YOGA_EXPORT=',
    'RIVE_NO_CORETEXT',
})

if _OPTIONS['toolset'] == 'msc' then
    defines({
        'MA_NO_MP3', -- miniaudio's mp3 decoder + fp:strict causes C2099
    })
end
dofile(path.join(path.getabsolute('../../'), 'premake5_v2.lua'))
dofile(path.join(path.getabsolute('../../decoders/'), 'premake5_v2.lua'))

-- Force "--raw_shaders" so that we can include the generated shader files and
-- compile them as C++ for unit tests.
if _OPTIONS['toolset'] ~= 'msc' then
    _OPTIONS['raw_shaders'] = true
end

dofile(path.join(path.getabsolute('../../renderer/'), 'premake5_pls_renderer.lua'))

dofile('../rive_tools_project.lua')

rive_tools_project('unit_tests', 'ConsoleApp')
do
    kind('ConsoleApp')
    exceptionhandling('On')

    includedirs({
        '..',
        '../include',
        '../../include',
        '../../decoders/include',
        '../../renderer/include',
        '../../renderer/src',
        harfbuzz .. '/src',
        miniaudio,
        yoga,
        pls_generated_headers,
        luau .. '/VM/include',
        -- we need these for testing so we can compile
        luau .. '/Compiler/include',
        luau .. '/Ast/include',
        luau .. '/Common/include',
    })

    links({
        'rive',
        'rive_harfbuzz',
        'rive_sheenbidi',
        'rive_yoga',
        'rive_decoders',
        'libpng',
        'zlib',
        'libjpeg',
        'libwebp',
        'miniaudio',
        'luau_vm',
        'luau_compiler',
    })

    files({
        'runtime/**.cpp', -- the runtime tests
        'renderer/**.cpp', -- the renderer tests
        '../../utils/**.cpp', -- no_op utils
        '../common/render_context_null.cpp',
    })

    filter('system:linux')
    do
        links({ 'dl', 'pthread' })
    end
    filter({ 'options:not no-harfbuzz-renames' })
    do
        includedirs({
            dependencies,
        })
        forceincludes({ 'rive_harfbuzz_renames.h' })
    end

    filter({ 'options:not no-yoga-renames' })
    do
        includedirs({
            dependencies,
        })
        forceincludes({ 'rive_yoga_renames.h' })
    end

    filter({ 'system:macosx' })
    do
        links({
            'Foundation.framework',
            'ImageIO.framework',
            'CoreGraphics.framework',
            'CoreText.framework',
        })
    end

    filter({ 'toolset:not msc' })
    do
        linkoptions({ '-fprofile-instr-generate', '-fcoverage-mapping' })
    end

    filter({})
end
