|  | 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' }) | 
|  |  | 
|  | includedirs({ | 
|  | '../include', | 
|  | rive .. '/include', | 
|  | rive .. '/skia/renderer/include', -- for font backends | 
|  | dependencies, | 
|  | dependencies .. '/sokol', | 
|  | dependencies .. '/imgui', | 
|  | miniaudio, | 
|  | }) | 
|  |  | 
|  | links({ 'rive', 'rive_harfbuzz', 'rive_sheenbidi' }) | 
|  |  | 
|  | 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' }) | 
|  | 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 |