workspace('rive')
configurations({ 'debug', 'release' })

dependencies = os.getenv('DEPENDENCIES')

rive = '../../'

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

project('rive_tess_renderer')
do
    kind('StaticLib')
    language('C++')
    cppdialect('C++11')
    toolset('clang')
    targetdir('%{cfg.system}/bin/%{cfg.buildcfg}')
    objdir('%{cfg.system}/obj/%{cfg.buildcfg}')
    includedirs({
        '../include',
        rive .. '/include',
        dependencies .. '/sokol',
        dependencies .. '/earcut.hpp/include/mapbox',
        dependencies .. '/libtess2/Include',
        yoga,
    })
    files({ '../src/**.cpp', dependencies .. '/libtess2/Source/**.c' })
    buildoptions({ '-Wall', '-fno-exceptions', '-fno-rtti', '-Werror=format' })

    filter('configurations:debug')
    do
        buildoptions({ '-g' })
        defines({ 'DEBUG' })
        symbols('On')
    end

    filter('configurations:release')
    do
        buildoptions({ '-flto=full' })
        defines({ 'RELEASE', 'NDEBUG' })
        optimize('On')
    end

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

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

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

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

project('rive_tess_tests')
do
    dependson('rive_tess_renderer')
    dependson('rive')
    kind('ConsoleApp')
    language('C++')
    cppdialect('C++17')
    toolset('clang')
    targetdir('%{cfg.system}/bin/%{cfg.buildcfg}')
    objdir('%{cfg.system}/obj/%{cfg.buildcfg}')
    includedirs({
        rive .. 'dev/test/include', -- for catch.hpp
        rive .. 'test', -- for things like rive_file_reader.hpp
        '../include',
        rive .. '/include',
        dependencies .. '/sokol',
        dependencies .. '/earcut.hpp/include/mapbox',
        yoga,
    })
    files({ '../test/**.cpp', rive .. 'utils/no_op_factory.cpp' })
    links({ 'rive_tess_renderer', 'rive', 'rive_harfbuzz', 'rive_sheenbidi', 'rive_yoga' })
    buildoptions({ '-Wall', '-fno-exceptions', '-fno-rtti', '-Werror=format' })
    defines({ 'TESTING', 'YOGA_EXPORT=' })

    filter('configurations:debug')
    do
        buildoptions({ '-g' })
        defines({ 'DEBUG' })
        symbols('On')
    end

    filter('configurations:release')
    do
        buildoptions({ '-flto=full' })
        defines({ 'RELEASE', 'NDEBUG' })
        optimize('On')
    end
end
